standard 1.37.0 → 1.38.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: d2deb844275c075310374ee37f374dfb1ab31ded453dd65744a051c2b4c1139a
4
- data.tar.gz: 036bbabc58241f5edf1b18a0da1d47e36262b51c37a196298bc0ef4b5e5ba4e5
3
+ metadata.gz: f78e04ed9ba26c056a144f8584e28ade38906bf4f0e5078802654cd5d7b99082
4
+ data.tar.gz: 7d6b129ca13e5cbb8dc9ffed5891edcd81975780873501443f125906846d8a3c
5
5
  SHA512:
6
- metadata.gz: 2723bef6152debb628fd5f510f527296d30714c5e68bff12489b9af0ce6add2361c44911198dea8f764b5302ec24049f7da3671f15e033543f42427f951abe46
7
- data.tar.gz: 3804a98d3c95ae5a040380f2dff8b8aaf15431c95392a42563d1687c513e84d55e14337351d24222d301b89755443527b10b5ea2ed93ad2ee93f323c4188a36b
6
+ metadata.gz: 8de4b19e062290cbc42f4b9d3f73cc2b1412b9dc683b6499a0d443b32f598e1a7d48e0f46f1e4343f18a6032ba6a3fb74a3b90a00257e4f3777ecbc73d5fd758
7
+ data.tar.gz: 42bf30e5370ca89431b4c8546320fb3c840c1ce7c7256dae9f516ed88f71f8ad1a1b77ea644c417d3ecab3ce98481aecc29211965b6f1c18903d5eccaa9cfc78
@@ -16,7 +16,11 @@ jobs:
16
16
  strategy:
17
17
  matrix:
18
18
  os: [ubuntu-latest]
19
- ruby-version: [2.7, '3.0', 3.1, 3.2, 3.3]
19
+ ruby-version:
20
+ - '3.0'
21
+ - '3.1'
22
+ - '3.2'
23
+ - '3.3'
20
24
 
21
25
  runs-on: ${{ matrix.os }}
22
26
 
data/.standard.yml CHANGED
@@ -1,4 +1,4 @@
1
- ruby_version: 2.6
1
+ ruby_version: 3.0
2
2
  ignore:
3
3
  - tmp/**/*
4
4
  - test/fixture/**/*
data/CHANGELOG.md CHANGED
@@ -1,5 +1,18 @@
1
1
  # Changelog
2
2
 
3
+ ## Unreleased
4
+
5
+ ## 1.38.0
6
+
7
+ * Update minimum Ruby version to 3.0
8
+ * @koic backported a line column bug in our LSP
9
+ [#635](https://github.com/standardrb/standard/pull/635)
10
+ * Implement a basic [Ruby LSP
11
+ add-on](https://github.com/Shopify/ruby-lsp/blob/main/ADDONS.md), which means
12
+ users would no longer need to install [our custom VS Code
13
+ extension](https://marketplace.visualstudio.com/items?itemName=testdouble.vscode-standard-ruby)
14
+ [#630](https://github.com/standardrb/standard/pull/630)
15
+
3
16
  ## 1.37.0
4
17
 
5
18
  * Updates rubocop to [1.64.1](https://github.com/rubocop/rubocop/releases/tag/v1.64.1)
data/Gemfile CHANGED
@@ -6,6 +6,8 @@ gem "bundler"
6
6
  gem "minitest", "~> 5.0"
7
7
  gem "rake", "~> 13.0"
8
8
  gem "m"
9
+ gem "mutex_m"
10
+ gem "ruby-lsp"
9
11
 
10
12
  # You may want to run these off path locally:
11
13
  # gem "lint_roller", path: "../lint_roller"
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- standard (1.37.0)
4
+ standard (1.38.0)
5
5
  language_server-protocol (~> 3.17.0.2)
6
6
  lint_roller (~> 1.0)
7
7
  rubocop (~> 1.64.0)
@@ -21,10 +21,12 @@ GEM
21
21
  rake (>= 0.9.2.2)
22
22
  method_source (1.0.0)
23
23
  minitest (5.20.0)
24
+ mutex_m (0.2.0)
24
25
  parallel (1.23.0)
25
26
  parser (3.3.0.5)
26
27
  ast (~> 2.4.1)
27
28
  racc
29
+ prism (0.27.0)
28
30
  racc (1.7.1)
29
31
  rainbow (3.1.1)
30
32
  rake (13.0.6)
@@ -46,6 +48,10 @@ GEM
46
48
  rubocop-performance (1.21.0)
47
49
  rubocop (>= 1.48.1, < 2.0)
48
50
  rubocop-ast (>= 1.31.1, < 2.0)
51
+ ruby-lsp (0.16.6)
52
+ language_server-protocol (~> 3.17.0)
53
+ prism (>= 0.23.0, < 0.28)
54
+ sorbet-runtime (>= 0.5.10782)
49
55
  ruby-progressbar (1.13.0)
50
56
  simplecov (0.22.0)
51
57
  docile (~> 1.1)
@@ -53,6 +59,7 @@ GEM
53
59
  simplecov_json_formatter (~> 0.1)
54
60
  simplecov-html (0.12.3)
55
61
  simplecov_json_formatter (0.1.4)
62
+ sorbet-runtime (0.5.11385)
56
63
  standard-custom (1.0.2)
57
64
  lint_roller (~> 1.0)
58
65
  rubocop (~> 1.50)
@@ -69,7 +76,9 @@ DEPENDENCIES
69
76
  bundler
70
77
  m
71
78
  minitest (~> 5.0)
79
+ mutex_m
72
80
  rake (~> 13.0)
81
+ ruby-lsp
73
82
  simplecov
74
83
  standard!
75
84
 
data/config/default.yml CHANGED
@@ -1,6 +1,5 @@
1
1
  AllCops:
2
- # Prevent RuboCop from exploding when it finds an older-than-2.6 .ruby-version
3
- TargetRubyVersion: 2.6
2
+ TargetRubyVersion: 3.0
4
3
  Exclude: []
5
4
  DisabledByDefault: true
6
5
  StyleGuideBaseURL: https://github.com/standardrb/standard
data/config/ruby-3.2.yml CHANGED
@@ -1,4 +1,4 @@
1
- inherit_from: ./base.yml
1
+ inherit_from: ./ruby-3.3.yml
2
2
 
3
3
  AllCops:
4
4
  TargetRubyVersion: 3.2
@@ -0,0 +1,4 @@
1
+ inherit_from: ./base.yml
2
+
3
+ AllCops:
4
+ TargetRubyVersion: 3.3
@@ -0,0 +1,60 @@
1
+ require "standard"
2
+ require_relative "wraps_built_in_lsp_standardizer"
3
+
4
+ module RubyLsp
5
+ module Standard
6
+ class Addon < ::RubyLsp::Addon
7
+ def initializer
8
+ @wraps_built_in_lsp_standardizer = nil
9
+ end
10
+
11
+ def name
12
+ "Standard Ruby"
13
+ end
14
+
15
+ def activate(global_state, message_queue)
16
+ warn "Activating Standard Ruby LSP addon v#{::Standard::VERSION}"
17
+ @wraps_built_in_lsp_standardizer = WrapsBuiltinLspStandardizer.new
18
+ global_state.register_formatter("standard", @wraps_built_in_lsp_standardizer)
19
+ register_additional_file_watchers(global_state, message_queue)
20
+ warn "Initialized Standard Ruby LSP addon #{::Standard::VERSION}"
21
+ end
22
+
23
+ def deactivate
24
+ @wraps_built_in_lsp_standardizer = nil
25
+ end
26
+
27
+ def register_additional_file_watchers(global_state, message_queue)
28
+ return unless global_state.supports_watching_files
29
+
30
+ message_queue << Request.new(
31
+ id: "standard-file-watcher",
32
+ method: "client/registerCapability",
33
+ params: Interface::RegistrationParams.new(
34
+ registrations: [
35
+ Interface::Registration.new(
36
+ id: "workspace/didChangeWatchedFilesStandard",
37
+ method: "workspace/didChangeWatchedFiles",
38
+ register_options: Interface::DidChangeWatchedFilesRegistrationOptions.new(
39
+ watchers: [
40
+ Interface::FileSystemWatcher.new(
41
+ glob_pattern: "**/.standard.yml",
42
+ kind: Constant::WatchKind::CREATE | Constant::WatchKind::CHANGE | Constant::WatchKind::DELETE
43
+ )
44
+ ]
45
+ )
46
+ )
47
+ ]
48
+ )
49
+ )
50
+ end
51
+
52
+ def workspace_did_change_watched_files(changes)
53
+ if changes.any? { |change| change[:uri].end_with?(".standard.yml") }
54
+ @wraps_built_in_lsp_standardizer.init!
55
+ warn "Re-initialized Standard Ruby LSP addon #{::Standard::VERSION} due to .standard.yml file change"
56
+ end
57
+ end
58
+ end
59
+ end
60
+ end
@@ -0,0 +1,98 @@
1
+ module RubyLsp
2
+ module Standard
3
+ class WrapsBuiltinLspStandardizer
4
+ include RubyLsp::Requests::Support::Formatter
5
+ def initialize
6
+ init!
7
+ end
8
+
9
+ def init!
10
+ @config = ::Standard::BuildsConfig.new.call([])
11
+ @standardizer = ::Standard::Lsp::Standardizer.new(
12
+ @config,
13
+ ::Standard::Lsp::Logger.new
14
+ )
15
+ @rubocop_config = @config.rubocop_config_store.for_pwd
16
+ @cop_registry = RuboCop::Cop::Registry.global.to_h
17
+ end
18
+
19
+ def run_formatting(uri, document)
20
+ @standardizer.format(uri_to_path(uri), document.source)
21
+ end
22
+
23
+ def run_diagnostic(uri, document)
24
+ offenses = @standardizer.offenses(uri_to_path(uri), document.source)
25
+
26
+ offenses.map { |o|
27
+ cop_name = o[:cop_name]
28
+
29
+ msg = o[:message].delete_prefix(cop_name)
30
+ loc = o[:location]
31
+
32
+ severity = case o[:severity]
33
+ when "error", "fatal"
34
+ RubyLsp::Constant::DiagnosticSeverity::ERROR
35
+ when "warning"
36
+ RubyLsp::Constant::DiagnosticSeverity::WARNING
37
+ when "convention"
38
+ RubyLsp::Constant::DiagnosticSeverity::INFORMATION
39
+ when "refactor", "info"
40
+ RubyLsp::Constant::DiagnosticSeverity::HINT
41
+ else # the above cases fully cover what RuboCop sends at this time
42
+ logger.puts "Unknown severity: #{severity.inspect}"
43
+ RubyLsp::Constant::DiagnosticSeverity::HINT
44
+ end
45
+
46
+ RubyLsp::Interface::Diagnostic.new(
47
+ code: cop_name,
48
+ code_description: code_description(cop_name),
49
+ message: msg,
50
+ source: "Standard Ruby",
51
+ severity: severity,
52
+ range: RubyLsp::Interface::Range.new(
53
+ start: RubyLsp::Interface::Position.new(line: loc[:start_line] - 1, character: loc[:start_column] - 1),
54
+ end: RubyLsp::Interface::Position.new(line: loc[:last_line] - 1, character: loc[:last_column])
55
+ )
56
+ # TODO: We need to do something like to support quickfixes thru code actions
57
+ # See: https://github.com/Shopify/ruby-lsp/blob/4c1906172add4d5c39c35d3396aa29c768bfb898/lib/ruby_lsp/requests/support/rubocop_diagnostic.rb#L62
58
+ # data: {
59
+ # correctable: correctable?(offense),
60
+ # code_actions: to_lsp_code_actions
61
+ # }
62
+ #
63
+ # Right now, our offenses are all just JSON parsed from stdout shelling to RuboCop, so
64
+ # it seems we don't have the corrector available to us.
65
+ #
66
+ # Lifted from:
67
+ # https://github.com/Shopify/ruby-lsp/blob/8d4c17efce4e8ecc8e7c557ab2981db6b22c0b6d/lib/ruby_lsp/requests/support/rubocop_diagnostic.rb#L201
68
+ # def correctable?(offense)
69
+ # !offense.corrector.nil?
70
+ # end
71
+ )
72
+ }
73
+ end
74
+
75
+ private
76
+
77
+ # duplicated from: lib/standard/lsp/routes.rb
78
+ # modified to incorporate Ruby LSP's to_standardized_path method
79
+ def uri_to_path(uri)
80
+ if uri.respond_to?(:to_standardized_path) && !(standardized_path = uri.to_standardized_path).nil?
81
+ standardized_path
82
+ else
83
+ uri.to_s.sub(%r{^file://}, "")
84
+ end
85
+ end
86
+
87
+ # lifted from:
88
+ # https://github.com/Shopify/ruby-lsp/blob/4c1906172add4d5c39c35d3396aa29c768bfb898/lib/ruby_lsp/requests/support/rubocop_diagnostic.rb#L84
89
+ def code_description(cop_name)
90
+ if (cop_class = @cop_registry[cop_name]&.first)
91
+ if (doc_url = cop_class.documentation_url(@rubocop_config))
92
+ Interface::CodeDescription.new(href: doc_url)
93
+ end
94
+ end
95
+ end
96
+ end
97
+ end
98
+ end
@@ -57,6 +57,8 @@ module Standard::Base
57
57
  "ruby-3.1.yml"
58
58
  elsif desired_version < Gem::Version.new("3.3")
59
59
  "ruby-3.2.yml"
60
+ elsif desired_version < Gem::Version.new("3.4")
61
+ "ruby-3.3.yml"
60
62
  else
61
63
  default
62
64
  end
@@ -181,7 +181,7 @@ module Standard
181
181
  message: msg,
182
182
  range: {
183
183
  start: {character: loc[:start_column] - 1, line: loc[:start_line] - 1},
184
- end: {character: loc[:last_column] - 1, line: loc[:last_line] - 1}
184
+ end: {character: loc[:last_column], line: loc[:last_line] - 1}
185
185
  },
186
186
  severity: severity,
187
187
  source: "standard"
@@ -154,7 +154,7 @@ module Standard
154
154
  end
155
155
 
156
156
  def except(hash_or_config, keys)
157
- hash_or_config.to_h.reject { |key, _| keys.include?(key) }.to_h
157
+ hash_or_config.to_h.except(*keys).to_h
158
158
  end
159
159
 
160
160
  # Always deletes nil entries, always overwrites arrays
@@ -1,3 +1,3 @@
1
1
  module Standard
2
- VERSION = Gem::Version.new("1.37.0")
2
+ VERSION = Gem::Version.new("1.38.0")
3
3
  end
data/standard.gemspec CHANGED
@@ -7,7 +7,7 @@ Gem::Specification.new do |spec|
7
7
  spec.version = Standard::VERSION
8
8
  spec.authors = ["Justin Searls"]
9
9
  spec.email = ["searls@gmail.com"]
10
- spec.required_ruby_version = ">= 2.6.0"
10
+ spec.required_ruby_version = ">= 3.0.0"
11
11
 
12
12
  spec.summary = "Ruby Style Guide, with linter & automatic code fixer"
13
13
  spec.homepage = "https://github.com/standardrb/standard"
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.37.0
4
+ version: 1.38.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Justin Searls
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2024-06-11 00:00:00.000000000 Z
11
+ date: 2024-06-23 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rubocop
@@ -117,11 +117,14 @@ files:
117
117
  - config/ruby-3.0.yml
118
118
  - config/ruby-3.1.yml
119
119
  - config/ruby-3.2.yml
120
+ - config/ruby-3.3.yml
120
121
  - docs/ARCHITECTURE.md
121
122
  - docs/NEW_RUBIES.md
122
123
  - docs/RELEASE.md
123
124
  - docs/UPGRADING.md
124
125
  - exe/standardrb
126
+ - lib/ruby_lsp/standard/addon.rb
127
+ - lib/ruby_lsp/standard/wraps_built_in_lsp_standardizer.rb
125
128
  - lib/standard.rb
126
129
  - lib/standard/base.rb
127
130
  - lib/standard/base/plugin.rb
@@ -176,14 +179,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
176
179
  requirements:
177
180
  - - ">="
178
181
  - !ruby/object:Gem::Version
179
- version: 2.6.0
182
+ version: 3.0.0
180
183
  required_rubygems_version: !ruby/object:Gem::Requirement
181
184
  requirements:
182
185
  - - ">="
183
186
  - !ruby/object:Gem::Version
184
187
  version: '0'
185
188
  requirements: []
186
- rubygems_version: 3.1.6
189
+ rubygems_version: 3.5.9
187
190
  signing_key:
188
191
  specification_version: 4
189
192
  summary: Ruby Style Guide, with linter & automatic code fixer