34 lines
1.3 KiB
Python
34 lines
1.3 KiB
Python
# -*- coding: utf-8 -*-
|
|
# puppet.py - sublimelint package for checking puppet files
|
|
|
|
import re
|
|
|
|
from base_linter import BaseLinter, INPUT_METHOD_TEMP_FILE
|
|
|
|
CONFIG = {
|
|
'language': 'Puppet',
|
|
'executable': 'puppet',
|
|
'lint_args': ['parser', 'validate', '--color=false', '{filename}'],
|
|
'test_existence_args': '-V',
|
|
'input_method': INPUT_METHOD_TEMP_FILE
|
|
}
|
|
|
|
|
|
class Linter(BaseLinter):
|
|
def parse_errors(self, view, errors, lines, errorUnderlines, violationUnderlines, warningUnderlines, errorMessages, violationMessages, warningMessages):
|
|
for line in errors.splitlines():
|
|
match = re.match(r'[Ee]rr(or)?: (?P<error>.+?(Syntax error at \'(?P<near>.+?)\'; expected \'.+\')) at /.+?:(?P<line>\d+)?', line)
|
|
if not match:
|
|
match = re.match(r'[Ee]rr(or)?: (?P<error>.+?(Could not match (?P<near>.+?))?) at /.+?:(?P<line>\d+)?', line)
|
|
|
|
if match:
|
|
error, line = match.group('error'), match.group('line')
|
|
lineno = int(line)
|
|
near = match.group('near')
|
|
|
|
if near:
|
|
error = '{0}, near "{1}"'.format(error, near)
|
|
self.underline_regex(view, lineno, '(?P<underline>{0})'.format(re.escape(near)), lines, errorUnderlines)
|
|
|
|
self.add_message(lineno, lines, error, errorMessages)
|