html-linter 0.4.0
Lints an HTML5 file using Google's style guide

HTML Linter
===========

.. image:: https://badge.fury.io/py/html-linter.svg
    :target: http://badge.fury.io/py/html-linter

.. image:: https://api.travis-ci.org/sk-/html-linter.svg?branch=master
    :target: https://travis-ci.org/sk-/html-linter

.. image:: https://coveralls.io/repos/sk-/html-linter/badge.svg?branch=master
    :target: https://coveralls.io/r/sk-/html-linter?branch=master


HTML Linter is an HTML5 linter that follows the style guide defined by Google.

Motivation
----------

Handling HTML5 files generated by lots of different of people is a difficult
task, because the standard is evolving quite fast and also because browsers are
quite open to accept any malformed/invalid/incomplete input.

That's why we decided to have an automated tool to check our coding standard.

We start with the
`Google standard <https://google.github.io/styleguide/htmlcssguide.xml>`_
and we enhance it with some extra rules defined by the project
`html-minifier <https://github.com/kangax/html-minifier>`_. You can read his
detailed `article <http://perfectionkills.com/experimenting-with-html-minifier/#remove_redundant_attributes>`_.

The list of extra rules we added are:

* Boolean attributes should not have an explicit value.
* Do not use the name attribute in a tags.
* Do not use the language attribute in script tags.
* Do not use the charset attribute in script tags when there is no source.
* Javascript:void(0) links are evil.
* onclick='javascript: ...' is not required. This will raise also a Concerns Separation error.
* meta http-equiv: use only standard properties + X-UA-compatible
* No extra white-spaces between attributes or before the opening or closing tag.

What is missing?
----------------

Check if the file has BOM.

The ability to validate the HTML using the tool
`HTML5 tidy <https://w3c.github.io/tidy-html5/>`_ and to integrate some
schema.org or microdata validator.

However, we do not have any short terms plans to handle the latter, due to a
couple of reasons:

* Tidy can be easily integrated using the tool `git-lint <https://github.com/sk-/git-lint>`_
* Any other validator can also be integrated with `git-lint <https://github.com/sk-/git-lint>`_
* Adding any extra validator would pull many more dependencies and change the scope.

Limitations
-----------

html_linter used the project
`template-remover <https://github.com/deezer/template-remover>`_ to remove the
PHP and Jinja markup from the files and this project works has some limitations.


One example that won't work is the following::

  <?php echo "?>" ?>

The reason it does not work is because when the method sees the first '?>'
(the one inside the string), it thinks it's a closing tag.


Example use
-----------

Below are example of how template_remover.py is used::

  $ html_lint.py filename.html


Installation
------------

You can install, upgrade or uninstall html-linter with these commands::

  $ pip install html-linter
  $ pip install --upgrade html-linter
  $ pip uninstall html-linter

Python Versions
---------------

Python 2.7, 3.3, 3.4, 3.5 and 3.6 are supported.

Development
-----------

Help for this project is more than welcomed, so feel free to create an issue or
to send a pull request via http://github.com/deezer/html-linter.

Tests are run using nose, either with::

  $ python -R setup.py nosetests
  $ nosetests

Use the tool `git-lint <https://github.com/sk-/git-lint>`_ before any commit, so
errors and style problems are caught early.

TODOS and Possible Features
---------------------------

* Make the output less verbose.
* Integrate with HTML5 tidy.
* Integrate with a schema.org/microdata validator.

Contributors
------------

* `Dustin Ingram <https://github.com/di>`_


Changelog
=========

v0.4 (2017-03-30)
-----------------

* Support for a ``--printfilename`` option (`#8 <https://github.com/sk-/html-linter/pull/8>`_)
* Support for Python 3.6 (`#12 <https://github.com/sk-/html-linter/pull/12>`_)

v0.3 (2016-01-24)
-----------------

* Support for multiple files (by `@di <https://github.com/di>`_)

v0.2 (2015-12-13)
-----------------

* Support for Python 3.5

v0.1 (2014-05-07)
-----------------

* Initial commit.