mirror of
https://github.com/sstent/sublime-text-3.git
synced 2026-02-06 04:21:58 +00:00
backing up sublime settings
This commit is contained in:
69
Packages/User/linters/eclim.py
Normal file
69
Packages/User/linters/eclim.py
Normal file
@@ -0,0 +1,69 @@
|
||||
import json
|
||||
import os
|
||||
import tempfile
|
||||
|
||||
from lint import Linter
|
||||
from lint.util import find
|
||||
|
||||
class Eclim(Linter):
|
||||
language = 'java'
|
||||
cmd = ('eclim', '-command', 'java_src_update')
|
||||
regex = r'.'
|
||||
|
||||
defaults = {
|
||||
'disable': True,
|
||||
}
|
||||
|
||||
def run(self, cmd, code):
|
||||
project = find(os.path.dirname(self.filename), '.project', True)
|
||||
if not project:
|
||||
return
|
||||
|
||||
filename = self.filename.replace(project, '', 1).lstrip(os.sep)
|
||||
project = os.path.basename(project)
|
||||
|
||||
# can't stdin or temp use file - hack time?
|
||||
# this *could* become a tmp directory
|
||||
# but I'd need to know all files to copy
|
||||
# from the source project
|
||||
tmp = tempfile.mktemp()
|
||||
os.rename(self.filename, tmp)
|
||||
# at least we get some inode protection on posix
|
||||
inode = None
|
||||
|
||||
with open(self.filename, 'wb') as f:
|
||||
f.write(code)
|
||||
if os.name == 'posix':
|
||||
inode = os.stat(self.filename).st_ino
|
||||
|
||||
try:
|
||||
cmd = cmd + ('-p', project, '-f', filename, '-v')
|
||||
output = self.communicate(cmd, '')
|
||||
finally:
|
||||
if inode is not None:
|
||||
new_inode = os.stat(self.filename).st_ino
|
||||
if new_inode != inode:
|
||||
# they saved over our tmp file, bail
|
||||
return output
|
||||
|
||||
os.unlink(self.filename)
|
||||
os.rename(tmp, self.filename)
|
||||
|
||||
return output
|
||||
|
||||
def find_errors(self, output):
|
||||
try:
|
||||
obj = json.loads(output)
|
||||
for item in obj:
|
||||
# TODO: highlight warnings in a different color?
|
||||
# warning = item['warning']
|
||||
line, col = item['line']-1, item['column']-1
|
||||
message = item['message']
|
||||
yield True, line, col, message, None
|
||||
except Exception:
|
||||
error = 'eclim error'
|
||||
if 'Connection refused' in output:
|
||||
error += ' Connection Refused'
|
||||
yield True, 0, None, error, None
|
||||
# maybe do this on line one?
|
||||
# yield {"eclim_exception": str(e)}
|
||||
Reference in New Issue
Block a user