Introduce MarkerRange class [RUN ALL RSPEC] [RUN AS-IF-FOSS]
What does this MR do?
Contributes to #16950 (closed)
MarkerRange behaves like a Range but can additionally keep information
about the type of the change.
It helps to identify if changed characters were removed or added.
Why?
-
Information about marker diff ranges does not belong to
Gitlab::Diff::Lineand calculated separately. Every time we need to mark a range, we have to compare all related diff lines, find changed characters and render the result. After this point range data is lost because we don't associate it with a diff line. I think it would be better if we keep it inGitlab::Diff::Line. -
Our current solution is based on the assumption that
Gitlab::Diff::Linecan only have either added or removed characters. But it won't work for the word-diff presentation when a single diff line can have both markers.
MarkerRanges will allow us to define complex marker definitions. See an example below.
Gitlab::Diff::Line.new(..., marker_ranges: [
MarkerRange.new(0, 10, mode: :addition),
MarkerRange.new(15, 17, mode: :addition),
MarkerRange.new(20, 30, mode: :deletion)
])
Screenshots (strongly suggested)
Word-diff view prototype
Does this MR meet the acceptance criteria?
Conformity
-
📋 Does this MR need a changelog? -
Documentation (if required) -
Code review guidelines -
Merge request performance guidelines -
Style guides -
Database guides -
Separation of EE specific content
Availability and Testing
-
Review and add/update tests for this feature/bug. Consider all test levels. See the Test Planning Process. -
Tested in all supported browsers -
Informed Infrastructure department of a default or new setting change, if applicable per definition of done
Security
If this MR contains changes to processing or storing of credentials or tokens, authorization and authentication methods and other items described in the security review guidelines:
-
Label as security and @ mention @gitlab-com/gl-security/appsec -
The MR includes necessary changes to maintain consistency between UI, API, email, or other methods -
Security reports checked/validated by a reviewer from the AppSec team
