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)
 |