diff --git a/rhodecode/lib/vcs/nodes.py b/rhodecode/lib/vcs/nodes.py --- 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: @@ -476,6 +474,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): """ Returns first alias of the lexer guessed for this file.