38 lines
1.3 KiB
Python
38 lines
1.3 KiB
Python
# -*- coding: utf-8 -*-
|
|
# cpp.py - sublimelint package for checking C++ files
|
|
|
|
import re
|
|
|
|
from base_linter import BaseLinter, INPUT_METHOD_TEMP_FILE
|
|
|
|
CONFIG = {
|
|
'language': 'C',
|
|
'executable': 'cppcheck',
|
|
'lint_args': ['--enable=style', '--quiet', '{filename}'],
|
|
'input_method': INPUT_METHOD_TEMP_FILE
|
|
}
|
|
|
|
|
|
class Linter(BaseLinter):
|
|
CPPCHECK_RE = re.compile(r'\[.+?:(\d+?)\](.+)')
|
|
|
|
def __init__(self, config):
|
|
super(Linter, self).__init__(config)
|
|
|
|
def parse_errors(self, view, errors, lines, errorUnderlines,
|
|
violationUnderlines, warningUnderlines,
|
|
errorMessages, violationMessages,
|
|
warningMessages):
|
|
# Go through each line in the output of cppcheck
|
|
for line in errors.splitlines():
|
|
match = self.CPPCHECK_RE.match(line)
|
|
if match:
|
|
# The regular expression matches the line number and
|
|
# the message as its two groups.
|
|
lineno, message = match.group(1), match.group(2)
|
|
# Remove the colon at the beginning of the message
|
|
if len(message) > 0 and message[0] == ':':
|
|
message = message[1:].strip()
|
|
lineno = int(lineno)
|
|
self.add_message(lineno, lines, message, errorMessages)
|