summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/gitlab/diff/file.rb2
-rw-r--r--lib/gitlab/diff/highlight.rb16
-rw-r--r--lib/rouge/lexers/gitlab_diff.rb2
-rw-r--r--spec/lib/gitlab/diff/highlight_spec.rb2
4 files changed, 12 insertions, 10 deletions
diff --git a/lib/gitlab/diff/file.rb b/lib/gitlab/diff/file.rb
index ff8765b8e26..69b38a32eeb 100644
--- a/lib/gitlab/diff/file.rb
+++ b/lib/gitlab/diff/file.rb
@@ -16,7 +16,7 @@ module Gitlab
end
def highlighted_diff_lines
- Gitlab::Diff::Highlight.process_diff_lines(self)
+ Gitlab::Diff::Highlight.process_diff_lines(new_path, diff_lines)
end
def mode_changed?
diff --git a/lib/gitlab/diff/highlight.rb b/lib/gitlab/diff/highlight.rb
index d0c2e3670c6..40a54ede2bb 100644
--- a/lib/gitlab/diff/highlight.rb
+++ b/lib/gitlab/diff/highlight.rb
@@ -1,15 +1,15 @@
module Gitlab
module Diff
class Highlight
- def self.process_diff_lines(diff_file)
- processor = new(diff_file)
+ def self.process_diff_lines(file_name, diff_lines)
+ processor = new(file_name, diff_lines)
processor.highlight
end
- def initialize(diff_file)
- text_lines = diff_file.diff_lines.map(&:text)
- @diff_file = diff_file
- @diff_lines = diff_file.diff_lines
+ def initialize(file_name, diff_lines)
+ text_lines = diff_lines.map(&:text)
+ @file_name = file_name
+ @diff_lines = diff_lines
@diff_line_prefixes = text_lines.map { |line| line.sub!(/\A((\+|\-)\s*)/, '');$1 }
@raw_lines = text_lines.join("\n")
end
@@ -32,7 +32,7 @@ module Gitlab
end
def lexer
- parent = Rouge::Lexer.guess(filename: @diff_file.new_path, source: @code).new rescue Rouge::Lexers::PlainText.new
+ parent = Rouge::Lexer.guess(filename: @file_name, source: @code).new rescue Rouge::Lexers::PlainText.new
Rouge::Lexers::GitlabDiff.new(parent_lexer: parent)
end
@@ -43,7 +43,7 @@ module Gitlab
end
def formatter
- @formatter ||= Rouge::Formatters::HTMLGitlab.new(
+ Rouge::Formatters::HTMLGitlab.new(
nowrap: true,
cssclass: 'code highlight',
lineanchors: true,
diff --git a/lib/rouge/lexers/gitlab_diff.rb b/lib/rouge/lexers/gitlab_diff.rb
index d91dd6c4245..cbf272ee1de 100644
--- a/lib/rouge/lexers/gitlab_diff.rb
+++ b/lib/rouge/lexers/gitlab_diff.rb
@@ -2,6 +2,8 @@ Rouge::Token::Tokens.token(:InlineDiff, 'idiff')
module Rouge
module Lexers
+ # This new Lexer is required in order to avoid the inline diff markup
+ # to be tokenized, it will be rendered as raw HTML code if that happens.
class GitlabDiff < RegexLexer
title "GitLab Diff"
tag 'gitlab_diff'
diff --git a/spec/lib/gitlab/diff/highlight_spec.rb b/spec/lib/gitlab/diff/highlight_spec.rb
index 2a827a08dba..80083c15cff 100644
--- a/spec/lib/gitlab/diff/highlight_spec.rb
+++ b/spec/lib/gitlab/diff/highlight_spec.rb
@@ -9,7 +9,7 @@ describe Gitlab::Diff::Highlight, lib: true do
let(:diff_file) { Gitlab::Diff::File.new(diff) }
describe '.process_diff_lines' do
- let(:diff_lines) { Gitlab::Diff::Highlight.process_diff_lines(diff_file) }
+ let(:diff_lines) { Gitlab::Diff::Highlight.process_diff_lines(diff_file.new_path, diff_file.diff_lines) }
it 'should return Gitlab::Diff::Line elements' do
expect(diff_lines.first).to be_an_instance_of(Gitlab::Diff::Line)