syntax_suggest 2.0.1 → 2.0.3

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: ae3c4707aa81be21c4b2545128955745f90df5a2a9e978592b5fe58863a6d5a4
4
- data.tar.gz: 596b91a251e7c587c54830a8fc6c64db15066fc202bf30fe086a5255d6f2d06b
3
+ metadata.gz: de1d75012724df4b1222ba39772c0fbfb6205cfd8713dd4f19ff53e473d7e4f3
4
+ data.tar.gz: 1a705bbd28e351a682343089c14a2277953d917725f970eaa7884912a093be45
5
5
  SHA512:
6
- metadata.gz: ce891b408cfd1fe2450d61daea1928562cd01ee5c9335d92684489562d9f243df0b2ac4294f5d735badb5cc664da7226a7cd01eae679b52b9203184852505caf
7
- data.tar.gz: 1cc64117d7d662e0ab01dde6dd4a8b4efffe544d4b6cf4332f1cc6e6fff6a17199d3dd02f992c8dbb896ab0e105c5ea1ebd4642c47d54dab9f41741c99e6a8b7
6
+ metadata.gz: d883c10ef026cfe8c26c930d0857ef02f7655421cdd83f69bd971e231f674124fcca4957032f0a9311c87d2fd798ffb7b9921aee6e9859b112213cfda0c48cd5
7
+ data.tar.gz: e3d0a25404aa3ea0a802400ee42b3d8337f9180420772409e920683dd631e59c8c2f98bcf85a107dcb3ba888246a3962aeb7ca7ec036b3d0b08e17496406f145
@@ -4,3 +4,5 @@ updates:
4
4
  directory: '/'
5
5
  schedule:
6
6
  interval: 'weekly'
7
+ labels:
8
+ - 'skip changelog'
@@ -13,7 +13,7 @@ jobs:
13
13
  !contains(github.event.pull_request.body, '[skip ci]') &&
14
14
  !contains(github.event.pull_request.labels.*.name, 'skip changelog')
15
15
  steps:
16
- - uses: actions/checkout@v4.2.1
16
+ - uses: actions/checkout@v6
17
17
  - name: Check that CHANGELOG is touched
18
18
  run: |
19
19
  git fetch origin ${{ github.base_ref }} --depth 1 && \
@@ -9,7 +9,7 @@ jobs:
9
9
  runs-on: ubuntu-latest
10
10
  steps:
11
11
  - name: Checkout code
12
- uses: actions/checkout@v4.2.1
12
+ uses: actions/checkout@v6
13
13
  - name: Set up Ruby
14
14
  uses: ruby/setup-ruby@v1
15
15
  with:
@@ -32,14 +32,23 @@ jobs:
32
32
  fail-fast: false
33
33
  matrix:
34
34
  ruby: ${{ fromJson(needs.ruby-versions.outputs.versions) }}
35
+ prism_version:
36
+ - 1.2.0 # Shipped with Ruby 3.4 as default parser https://www.ruby-lang.org/en/news/2024/12/25/ruby-3-4-0-released/
37
+ - 1.8.0
38
+ - head
39
+ env:
40
+ PRISM_VERSION: ${{ matrix.prism_version }}
35
41
  steps:
36
42
  - name: Checkout code
37
- uses: actions/checkout@v4.2.1
43
+ uses: actions/checkout@v6
38
44
  - name: Set up Ruby
39
45
  uses: ruby/setup-ruby@v1
40
46
  with:
41
47
  ruby-version: ${{ matrix.ruby }}
42
48
  bundler-cache: true
49
+ - name: Use latest prism version (head only)
50
+ if: matrix.prism_version == 'head'
51
+ run: bundle update prism
43
52
  - name: test
44
53
  run: bin/rake test
45
54
  continue-on-error: ${{ matrix.ruby == 'head' }}
@@ -53,7 +62,7 @@ jobs:
53
62
  ruby: ${{ fromJson(needs.ruby-versions.outputs.versions) }}
54
63
  steps:
55
64
  - name: Checkout code
56
- uses: actions/checkout@v4.2.1
65
+ uses: actions/checkout@v6
57
66
  - name: Set up Ruby
58
67
  uses: ruby/setup-ruby@v1
59
68
  with:
@@ -0,0 +1,33 @@
1
+ name: Sync ruby
2
+ on:
3
+ push:
4
+ branches: [main]
5
+ jobs:
6
+ sync:
7
+ name: Sync ruby
8
+ runs-on: ubuntu-latest
9
+ if: ${{ github.repository_owner == 'ruby' }}
10
+ steps:
11
+ - uses: actions/checkout@v6
12
+
13
+ - name: Create GitHub App token
14
+ id: app-token
15
+ uses: actions/create-github-app-token@v2
16
+ with:
17
+ app-id: 2060836
18
+ private-key: ${{ secrets.RUBY_SYNC_DEFAULT_GEMS_PRIVATE_KEY }}
19
+ owner: ruby
20
+ repositories: ruby
21
+
22
+ - name: Sync to ruby/ruby
23
+ uses: convictional/trigger-workflow-and-wait@v1.6.5
24
+ with:
25
+ owner: ruby
26
+ repo: ruby
27
+ workflow_file_name: sync_default_gems.yml
28
+ github_token: ${{ steps.app-token.outputs.token }}
29
+ ref: master
30
+ client_payload: |
31
+ {"gem":"${{ github.event.repository.name }}","before":"${{ github.event.before }}","after":"${{ github.event.after }}"}
32
+ propagate_failure: true
33
+ wait_interval: 10
data/CHANGELOG.md CHANGED
@@ -1,5 +1,14 @@
1
1
  ## HEAD (unreleased)
2
2
 
3
+ ## 2.0.3
4
+
5
+ - Fix: Correctly identify trailing slashes when using Prism > 1.8.0. (https://github.com/ruby/syntax_suggest/pull/243)
6
+ - Internal: Add tests to multiple versions of prism
7
+
8
+ ## 2.0.2
9
+
10
+ - Fix: Separate multiple parser errors by newline. (https://github.com/ruby/syntax_suggest/pull/232)
11
+
3
12
  ## 2.0.1
4
13
 
5
14
  - Fix CLI failure when shipped with default gems. (https://github.com/ruby/syntax_suggest/pull/226 and https://github.com/ruby/syntax_suggest/pull/227)
data/Gemfile CHANGED
@@ -5,11 +5,19 @@ source "https://rubygems.org"
5
5
  # Specify your gem's dependencies in dead_end.gemspec
6
6
  gemspec
7
7
 
8
- gem "rake", "~> 12.0"
8
+ gem "rake", "~> 13.0"
9
9
  gem "rspec", "~> 3.0"
10
10
  gem "stackprof"
11
11
  gem "standard"
12
12
  gem "ruby-prof"
13
13
 
14
14
  gem "benchmark-ips"
15
- gem "prism"
15
+
16
+ case ENV["PRISM_VERSION"]&.strip&.downcase
17
+ when "head"
18
+ gem "prism", github: "ruby/prism"
19
+ when nil, ""
20
+ gem "prism"
21
+ else
22
+ gem "prism", ENV["PRISM_VERSION"]
23
+ end
@@ -146,11 +146,7 @@ module SyntaxSuggest
146
146
  def self.valid_without?(without_lines:, code_lines:)
147
147
  lines = code_lines - Array(without_lines).flatten
148
148
 
149
- if lines.empty?
150
- true
151
- else
152
- valid?(lines)
153
- end
149
+ lines.empty? || valid?(lines)
154
150
  end
155
151
 
156
152
  # SyntaxSuggest.invalid? [Private]
@@ -227,6 +223,7 @@ require_relative "lex_all"
227
223
  require_relative "code_line"
228
224
  require_relative "code_block"
229
225
  require_relative "block_expand"
226
+ require_relative "mini_stringio"
230
227
  require_relative "priority_queue"
231
228
  require_relative "unvisited_lines"
232
229
  require_relative "around_block_scan"
@@ -15,7 +15,7 @@ module SyntaxSuggest
15
15
  #
16
16
  # 1. Sanitize/format input source
17
17
  # 2. Search for invalid blocks
18
- # 3. Format invalid blocks into something meaninful
18
+ # 3. Format invalid blocks into something meaningful
19
19
  #
20
20
  # This class handles the third part.
21
21
  #
@@ -10,7 +10,7 @@ module SyntaxSuggest
10
10
  #
11
11
  # 1. Sanitize/format input source
12
12
  # 2. Search for invalid blocks
13
- # 3. Format invalid blocks into something meaninful
13
+ # 3. Format invalid blocks into something meaningful
14
14
  #
15
15
  # This class handles the first part.
16
16
  #
@@ -8,7 +8,7 @@ module SyntaxSuggest
8
8
  #
9
9
  # 1. Sanitize/format input source
10
10
  # 2. Search for invalid blocks
11
- # 3. Format invalid blocks into something meaninful
11
+ # 3. Format invalid blocks into something meaningful
12
12
  #
13
13
  # The Code frontier is a critical part of the second step
14
14
  #
@@ -180,18 +180,17 @@ module SyntaxSuggest
180
180
  # EOM
181
181
  # expect(lines.first.trailing_slash?).to eq(true)
182
182
  #
183
- if SyntaxSuggest.use_prism_parser?
184
- def trailing_slash?
185
- last = @lex.last
186
- last&.type == :on_tstring_end
187
- end
188
- else
189
- def trailing_slash?
190
- last = @lex.last
191
- return false unless last
192
- return false unless last.type == :on_sp
183
+ def trailing_slash?
184
+ last = @lex.last
193
185
 
186
+ # Older versions of prism diverged slightly from Ripper in compatibility mode
187
+ case last&.type
188
+ when :on_sp
194
189
  last.token == TRAILING_SLASH
190
+ when :on_tstring_end
191
+ true
192
+ else
193
+ false
195
194
  end
196
195
  end
197
196
 
@@ -3,24 +3,6 @@
3
3
  # Ruby 3.2+ has a cleaner way to hook into Ruby that doesn't use `require`
4
4
  if SyntaxError.method_defined?(:detailed_message)
5
5
  module SyntaxSuggest
6
- # Mini String IO [Private]
7
- #
8
- # Acts like a StringIO with reduced API, but without having to require that
9
- # class.
10
- class MiniStringIO
11
- def initialize(isatty: $stderr.isatty)
12
- @string = +""
13
- @isatty = isatty
14
- end
15
-
16
- attr_reader :isatty
17
- def puts(value = $/, **)
18
- @string << value
19
- end
20
-
21
- attr_reader :string
22
- end
23
-
24
6
  # SyntaxSuggest.module_for_detailed_message [Private]
25
7
  #
26
8
  # Used to monkeypatch SyntaxError via Module.prepend
@@ -0,0 +1,30 @@
1
+ # frozen_string_literal: true
2
+
3
+ module SyntaxSuggest
4
+ # Mini String IO [Private]
5
+ #
6
+ # Acts like a StringIO with reduced API, but without having to require that
7
+ # class.
8
+ #
9
+ # The original codebase emitted directly to $stderr, but now SyntaxError#detailed_message
10
+ # needs a string output. To accomplish that we kept the original print infrastructure in place and
11
+ # added this class to accumulate the print output into a string.
12
+ class MiniStringIO
13
+ EMPTY_ARG = Object.new
14
+
15
+ def initialize(isatty: $stderr.isatty)
16
+ @string = +""
17
+ @isatty = isatty
18
+ end
19
+
20
+ attr_reader :isatty
21
+ def puts(value = EMPTY_ARG, **)
22
+ if !value.equal?(EMPTY_ARG)
23
+ @string << value
24
+ end
25
+ @string << $/
26
+ end
27
+
28
+ attr_reader :string
29
+ end
30
+ end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module SyntaxSuggest
4
- VERSION = "2.0.1"
4
+ VERSION = "2.0.3"
5
5
  end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: syntax_suggest
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.1
4
+ version: 2.0.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - schneems
8
8
  bindir: exe
9
9
  cert_chain: []
10
- date: 2024-10-18 00:00:00.000000000 Z
10
+ date: 1980-01-02 00:00:00.000000000 Z
11
11
  dependencies: []
12
12
  description: When you get an "unexpected end" in your syntax this gem helps you find
13
13
  it
@@ -21,6 +21,7 @@ files:
21
21
  - ".github/dependabot.yml"
22
22
  - ".github/workflows/check_changelog.yml"
23
23
  - ".github/workflows/ci.yml"
24
+ - ".github/workflows/sync-ruby.yml"
24
25
  - ".gitignore"
25
26
  - ".rspec"
26
27
  - ".standard.yml"
@@ -56,6 +57,7 @@ files:
56
57
  - lib/syntax_suggest/left_right_lex_count.rb
57
58
  - lib/syntax_suggest/lex_all.rb
58
59
  - lib/syntax_suggest/lex_value.rb
60
+ - lib/syntax_suggest/mini_stringio.rb
59
61
  - lib/syntax_suggest/parse_blocks_from_indent_line.rb
60
62
  - lib/syntax_suggest/pathname_from_message.rb
61
63
  - lib/syntax_suggest/priority_engulf_queue.rb
@@ -85,7 +87,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
85
87
  - !ruby/object:Gem::Version
86
88
  version: '0'
87
89
  requirements: []
88
- rubygems_version: 3.6.0.dev
90
+ rubygems_version: 3.6.9
89
91
  specification_version: 4
90
92
  summary: Find syntax errors in your source in a snap
91
93
  test_files: []