Fix parts browser for files with no lexer

This commit is contained in:
Andrew Hamilton 2022-06-12 17:27:29 +10:00
parent 5b2021c132
commit d3e78d91bc

View file

@ -242,12 +242,15 @@ class Line(enum.Enum):
endpoint = enum.auto() endpoint = enum.auto()
@functools.lru_cache(1) @functools.lru_cache(100)
def parts_lines(source, lexer): def parts_lines(source, lexer):
cursor = 0 cursor = 0
line_num = 0 line_num = 0
line_lengths = [len(line) for line in source.splitlines(keepends=True)] line_lengths = [len(line) for line in source.splitlines(keepends=True)]
result = [(Line.endpoint, "top", 0)] result = [(Line.endpoint, "top", 0)]
if lexer is None:
line_num = len(source.splitlines())
else:
for position, token_type, text in lexer.get_tokens_unprocessed(source): for position, token_type, text in lexer.get_tokens_unprocessed(source):
while position >= cursor: while position >= cursor:
cursor += line_lengths[line_num] cursor += line_lengths[line_num]
@ -260,8 +263,7 @@ def parts_lines(source, lexer):
return result return result
COLOR_MAP = {Line.class_: termstr.Color.red, COLOR_MAP = {Line.class_: termstr.Color.red, Line.function: termstr.Color.green,
Line.function: termstr.Color.green,
Line.endpoint: termstr.Color.white} Line.endpoint: termstr.Color.white}
@ -730,7 +732,8 @@ class Editor:
fill3.SHUTDOWN_EVENT.set() fill3.SHUTDOWN_EVENT.set()
def show_parts_list(self): def show_parts_list(self):
self.parts_widget = Parts(self, self.get_text(), self.text_widget.lexer) lexer = getattr(self.text_widget, "lexer", None)
self.parts_widget = Parts(self, self.get_text(), lexer)
self.is_editing = False self.is_editing = False
self.mark = None self.mark = None