diff --git a/lib/gitlab/highlight.rb b/lib/gitlab/highlight.rb
index 57b7fc139f87ca4e835da1d9e73a061785a96611..a9e429a29f4ae7a580e66d16cf1634c03637835e 100644
--- a/lib/gitlab/highlight.rb
+++ b/lib/gitlab/highlight.rb
@@ -17,26 +17,30 @@ module Gitlab
       @formatter = Rouge::Formatters::HTMLGitlab.new
       @repository = repository
       @blob_name = blob_name
-      @lexer = custom_language || begin
-        Rouge::Lexer.guess(filename: blob_name, source: blob_content).new
-      rescue Rouge::Lexer::AmbiguousGuess => e
-        e.alternatives.sort_by(&:tag).first
-      end
+      @blob_content = blob_content
     end
 
     def highlight(text, continue: true, plain: false)
-      lexer = @lexer
-
       if plain
-        lexer = Rouge::Lexers::PlainText
+        hl_lexer = Rouge::Lexers::PlainText
         continue = false
+      else
+        hl_lexer = self.lexer
       end
 
-      @formatter.format(lexer.lex(text, continue: continue)).html_safe
+      @formatter.format(hl_lexer.lex(text, continue: continue)).html_safe
     rescue
       @formatter.format(Rouge::Lexers::PlainText.lex(text)).html_safe
     end
 
+    def lexer
+      @lexer ||= custom_language || begin
+        Rouge::Lexer.guess(filename: blob_name, source: blob_content).new
+      rescue Rouge::Lexer::AmbiguousGuess => e
+        e.alternatives.sort_by(&:tag).first
+      end
+    end
+
     private
 
     def custom_language