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 +4 -4
- data/.github/dependabot.yml +2 -0
- data/.github/workflows/check_changelog.yml +1 -1
- data/.github/workflows/ci.yml +12 -3
- data/.github/workflows/sync-ruby.yml +33 -0
- data/CHANGELOG.md +9 -0
- data/Gemfile +10 -2
- data/lib/syntax_suggest/api.rb +2 -5
- data/lib/syntax_suggest/capture_code_context.rb +1 -1
- data/lib/syntax_suggest/clean_document.rb +1 -1
- data/lib/syntax_suggest/code_frontier.rb +1 -1
- data/lib/syntax_suggest/code_line.rb +9 -10
- data/lib/syntax_suggest/core_ext.rb +0 -18
- data/lib/syntax_suggest/mini_stringio.rb +30 -0
- data/lib/syntax_suggest/version.rb +1 -1
- metadata +5 -3
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: de1d75012724df4b1222ba39772c0fbfb6205cfd8713dd4f19ff53e473d7e4f3
|
|
4
|
+
data.tar.gz: 1a705bbd28e351a682343089c14a2277953d917725f970eaa7884912a093be45
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: d883c10ef026cfe8c26c930d0857ef02f7655421cdd83f69bd971e231f674124fcca4957032f0a9311c87d2fd798ffb7b9921aee6e9859b112213cfda0c48cd5
|
|
7
|
+
data.tar.gz: e3d0a25404aa3ea0a802400ee42b3d8337f9180420772409e920683dd631e59c8c2f98bcf85a107dcb3ba888246a3962aeb7ca7ec036b3d0b08e17496406f145
|
data/.github/dependabot.yml
CHANGED
|
@@ -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@
|
|
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 && \
|
data/.github/workflows/ci.yml
CHANGED
|
@@ -9,7 +9,7 @@ jobs:
|
|
|
9
9
|
runs-on: ubuntu-latest
|
|
10
10
|
steps:
|
|
11
11
|
- name: Checkout code
|
|
12
|
-
uses: actions/checkout@
|
|
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@
|
|
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@
|
|
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", "~>
|
|
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
|
-
|
|
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
|
data/lib/syntax_suggest/api.rb
CHANGED
|
@@ -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
|
-
|
|
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"
|
|
@@ -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
|
|
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
|
-
|
|
184
|
-
|
|
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
|
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.
|
|
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:
|
|
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.
|
|
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: []
|