Files
2013-04-04 08:54:25 -04:00

86 lines
2.2 KiB
Python

# -*- coding: utf-8 -*-
'''notes.py
Used to highlight user-defined "annotations" such as TODO, README, etc.,
depending user choice.
'''
import sublime
from base_linter import BaseLinter
CONFIG = {
'language': 'Annotations'
}
class Linter(BaseLinter):
DEFAULT_NOTES = ["TODO", "README", "FIXME"]
def built_in_check(self, view, code, filename):
annotations = self.select_annotations(view)
regions = []
for annotation in annotations:
regions.extend(self.find_all(code, annotation, view))
return regions
def select_annotations(self, view):
'''selects the list of annotations to use'''
return view.settings().get("annotations", self.DEFAULT_NOTES)
def extract_annotations(self, code, view, filename):
'''extract all lines with annotations'''
annotations = self.select_annotations(view)
annotation_starts = []
for annotation in annotations:
start = 0
length = len(annotation)
while True:
start = code.find(annotation, start)
if start != -1:
end = start + length
annotation_starts.append(start)
start = end
else:
break
regions_with_notes = set([])
for point in annotation_starts:
regions_with_notes.add(view.extract_scope(point))
regions_with_notes = sorted(list(regions_with_notes))
text = []
for region in regions_with_notes:
row, col = view.rowcol(region.begin())
text.append("[{0}:{1}]".format(filename, row + 1))
text.append(view.substr(region))
return '\n'.join(text)
def find_all(self, text, string, view):
''' finds all occurences of "string" in "text" and notes their positions
as a sublime Region
'''
found = []
length = len(string)
start = 0
while True:
start = text.find(string, start)
if start != -1:
end = start + length
found.append(sublime.Region(start, end))
start = end
else:
break
return found