60 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			60 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| # -*- coding: utf-8 -*-
 | |
| # java.py - sublimelint package for checking java files
 | |
| 
 | |
| import os
 | |
| import os.path
 | |
| import re
 | |
| 
 | |
| from base_linter import BaseLinter, INPUT_METHOD_FILE
 | |
| 
 | |
| CONFIG = {
 | |
|     'language': 'Java',
 | |
|     'executable': 'javac',
 | |
|     'test_existence_args': '-version',
 | |
|     'input_method': INPUT_METHOD_FILE
 | |
| }
 | |
| 
 | |
| ERROR_RE = re.compile(r'^(?P<path>.*\.java):(?P<line>\d+): (?P<warning>warning: )?(?:\[\w+\] )?(?P<error>.*)')
 | |
| MARK_RE = re.compile(r'^(?P<mark>\s*)\^$')
 | |
| 
 | |
| 
 | |
| class Linter(BaseLinter):
 | |
|     def parse_errors(self, view, errors, lines, errorUnderlines,
 | |
|                      violationUnderlines, warningUnderlines, errorMessages,
 | |
|                      violationMessages, warningMessages):
 | |
|         it = iter(errors.splitlines())
 | |
| 
 | |
|         for line in it:
 | |
|             match = re.match(ERROR_RE, line)
 | |
| 
 | |
|             if match:
 | |
|                 path = os.path.abspath(match.group('path'))
 | |
| 
 | |
|                 if path != self.filename:
 | |
|                     continue
 | |
| 
 | |
|                 lineNumber = int(match.group('line'))
 | |
|                 warning = match.group('warning')
 | |
|                 error = match.group('error')
 | |
| 
 | |
|                 if warning:
 | |
|                     messages = warningMessages
 | |
|                     underlines = warningUnderlines
 | |
|                 else:
 | |
|                     messages = errorMessages
 | |
|                     underlines = errorUnderlines
 | |
| 
 | |
|                 # Skip forward until we find the marker
 | |
|                 position = -1
 | |
| 
 | |
|                 while True:
 | |
|                     line = it.next()
 | |
|                     match = re.match(MARK_RE, line)
 | |
| 
 | |
|                     if match:
 | |
|                         position = len(match.group('mark'))
 | |
|                         break
 | |
| 
 | |
|                 self.add_message(lineNumber, lines, error, messages)
 | |
|                 self.underline_range(view, lineNumber, position, underlines)
 |