standard 1.25.5 → 1.27.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 9dd3dd8a74fc215df752f020ed7b5e29f831592bc15cccc3b6c8d8a256bfbee1
4
- data.tar.gz: c914ab5a31d00ca0dd0ff6f483f2364b1a885d97988c3df38d169ef3c1edf5f8
3
+ metadata.gz: 9da8591aa948bc0d345964c18383dc5213cbca194eca797075c1dbedf2e72e43
4
+ data.tar.gz: a6baa46440bb2658ef887f1ad678fd2a227d510f06790eb58e96679cca64a0e9
5
5
  SHA512:
6
- metadata.gz: 60960dec029698d932669cc588558bce61cf0f58fec3eea09659d04a0c4d3b5708d7b6e055b652eb0cd46ea5c5c253685107df110212a48fc48ae13d78cc030e
7
- data.tar.gz: d2d277d165b146c517837384d9519f044c3661f0499198189404ca9e9630065e774e7a3760f57f7f25e0648836558104c64e286f35163bc8e0d2460da3c20c9e
6
+ metadata.gz: ed7269d761c076913f7581e231a1baa132eb47a32a8bc6c4f3998075cf66c0bb0706cab4d8c2cd5d6ec7000cb03964f4000ff46ea45ba9e07fce094489c57a95
7
+ data.tar.gz: 520f2681b77c15012227bf222462acae00c6b36b15fd16371694c8ef831e25a356bf548d8be34a45b271abc4f805c2b3975483d52ef3c06c85db849509388bf5
data/CHANGELOG.md CHANGED
@@ -1,5 +1,16 @@
1
1
  # Changelog
2
2
 
3
+ ## 1.27.0
4
+
5
+ * Update rubocop from 1.48.1 to [1.50.2](https://github.com/rubocop/rubocop/releases/tag/v1.50.2)
6
+ * Enabled [Style/RedundantLineContinuation](https://docs.rubocop.org/rubocop/cops_style.html#styleredundantlinecontinuation)
7
+
8
+ ## 1.26.0
9
+
10
+ * Introduce `--fix-unsafely` and `rake standard:fix_unsafely` for running
11
+ unsafe corrections. Improve output about fix suggestions, as well
12
+ [#545](https://github.com/testdouble/standard/pull/545)
13
+
3
14
  ## 1.25.5
4
15
 
5
16
  * Temporarily disable registration of `executeCommand` to prevent conflict with
data/Gemfile.lock CHANGED
@@ -1,9 +1,9 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- standard (1.25.5)
4
+ standard (1.27.0)
5
5
  language_server-protocol (~> 3.17.0.2)
6
- rubocop (~> 1.48.1)
6
+ rubocop (~> 1.50.2)
7
7
  rubocop-performance (~> 1.16.0)
8
8
 
9
9
  GEM
@@ -20,7 +20,7 @@ GEM
20
20
  rake (>= 0.9.2.2)
21
21
  method_source (1.0.0)
22
22
  minitest (5.18.0)
23
- parallel (1.22.1)
23
+ parallel (1.23.0)
24
24
  parser (3.2.2.0)
25
25
  ast (~> 2.4.1)
26
26
  pry (0.14.2)
@@ -28,16 +28,16 @@ GEM
28
28
  method_source (~> 1.0)
29
29
  rainbow (3.1.1)
30
30
  rake (13.0.6)
31
- regexp_parser (2.7.0)
31
+ regexp_parser (2.8.0)
32
32
  rexml (3.2.5)
33
- rubocop (1.48.1)
33
+ rubocop (1.50.2)
34
34
  json (~> 2.3)
35
35
  parallel (~> 1.10)
36
36
  parser (>= 3.2.0.0)
37
37
  rainbow (>= 2.2.2, < 4.0)
38
38
  regexp_parser (>= 1.8, < 3.0)
39
39
  rexml (>= 3.2.5, < 4.0)
40
- rubocop-ast (>= 1.26.0, < 2.0)
40
+ rubocop-ast (>= 1.28.0, < 2.0)
41
41
  ruby-progressbar (~> 1.7)
42
42
  unicode-display_width (>= 2.4.0, < 3.0)
43
43
  rubocop-ast (1.28.0)
data/README.md CHANGED
@@ -76,8 +76,8 @@ files in the current working directory:
76
76
  ```bash
77
77
  $ bundle exec standardrb
78
78
  standard: Use Ruby Standard Style (https://github.com/testdouble/standard)
79
- standard: Run `standardrb --fix` to automatically fix some problems.
80
- /Users/code/cli.rb:31:23: Style/Semicolon: Do not use semicolons to terminate expressions.
79
+ standard: Run `standardrb --fix` to potentially fix one problem.
80
+ /Users/jill/code/cli.rb:31:23: Style/Semicolon: Do not use semicolons to terminate expressions.
81
81
  ```
82
82
 
83
83
  You can optionally pass in a directory (or directories) using a glob pattern.
@@ -121,6 +121,7 @@ Here are the tasks bundled with Standard:
121
121
  ```
122
122
  $ rake standard # equivalent to running `standardrb`
123
123
  $ rake standard:fix # equivalent to running `standardrb --fix`
124
+ $ rake standard:fix_unsafely # equivalent to running `standardrb --fix-unsafely`
124
125
  ```
125
126
 
126
127
  You may also pass command line options to Standard's Rake tasks by embedding
@@ -146,7 +147,7 @@ Here's an example yaml file with every option set:
146
147
  fix: true # default: false
147
148
  parallel: true # default: false
148
149
  format: progress # default: Standard::Formatter
149
- ruby_version: 2.3.3 # default: RUBY_VERSION
150
+ ruby_version: 2.3 # default: RUBY_VERSION
150
151
  default_ignores: false # default: true
151
152
 
152
153
  ignore: # default: []
@@ -223,8 +224,10 @@ Here are a few examples of Ruby Standard-compliant teams & projects:
223
224
  * [Level UP Solutions](https://levups.com)
224
225
  * [Monterail](https://www.monterail.com)
225
226
  * [myRent](https://www.myrent.co.nz)
227
+ * [OBLSK](https://oblsk.com/)
226
228
  * [Oyster](https://www.oysterhr.com/)
227
229
  * [Planet Argon](https://www.planetargon.com/)
230
+ * [PLT4M](https://plt4m.com/)
228
231
  * [Podia](https://www.podia.com/)
229
232
  * [Rebase Interactive](https://www.rebaseinteractive.com/)
230
233
  * [Renuo](https://www.renuo.ch/)
@@ -268,6 +271,11 @@ Yes! You can use `standardrb --fix` to fix most issues automatically.
268
271
  `standardrb --fix` is built into `standardrb` for maximum convenience. Most
269
272
  problems are fixable, but some errors must be fixed manually.
270
273
 
274
+ If you're feeling sinister, you can also use `standardrb --fix-unsafely`, which
275
+ will also perform fixes, even if they run the risk of altering program behavior.
276
+ If you read your git diffs closely and have good tests, this is often okay, but
277
+ YMMV… it's called unsafe for a reason!
278
+
271
279
  ## Can I override the `fix: true` config setting?
272
280
 
273
281
  Also yes! You can use `standardrb --no-fix`. Not `fix`ing is the default
@@ -369,7 +377,7 @@ of Ruby (by inspecting `RUBY_VERSION` at runtime. But if you want to lock it
369
377
  down, you can specify `ruby_version` in `.standard.yml`.
370
378
 
371
379
  ```
372
- ruby_version: 1.8.7
380
+ ruby_version: 1.8
373
381
  ```
374
382
 
375
383
  See
data/config/base.yml CHANGED
@@ -2,8 +2,8 @@ require:
2
2
  - rubocop-performance
3
3
 
4
4
  AllCops:
5
- # Prevent RuboCop from exploding when it finds an older-than-2.4 .ruby-version
6
- TargetRubyVersion: 2.5
5
+ # Prevent RuboCop from exploding when it finds an older-than-2.6 .ruby-version
6
+ TargetRubyVersion: 2.6
7
7
  Exclude: []
8
8
 
9
9
  Bundler/DuplicatedGem:
@@ -78,7 +78,6 @@ Layout/AssignmentIndentation:
78
78
  Layout/BeginEndAlignment:
79
79
  Enabled: true
80
80
  EnforcedStyleAlignWith: start_of_line
81
- AutoCorrect: true
82
81
  Severity: warning
83
82
 
84
83
  Layout/BlockAlignment:
@@ -110,7 +109,6 @@ Layout/ConditionPosition:
110
109
  Layout/DefEndAlignment:
111
110
  Enabled: true
112
111
  EnforcedStyleAlignWith: start_of_line
113
- AutoCorrect: true
114
112
  Severity: warning
115
113
 
116
114
  Layout/DotPosition:
@@ -174,7 +172,6 @@ Layout/EmptyLinesAroundModuleBody:
174
172
 
175
173
  Layout/EndAlignment:
176
174
  Enabled: true
177
- AutoCorrect: true
178
175
  EnforcedStyleAlignWith: variable
179
176
  Severity: warning
180
177
 
@@ -447,6 +444,8 @@ Lint/AmbiguousRegexpLiteral:
447
444
  Lint/AssignmentInCondition:
448
445
  Enabled: true
449
446
  AllowSafeAssignment: true
447
+ # Intentionally disable autocorrect to force us to intentionally decide
448
+ # whether assignment is intended as opposed to comparison
450
449
  AutoCorrect: false
451
450
 
452
451
  Lint/BigDecimalNew:
@@ -500,6 +499,9 @@ Lint/DuplicateHashKey:
500
499
  Lint/DuplicateMagicComment:
501
500
  Enabled: true
502
501
 
502
+ Lint/DuplicateMatchPattern:
503
+ Enabled: false
504
+
503
505
  Lint/DuplicateMethods:
504
506
  Enabled: true
505
507
 
@@ -529,7 +531,6 @@ Lint/EmptyConditionalBody:
529
531
 
530
532
  Lint/EmptyEnsure:
531
533
  Enabled: true
532
- AutoCorrect: true
533
534
 
534
535
  Lint/EmptyExpression:
535
536
  Enabled: true
@@ -695,7 +696,6 @@ Lint/RedundantWithObject:
695
696
 
696
697
  Lint/RefinementImportMethods:
697
698
  Enabled: true
698
- SafeAutoCorrect: false
699
699
 
700
700
  Lint/RegexpAsCondition:
701
701
  Enabled: true
@@ -1003,7 +1003,6 @@ Performance/FlatMap:
1003
1003
 
1004
1004
  Performance/InefficientHashSearch:
1005
1005
  Enabled: true
1006
- Safe: false
1007
1006
 
1008
1007
  Performance/IoReadlines:
1009
1008
  Enabled: false
@@ -1019,7 +1018,6 @@ Performance/OpenStruct:
1019
1018
 
1020
1019
  Performance/RangeInclude:
1021
1020
  Enabled: true
1022
- Safe: false
1023
1021
 
1024
1022
  Performance/RedundantBlockCall:
1025
1023
  Enabled: false
@@ -1096,23 +1094,18 @@ Security/Eval:
1096
1094
 
1097
1095
  Security/IoMethods:
1098
1096
  Enabled: false
1099
- Safe: false
1100
1097
 
1101
1098
  Security/JSONLoad:
1102
1099
  Enabled: true
1103
- AutoCorrect: false
1104
- SafeAutoCorrect: false
1105
1100
 
1106
1101
  Security/MarshalLoad:
1107
1102
  Enabled: false
1108
1103
 
1109
1104
  Security/Open:
1110
1105
  Enabled: true
1111
- Safe: false
1112
1106
 
1113
1107
  Security/YAMLLoad:
1114
1108
  Enabled: true
1115
- SafeAutoCorrect: false
1116
1109
 
1117
1110
  Standard/BlockSingleLineBraces:
1118
1111
  Enabled: true
@@ -1240,6 +1233,9 @@ Style/ConstantVisibility:
1240
1233
  Style/Copyright:
1241
1234
  Enabled: false
1242
1235
 
1236
+ Style/DataInheritance:
1237
+ Enabled: false
1238
+
1243
1239
  Style/DateTime:
1244
1240
  Enabled: false
1245
1241
 
@@ -1305,7 +1301,6 @@ Style/Encoding:
1305
1301
 
1306
1302
  Style/EndBlock:
1307
1303
  Enabled: true
1308
- AutoCorrect: true
1309
1304
 
1310
1305
  Style/EndlessMethod:
1311
1306
  Enabled: false
@@ -1443,7 +1438,6 @@ Style/LambdaCall:
1443
1438
 
1444
1439
  Style/LineEndConcatenation:
1445
1440
  Enabled: true
1446
- SafeAutoCorrect: false
1447
1441
 
1448
1442
  Style/MagicCommentFormat:
1449
1443
  Enabled: false
@@ -1710,6 +1704,9 @@ Style/RedundantInitialize:
1710
1704
  Style/RedundantInterpolation:
1711
1705
  Enabled: true
1712
1706
 
1707
+ Style/RedundantLineContinuation:
1708
+ Enabled: true
1709
+
1713
1710
  Style/RedundantParentheses:
1714
1711
  Enabled: true
1715
1712
 
data/config/ruby-2.6.yml CHANGED
@@ -8,3 +8,6 @@ Style/NumberedParameters:
8
8
 
9
9
  Style/NumberedParametersLimit:
10
10
  Enabled: false
11
+
12
+ Lint/DuplicateMatchPattern:
13
+ Enabled: false
data/config/ruby-3.0.yml CHANGED
@@ -1,4 +1,4 @@
1
- inherit_from: ./base.yml
1
+ inherit_from: ./ruby-3.1.yml
2
2
 
3
3
  AllCops:
4
4
  TargetRubyVersion: 3.0
@@ -0,0 +1,7 @@
1
+ inherit_from: ./base.yml
2
+
3
+ AllCops:
4
+ TargetRubyVersion: 3.1
5
+
6
+ Style/DataInheritance:
7
+ Enabled: false
@@ -7,15 +7,15 @@ module Standard
7
7
 
8
8
  class BuildsConfig
9
9
  def initialize
10
- @parses_cli_option = ParsesCliOption.new
10
+ @resolves_yaml_option = ResolvesYamlOption.new
11
11
  @loads_yaml_config = LoadsYamlConfig.new
12
12
  @merges_settings = MergesSettings.new
13
13
  @creates_config_store = CreatesConfigStore.new
14
14
  end
15
15
 
16
16
  def call(argv, search_path = Dir.pwd)
17
- standard_yaml_path = determine_yaml_file(argv, search_path, "--config", ".standard.yml")
18
- todo_yaml_path = determine_yaml_file(argv, search_path, "--todo", ".standard_todo.yml")
17
+ standard_yaml_path = @resolves_yaml_option.call(argv, search_path, "--config", ".standard.yml")
18
+ todo_yaml_path = @resolves_yaml_option.call(argv, search_path, "--todo", ".standard_todo.yml")
19
19
  standard_config = @loads_yaml_config.call(standard_yaml_path, todo_yaml_path)
20
20
 
21
21
  settings = @merges_settings.call(argv, standard_config)
@@ -26,11 +26,5 @@ module Standard
26
26
  @creates_config_store.call(standard_config)
27
27
  )
28
28
  end
29
-
30
- private
31
-
32
- def determine_yaml_file(argv, search_path, option_name, default_file)
33
- @parses_cli_option.call(argv, option_name) || FileFinder.new.call(default_file, search_path)
34
- end
35
29
  end
36
30
  end
@@ -1,47 +1,41 @@
1
1
  require "yaml"
2
2
  require "rubocop"
3
- require_relative "detects_fixability"
4
3
 
5
4
  module Standard
6
5
  class Formatter < RuboCop::Formatter::BaseFormatter
7
- STANDARD_GREETING = <<-MSG.gsub(/^ {6}/, "")
6
+ STANDARD_GREETING = <<~MSG
8
7
  standard: Use Ruby Standard Style (https://github.com/testdouble/standard)
9
8
  MSG
10
9
 
11
- def self.fixable_error_message(command)
12
- <<-MSG.gsub(/^ {8}/, "")
13
- standard: Run `#{command}` to automatically fix some problems.
14
- MSG
15
- end
16
-
17
- def initialize(*args)
18
- super
19
- @detects_fixability = DetectsFixability.new
20
- @header_printed_already = false
21
- @fix_suggestion_printed_already = false
22
- @offenses_encountered = false
23
- end
24
-
25
10
  def started(_target_files)
11
+ @header_printed_already = false
12
+ @total_correction_count = 0
13
+ @total_correctable_count = 0
14
+ @total_uncorrected_count = 0
26
15
  print_todo_warning
27
16
  end
28
17
 
29
18
  def file_finished(file, offenses)
30
- uncorrected_offenses = offenses.reject(&:corrected?)
31
-
32
- return unless uncorrected_offenses.any?
33
-
34
- @offenses_encountered = true
19
+ track_stats(offenses)
35
20
 
36
- print_header_once
37
- print_fix_suggestion_once(uncorrected_offenses)
21
+ if (uncorrected_offenses = offenses.reject(&:corrected?)).any?
22
+ print_header_once
38
23
 
39
- uncorrected_offenses.each do |o|
40
- output.printf(" %s:%d:%d: %s\n", path_to(file), o.line, o.real_column, o.message.tr("\n", " "))
24
+ uncorrected_offenses.each do |o|
25
+ output.printf(" %s:%d:%d: %s\n", path_to(file), o.line, o.real_column, o.message.tr("\n", " "))
26
+ end
41
27
  end
42
28
  end
43
29
 
30
+ def track_stats(offenses)
31
+ corrected = offenses.count(&:corrected?)
32
+ @total_correction_count += corrected
33
+ @total_correctable_count += offenses.count(&:correctable?) - corrected
34
+ @total_uncorrected_count += offenses.count - corrected
35
+ end
36
+
44
37
  def finished(_inspected_files)
38
+ print_fix_suggestion
45
39
  print_todo_congratulations
46
40
  end
47
41
 
@@ -55,16 +49,17 @@ module Standard
55
49
  @header_printed_already = true
56
50
  end
57
51
 
58
- def print_fix_suggestion_once(offenses)
59
- if !@fix_suggestion_printed_already && should_suggest_fix?(offenses)
60
- command = if File.split($PROGRAM_NAME).last == "rake"
61
- "rake standard:fix"
52
+ def print_fix_suggestion
53
+ if (fix_mode = potential_fix_mode)
54
+ run_mode = determine_run_mode
55
+
56
+ command = if run_mode == :rake
57
+ "rake standard:#{fix_mode}"
62
58
  else
63
- "standardrb --fix"
59
+ "standardrb --#{fix_mode.to_s.tr("_", "-")}"
64
60
  end
65
61
 
66
- output.print self.class.fixable_error_message(command)
67
- @fix_suggestion_printed_already = true
62
+ output.print fixable_error_message(command)
68
63
  end
69
64
  end
70
65
 
@@ -75,7 +70,7 @@ module Standard
75
70
  todo_ignore_files = options[:todo_ignore_files]
76
71
  return unless todo_ignore_files&.any?
77
72
 
78
- output.print <<-HEADER.gsub(/^ {8}/, "")
73
+ output.print <<~HEADER
79
74
  WARNING: this project is being migrated to standard gradually via `#{todo_file}` and is ignoring these files:
80
75
  HEADER
81
76
 
@@ -85,29 +80,55 @@ module Standard
85
80
  end
86
81
 
87
82
  def print_todo_congratulations
88
- return if @offenses_encountered
89
-
90
- todo_file = options[:todo_file]
91
- return unless todo_file
92
-
93
- todo_ignore_files = options[:todo_ignore_files]
94
- return if todo_ignore_files&.any?
95
-
96
- output.print <<-HEADER.gsub(/^ {8}/, "")
97
- Congratulations, you've successfully migrated this project to Standard! Delete `#{todo_file}` in celebration.
98
- HEADER
83
+ if @total_uncorrected_count == 0 &&
84
+ options[:todo_file] &&
85
+ options[:todo_ignore_files]&.none?
86
+ output.print <<~HEADER
87
+ Congratulations, you've successfully migrated this project to Standard! Delete `#{options[:todo_file]}` in celebration.
88
+ HEADER
89
+ end
99
90
  end
100
91
 
101
92
  def path_to(file)
102
93
  Pathname.new(file).relative_path_from(Pathname.new(Dir.pwd))
103
94
  end
104
95
 
105
- def auto_correct_option_provided?
106
- options[:autocorrect]
96
+ def potential_fix_mode
97
+ return nil unless @total_correctable_count > 0
98
+
99
+ if !options[:autocorrect]
100
+ :fix
101
+ elsif options[:autocorrect] && options[:safe_autocorrect]
102
+ :fix_unsafely
103
+ end
104
+ end
105
+
106
+ def determine_run_mode
107
+ if File.split($PROGRAM_NAME).last == "rake"
108
+ :rake
109
+ else
110
+ :cli
111
+ end
107
112
  end
108
113
 
109
- def should_suggest_fix?(offenses)
110
- !auto_correct_option_provided? && @detects_fixability.call(offenses)
114
+ def fixable_error_message(command)
115
+ sales_pitch = if !options[:autocorrect]
116
+ if @total_correctable_count > 1
117
+ "fix up to #{@total_correctable_count} problems"
118
+ else
119
+ "potentially fix one problem"
120
+ end
121
+ elsif options[:autocorrect] && options[:safe_autocorrect]
122
+ if @total_correctable_count > 1
123
+ "DANGEROUSLY fix #{@total_correctable_count} problems"
124
+ else
125
+ "DANGEROUSLY fix one problem"
126
+ end
127
+ end
128
+
129
+ <<~MSG
130
+ standard: Run `#{command}` to #{sales_pitch}.
131
+ MSG
111
132
  end
112
133
  end
113
134
  end
@@ -1,7 +1,7 @@
1
1
  require "yaml"
2
2
  require "pathname"
3
3
  require_relative "file_finder"
4
- require_relative "parses_cli_option"
4
+ require_relative "resolves_yaml_option"
5
5
 
6
6
  module Standard
7
7
  class LoadsYamlConfig
@@ -49,9 +49,9 @@ module Standard
49
49
  }
50
50
  def fork_config(path, text, format:)
51
51
  options = if format
52
- {stdin: text, autocorrect: true, formatters: [], safe_autocorrect: true}
52
+ {stdin: text, autocorrect: true, safe_autocorrect: true, formatters: []}
53
53
  else
54
- {stdin: text, autocorrect: false, formatters: [["json"]], format: "json"}
54
+ {stdin: text, autocorrect: false, safe_autocorrect: false, formatters: [["json"]], format: "json"}
55
55
  end
56
56
  Standard::Config.new(@config.runner, [path], BASE_OPTIONS.merge(options), @config.rubocop_config_store)
57
57
  end
@@ -20,7 +20,7 @@ module Standard
20
20
 
21
21
  def separate_argv(argv)
22
22
  argv.partition do |flag|
23
- ["--generate-todo", "--fix", "--no-fix", "--version", "-v", "--verbose-version", "-V", "--help", "-h", "--lsp"].include?(flag)
23
+ ["--generate-todo", "--fix", "--fix-unsafely", "--no-fix", "--version", "-v", "--verbose-version", "-V", "--help", "-h", "--lsp"].include?(flag)
24
24
  end
25
25
  end
26
26
 
@@ -28,8 +28,13 @@ module Standard
28
28
  argv.each_with_object({}) do |arg, cli_flags|
29
29
  if arg == "--fix"
30
30
  cli_flags[:autocorrect] = true
31
+ cli_flags[:safe_autocorrect] = true
32
+ elsif arg == "--fix-unsafely"
33
+ cli_flags[:autocorrect] = true
34
+ cli_flags[:safe_autocorrect] = false
31
35
  elsif arg == "--no-fix"
32
36
  cli_flags[:autocorrect] = false
37
+ cli_flags[:safe_autocorrect] = false
33
38
  end
34
39
  end
35
40
  end
@@ -53,6 +58,7 @@ module Standard
53
58
  def merge(standard_yaml, standard_cli_flags, rubocop_cli_flags)
54
59
  {
55
60
  autocorrect: standard_yaml[:fix],
61
+ safe_autocorrect: true,
56
62
  formatters: [[standard_yaml[:format] || "Standard::Formatter", nil]],
57
63
  parallel: standard_yaml[:parallel],
58
64
  todo_file: standard_yaml[:todo_file],
data/lib/standard/rake.rb CHANGED
@@ -18,9 +18,16 @@ task :standard do
18
18
  fail unless exit_code == 0
19
19
  end
20
20
 
21
- desc "Lint and automatically fix with the Standard Ruby style guide"
21
+ desc "Lint and automatically make safe fixes with the Standard Ruby style guide"
22
22
  task :"standard:fix" do
23
23
  require "standard"
24
24
  exit_code = Standard::Cli.new(Standard::RakeSupport.argvify + ["--fix"]).run
25
25
  fail unless exit_code == 0
26
26
  end
27
+
28
+ desc "Lint and automatically make fixes (even unsafe ones!) with the Standard Ruby style guide"
29
+ task :"standard:fix_unsafely" do
30
+ require "standard"
31
+ exit_code = Standard::Cli.new(Standard::RakeSupport.argvify + ["--fix-unsafely"]).run
32
+ fail unless exit_code == 0
33
+ end
@@ -1,8 +1,14 @@
1
1
  require "pathname"
2
2
 
3
3
  module Standard
4
- class ParsesCliOption
5
- def call(argv, option_name)
4
+ class ResolvesYamlOption
5
+ def call(argv, search_path, option_name, default_file)
6
+ search_argv(argv, option_name) || FileFinder.new.call(default_file, search_path)
7
+ end
8
+
9
+ private
10
+
11
+ def search_argv(argv, option_name)
6
12
  return unless (config_file = argv_value_for(argv, option_name))
7
13
 
8
14
  resolved_config = Pathname.new(config_file)
@@ -9,7 +9,8 @@ module Standard
9
9
 
10
10
  Options:
11
11
 
12
- --fix Automatically fix failures where possible
12
+ --fix Apply automatic fixes that we're confident won't break your code
13
+ --fix-unsafely Apply even more fixes, including some that may change code behavior
13
14
  --no-fix Do not automatically fix failures
14
15
  --format <name> Format output with any RuboCop formatter (e.g. "json")
15
16
  --generate-todo Create a .standard_todo.yml that lists all the files that contain errors
@@ -4,7 +4,7 @@ module Standard
4
4
  module Runners
5
5
  class VerboseVersion
6
6
  def call(config)
7
- puts <<-MSG.gsub(/^ {10}/, "")
7
+ puts <<~MSG
8
8
  Standard version: #{Standard::VERSION}
9
9
  RuboCop version: #{RuboCop::Version.version(debug: true)}
10
10
  MSG
@@ -1,3 +1,3 @@
1
1
  module Standard
2
- VERSION = Gem::Version.new("1.25.5")
2
+ VERSION = Gem::Version.new("1.27.0")
3
3
  end
data/standard.gemspec CHANGED
@@ -11,6 +11,9 @@ Gem::Specification.new do |spec|
11
11
 
12
12
  spec.summary = "Ruby Style Guide, with linter & automatic code fixer"
13
13
  spec.homepage = "https://github.com/testdouble/standard"
14
+ spec.metadata["homepage_uri"] = spec.homepage
15
+ spec.metadata["source_code_uri"] = spec.homepage
16
+ spec.metadata["changelog_uri"] = "#{spec.homepage}/blob/main/CHANGELOG.md"
14
17
 
15
18
  spec.files = Dir.chdir(File.expand_path("..", __FILE__)) do
16
19
  `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
@@ -20,7 +23,7 @@ Gem::Specification.new do |spec|
20
23
  spec.require_paths = ["lib"]
21
24
  spec.metadata["rubygems_mfa_required"] = "true"
22
25
 
23
- spec.add_dependency "rubocop", "~> 1.48.1"
26
+ spec.add_dependency "rubocop", "~> 1.50.2"
24
27
  spec.add_dependency "rubocop-performance", "~> 1.16.0"
25
28
 
26
29
  # not semver: first three are lsp protocol version, last is patch
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: standard
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.25.5
4
+ version: 1.27.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Justin Searls
8
- autorequire:
8
+ autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2023-04-01 00:00:00.000000000 Z
11
+ date: 2023-04-19 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rubocop
@@ -16,14 +16,14 @@ dependencies:
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: 1.48.1
19
+ version: 1.50.2
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: 1.48.1
26
+ version: 1.50.2
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: rubocop-performance
29
29
  requirement: !ruby/object:Gem::Requirement
@@ -52,7 +52,7 @@ dependencies:
52
52
  - - "~>"
53
53
  - !ruby/object:Gem::Version
54
54
  version: 3.17.0.2
55
- description:
55
+ description:
56
56
  email:
57
57
  - searls@gmail.com
58
58
  executables:
@@ -85,6 +85,7 @@ files:
85
85
  - config/ruby-2.6.yml
86
86
  - config/ruby-2.7.yml
87
87
  - config/ruby-3.0.yml
88
+ - config/ruby-3.1.yml
88
89
  - docs/NEW_RUBIES.md
89
90
  - docs/RELEASE.md
90
91
  - exe/standardrb
@@ -97,7 +98,6 @@ files:
97
98
  - lib/standard/creates_config_store/configures_ignored_paths.rb
98
99
  - lib/standard/creates_config_store/merges_user_config_extensions.rb
99
100
  - lib/standard/creates_config_store/sets_target_ruby_version.rb
100
- - lib/standard/detects_fixability.rb
101
101
  - lib/standard/file_finder.rb
102
102
  - lib/standard/formatter.rb
103
103
  - lib/standard/loads_runner.rb
@@ -108,9 +108,9 @@ files:
108
108
  - lib/standard/lsp/server.rb
109
109
  - lib/standard/lsp/standardizer.rb
110
110
  - lib/standard/merges_settings.rb
111
- - lib/standard/parses_cli_option.rb
112
111
  - lib/standard/railtie.rb
113
112
  - lib/standard/rake.rb
113
+ - lib/standard/resolves_yaml_option.rb
114
114
  - lib/standard/rubocop/ext.rb
115
115
  - lib/standard/runners/genignore.rb
116
116
  - lib/standard/runners/help.rb
@@ -123,8 +123,11 @@ files:
123
123
  homepage: https://github.com/testdouble/standard
124
124
  licenses: []
125
125
  metadata:
126
+ homepage_uri: https://github.com/testdouble/standard
127
+ source_code_uri: https://github.com/testdouble/standard
128
+ changelog_uri: https://github.com/testdouble/standard/blob/main/CHANGELOG.md
126
129
  rubygems_mfa_required: 'true'
127
- post_install_message:
130
+ post_install_message:
128
131
  rdoc_options: []
129
132
  require_paths:
130
133
  - lib
@@ -139,8 +142,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
139
142
  - !ruby/object:Gem::Version
140
143
  version: '0'
141
144
  requirements: []
142
- rubygems_version: 3.4.10
143
- signing_key:
145
+ rubygems_version: 3.1.6
146
+ signing_key:
144
147
  specification_version: 4
145
148
  summary: Ruby Style Guide, with linter & automatic code fixer
146
149
  test_files: []
@@ -1,16 +0,0 @@
1
- module Standard
2
- class DetectsFixability
3
- def call(offenses)
4
- offenses.any? { |offense|
5
- cop = cop_instance(offense.cop_name)
6
- cop.correctable? && cop.safe_autocorrect?
7
- }
8
- end
9
-
10
- private
11
-
12
- def cop_instance(cop_name)
13
- RuboCop::Cop.const_get(cop_name.gsub("/", "::")).new
14
- end
15
- end
16
- end