# # linter.py # Linter for SublimeLinter3, a code checking framework for Sublime Text 3 # # Written by Mark Maday # Copyright (c) 2015 Mark Maday # # License: MIT # """This module exports the Htmlhint plugin class.""" import logging import sublime from SublimeLinter.lint import LintMatch, NodeLinter logger = logging.getLogger("SublimeLinter.plugin.htmlhint") class Htmlhint(NodeLinter): """Provides an interface to htmlhint.""" cmd = ("htmlhint", "--format", "json", "--nocolor", "stdin") defaults = {"selector": "text.html"} def find_errors(self, output): """ Override find_errors, parsing output json into json_object. Calls parse_message for each error found. """ output_json = sublime.decode_value(output) logger.debug('output_json:"%s", file: "%s"', output_json, self.filename) for file in output_json: for message in file["messages"]: yield self.parse_message(message) def parse_message(self, message): """Parse message object into standard elements of an error and return them.""" error_message = message["message"] line = message["line"] - 1 col = message["col"] error_type = message["type"] # ignore message type of info if error_type == "info": message = None logger.info( 'message -- msg:"%s", line:%s, col:%s, type: %s, message_obj:%s', error_message, line, col, error_type, message, ) return LintMatch( filename=self.filename, line=line, col=col, error_type=error_type, code=message.get("rule", {}).get("id", ""), message=error_message, match=str(message), )