From 67dfb2f772dd2e3b9570c84342ef52bf386286c6 Mon Sep 17 00:00:00 2001 From: Marcin Kuzminski Date: Wed, 25 Jan 2017 16:09:47 +0100 Subject: [PATCH] vcs: refactor get_lexer for nodes so it can be used in external code. --- rhodecode/lib/vcs/nodes.py | 22 ++++++++++++++-------- 1 file changed, 14 insertions(+), 8 deletions(-) diff --git a/rhodecode/lib/vcs/nodes.py b/rhodecode/lib/vcs/nodes.py index 72459256..0fb4bce9 100644 --- a/rhodecode/lib/vcs/nodes.py +++ b/rhodecode/lib/vcs/nodes.py @@ -446,25 +446,23 @@ class FileNode(Node): def mimetype_main(self): return self.mimetype.split('/')[0] - @LazyProperty - def lexer(self): - """ - Returns pygment's lexer class. Would try to guess lexer taking file's - content, name and mimetype. - """ + @classmethod + def get_lexer(cls, filename, content=None): from pygments import lexers + extension = filename.split('.')[-1] lexer = None + try: lexer = lexers.guess_lexer_for_filename( - self.name, self.content, stripnl=False) + filename, content, stripnl=False) except lexers.ClassNotFound: lexer = None # try our EXTENSION_MAP if not lexer: try: - lexer_class = LANGUAGES_EXTENSIONS_MAP.get(self.extension) + lexer_class = LANGUAGES_EXTENSIONS_MAP.get(extension) if lexer_class: lexer = lexers.get_lexer_by_name(lexer_class[0]) except lexers.ClassNotFound: @@ -475,6 +473,14 @@ class FileNode(Node): return lexer + @LazyProperty + def lexer(self): + """ + Returns pygment's lexer class. Would try to guess lexer taking file's + content, name and mimetype. + """ + return self.get_lexer(self.name, self.content) + @LazyProperty def lexer_alias(self): """