def run(self, edit, forceServer = None):
global problems
global displayMode
global ignored
global hscope
v = self.view
settings = sublime.load_settings(lt_settings_file)
server = getServer(settings, forceServer)
displayMode = settings.get('display_mode', 'statusbar')
hscope = settings.get("highlight-scope", "comment")
ignored = loadIgnoredRules()
strText = v.substr(sublime.Region(0, v.size()))
checkRegion = v.sel()[0]
if checkRegion.empty():
checkRegion = sublime.Region(0, v.size())
v.run_command("clear_language_problems")
lang = getLanguage(v)
ignoredIDs = [rule['id'] for rule in ignored]
matches = LTServer.getResponse(server, strText, lang, ignoredIDs)
if matches == None:
setStatusBar('could not parse server response (may be due to quota if using http://languagetool.org)')
return
for match in matches:
problem = {
'category': match['rule']['category']['name'],
'message': match['message'],
'replacements': [r['value'] for r in match['replacements']],
'rule' : match['rule']['id'],
'urls' : [w['value'] for w in match['rule'].get('urls', [])],
}
offset = match['offset']
length = match['length']
region = sublime.Region(offset, offset + length)
if not checkRegion.contains(region):
continue
ignored_scopes = settings.get('ignored-scopes', [])
# view.scope_name() returns a string of space-separated scope names
# (ending with a space)
pscopes = v.scope_name(region.a).split(' ')[0:-1]
for ps in pscopes:
if any([fnmatch.fnmatch(ps, i) for i in ignored_scopes]):
ignored = True
break
else:
# none of this region's scopes are ignored
regionKey = str(len(problems))
v.add_regions(regionKey, [region], hscope, "", sublime.DRAW_OUTLINED)
problem['orgContent'] = v.substr(region)
problem['regionKey'] = regionKey
problems.append(problem)
if problems:
selectProblem(v, problems[0])
else:
setStatusBar("no language problems were found :-)")
评论列表
文章目录