From 965654f3ca8c47ec685bf1b8b84c071db65bf514 Mon Sep 17 00:00:00 2001 From: Koichi ITO Date: Fri, 12 Nov 2021 15:46:34 +0900 Subject: [PATCH] [Fix #10241] Fix `last_column` value for `JSONFormatter` Fixes #10241. This PR fixes `last_column` value for `JSONFormatter`. The minimum value of `start_column: real_column` is 1. So, the minimum value of `last_column` should be 1. And non-zero value of `last_column` should be used as is. This patch to `last_column` seems to be required only for `JSONFormatter` and not required for other formatters. It solves a potential `JSONFormatter` issue for cops that use `add_global_offense`. --- changelog/fix_last_column_number_for_json_formatter.md | 1 + lib/rubocop/formatter/json_formatter.rb | 5 ++++- spec/rubocop/formatter/json_formatter_spec.rb | 2 +- 3 files changed, 6 insertions(+), 2 deletions(-) create mode 100644 changelog/fix_last_column_number_for_json_formatter.md diff --git a/changelog/fix_last_column_number_for_json_formatter.md b/changelog/fix_last_column_number_for_json_formatter.md new file mode 100644 index 00000000000..3065d74a835 --- /dev/null +++ b/changelog/fix_last_column_number_for_json_formatter.md @@ -0,0 +1 @@ +* [#10242](https://github.com/rubocop/rubocop/pull/10242): Fix `last_column` value for `JSONFormatter`. ([@koic][]) diff --git a/lib/rubocop/formatter/json_formatter.rb b/lib/rubocop/formatter/json_formatter.rb index 91fa29c8fb7..792e990deb8 100644 --- a/lib/rubocop/formatter/json_formatter.rb +++ b/lib/rubocop/formatter/json_formatter.rb @@ -59,12 +59,15 @@ def hash_for_offense(offense) end # TODO: Consider better solution for Offense#real_column. + # The minimum value of `start_column: real_column` is 1. + # So, the minimum value of `last_column` should be 1. + # And non-zero value of `last_column` should be used as is. def hash_for_location(offense) { start_line: offense.line, start_column: offense.real_column, last_line: offense.last_line, - last_column: offense.last_column, + last_column: offense.last_column.zero? ? 1 : offense.last_column, length: offense.location.length, # `line` and `column` exist for compatibility. # Use `start_line` and `start_column` instead. diff --git a/spec/rubocop/formatter/json_formatter_spec.rb b/spec/rubocop/formatter/json_formatter_spec.rb index 18b318bd82f..928ef8ba858 100644 --- a/spec/rubocop/formatter/json_formatter_spec.rb +++ b/spec/rubocop/formatter/json_formatter_spec.rb @@ -166,7 +166,7 @@ start_line: 1, start_column: 1, last_line: 1, - last_column: 0, + last_column: 1, length: 0, line: 1, column: 1