syntax_tree 2.3.1 → 2.5.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 +4 -4
- data/.github/workflows/main.yml +20 -1
- data/.rubocop.yml +80 -0
- data/CHANGELOG.md +36 -1
- data/Gemfile.lock +24 -1
- data/README.md +126 -5
- data/Rakefile +27 -5
- data/config/rubocop.yml +64 -0
- data/lib/syntax_tree/cli.rb +63 -27
- data/lib/syntax_tree/formatter/single_quotes.rb +13 -0
- data/lib/syntax_tree/formatter.rb +7 -6
- data/lib/syntax_tree/language_server/inlay_hints.rb +87 -38
- data/lib/syntax_tree/language_server.rb +50 -14
- data/lib/syntax_tree/node.rb +499 -387
- data/lib/syntax_tree/parser.rb +447 -112
- data/lib/syntax_tree/plugin/single_quotes.rb +4 -0
- data/lib/syntax_tree/version.rb +1 -1
- data/lib/syntax_tree/visitor/field_visitor.rb +1115 -0
- data/lib/syntax_tree/visitor/json_visitor.rb +25 -1305
- data/lib/syntax_tree/visitor/match_visitor.rb +122 -0
- data/lib/syntax_tree/visitor/pretty_print_visitor.rb +35 -1163
- data/lib/syntax_tree/visitor.rb +6 -1
- data/lib/syntax_tree.rb +12 -18
- data/syntax_tree.gemspec +26 -21
- metadata +38 -5
- data/lib/syntax_tree/prettyprint.rb +0 -1156
data/lib/syntax_tree/visitor.rb
CHANGED
@@ -1,6 +1,9 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
module SyntaxTree
|
4
|
+
# Visitor is a parent class that provides the ability to walk down the tree
|
5
|
+
# and handle a subset of nodes. By defining your own subclass, you can
|
6
|
+
# explicitly handle a node type by defining a visit_* method.
|
4
7
|
class Visitor
|
5
8
|
# This is raised when you use the Visitor.visit_method method and it fails.
|
6
9
|
# It is correctable to through DidYouMean.
|
@@ -24,7 +27,9 @@ module SyntaxTree
|
|
24
27
|
|
25
28
|
def corrections
|
26
29
|
@corrections ||=
|
27
|
-
DidYouMean::SpellChecker.new(
|
30
|
+
DidYouMean::SpellChecker.new(
|
31
|
+
dictionary: Visitor.visit_methods
|
32
|
+
).correct(visit_method)
|
28
33
|
end
|
29
34
|
|
30
35
|
DidYouMean.correct_error(VisitMethodError, self)
|
data/lib/syntax_tree.rb
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
|
3
3
|
require "json"
|
4
4
|
require "pp"
|
5
|
-
require "
|
5
|
+
require "prettier_print"
|
6
6
|
require "ripper"
|
7
7
|
require "stringio"
|
8
8
|
|
@@ -11,23 +11,15 @@ require_relative "syntax_tree/node"
|
|
11
11
|
require_relative "syntax_tree/parser"
|
12
12
|
require_relative "syntax_tree/version"
|
13
13
|
require_relative "syntax_tree/visitor"
|
14
|
+
require_relative "syntax_tree/visitor/field_visitor"
|
14
15
|
require_relative "syntax_tree/visitor/json_visitor"
|
16
|
+
require_relative "syntax_tree/visitor/match_visitor"
|
15
17
|
require_relative "syntax_tree/visitor/pretty_print_visitor"
|
16
18
|
|
17
|
-
#
|
18
|
-
#
|
19
|
-
#
|
20
|
-
|
21
|
-
verbose = $VERBOSE
|
22
|
-
$VERBOSE = nil
|
23
|
-
|
24
|
-
begin
|
25
|
-
require_relative "syntax_tree/prettyprint"
|
26
|
-
ensure
|
27
|
-
$VERBOSE = verbose
|
28
|
-
end
|
29
|
-
end
|
30
|
-
|
19
|
+
# Syntax Tree is a suite of tools built on top of the internal CRuby parser. It
|
20
|
+
# provides the ability to generate a syntax tree from source, as well as the
|
21
|
+
# tools necessary to inspect and manipulate that syntax tree. It can be used to
|
22
|
+
# build formatters, linters, language servers, and more.
|
31
23
|
module SyntaxTree
|
32
24
|
# This holds references to objects that respond to both #parse and #format
|
33
25
|
# so that we can use them in the CLI.
|
@@ -48,8 +40,8 @@ module SyntaxTree
|
|
48
40
|
end
|
49
41
|
|
50
42
|
# Parses the given source and returns the formatted source.
|
51
|
-
def self.format(source)
|
52
|
-
formatter = Formatter.new(source, [])
|
43
|
+
def self.format(source, maxwidth = 80)
|
44
|
+
formatter = Formatter.new(source, [], maxwidth)
|
53
45
|
parse(source).format(formatter)
|
54
46
|
|
55
47
|
formatter.flush
|
@@ -61,8 +53,10 @@ module SyntaxTree
|
|
61
53
|
def self.read(filepath)
|
62
54
|
encoding =
|
63
55
|
File.open(filepath, "r") do |file|
|
56
|
+
break Encoding.default_external if file.eof?
|
57
|
+
|
64
58
|
header = file.readline
|
65
|
-
header += file.readline if header.start_with?("#!")
|
59
|
+
header += file.readline if !file.eof? && header.start_with?("#!")
|
66
60
|
Ripper.new(header).tap(&:parse).encoding
|
67
61
|
end
|
68
62
|
|
data/syntax_tree.gemspec
CHANGED
@@ -1,30 +1,35 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require_relative
|
3
|
+
require_relative "lib/syntax_tree/version"
|
4
4
|
|
5
5
|
Gem::Specification.new do |spec|
|
6
|
-
spec.name
|
7
|
-
spec.version
|
8
|
-
spec.authors
|
9
|
-
spec.email
|
10
|
-
|
11
|
-
spec.summary
|
12
|
-
spec.homepage
|
13
|
-
spec.license
|
14
|
-
spec.metadata
|
15
|
-
|
16
|
-
spec.files
|
17
|
-
|
18
|
-
|
6
|
+
spec.name = "syntax_tree"
|
7
|
+
spec.version = SyntaxTree::VERSION
|
8
|
+
spec.authors = ["Kevin Newton"]
|
9
|
+
spec.email = ["kddnewton@gmail.com"]
|
10
|
+
|
11
|
+
spec.summary = "A parser based on ripper"
|
12
|
+
spec.homepage = "https://github.com/kddnewton/syntax_tree"
|
13
|
+
spec.license = "MIT"
|
14
|
+
spec.metadata = { "rubygems_mfa_required" => "true" }
|
15
|
+
|
16
|
+
spec.files =
|
17
|
+
Dir.chdir(__dir__) do
|
18
|
+
`git ls-files -z`.split("\x0")
|
19
|
+
.reject { |f| f.match(%r{^(test|spec|features)/}) }
|
19
20
|
end
|
20
|
-
end
|
21
21
|
|
22
|
-
spec.
|
23
|
-
|
22
|
+
spec.required_ruby_version = ">= 2.7.3"
|
23
|
+
|
24
|
+
spec.bindir = "exe"
|
25
|
+
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
24
26
|
spec.require_paths = %w[lib]
|
25
27
|
|
26
|
-
spec.
|
27
|
-
|
28
|
-
spec.add_development_dependency
|
29
|
-
spec.add_development_dependency
|
28
|
+
spec.add_dependency "prettier_print"
|
29
|
+
|
30
|
+
spec.add_development_dependency "bundler"
|
31
|
+
spec.add_development_dependency "minitest"
|
32
|
+
spec.add_development_dependency "rake"
|
33
|
+
spec.add_development_dependency "rubocop"
|
34
|
+
spec.add_development_dependency "simplecov"
|
30
35
|
end
|
metadata
CHANGED
@@ -1,15 +1,29 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: syntax_tree
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.
|
4
|
+
version: 2.5.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Kevin Newton
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2022-
|
11
|
+
date: 2022-05-14 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: prettier_print
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ">="
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '0'
|
13
27
|
- !ruby/object:Gem::Dependency
|
14
28
|
name: bundler
|
15
29
|
requirement: !ruby/object:Gem::Requirement
|
@@ -52,6 +66,20 @@ dependencies:
|
|
52
66
|
- - ">="
|
53
67
|
- !ruby/object:Gem::Version
|
54
68
|
version: '0'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: rubocop
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - ">="
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '0'
|
76
|
+
type: :development
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - ">="
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '0'
|
55
83
|
- !ruby/object:Gem::Dependency
|
56
84
|
name: simplecov
|
57
85
|
requirement: !ruby/object:Gem::Requirement
|
@@ -78,6 +106,7 @@ files:
|
|
78
106
|
- ".github/workflows/gh-pages.yml"
|
79
107
|
- ".github/workflows/main.yml"
|
80
108
|
- ".gitignore"
|
109
|
+
- ".rubocop.yml"
|
81
110
|
- CHANGELOG.md
|
82
111
|
- CODE_OF_CONDUCT.md
|
83
112
|
- Gemfile
|
@@ -88,19 +117,23 @@ files:
|
|
88
117
|
- bin/bench
|
89
118
|
- bin/console
|
90
119
|
- bin/profile
|
120
|
+
- config/rubocop.yml
|
91
121
|
- doc/logo.svg
|
92
122
|
- exe/stree
|
93
123
|
- lib/syntax_tree.rb
|
94
124
|
- lib/syntax_tree/cli.rb
|
95
125
|
- lib/syntax_tree/formatter.rb
|
126
|
+
- lib/syntax_tree/formatter/single_quotes.rb
|
96
127
|
- lib/syntax_tree/language_server.rb
|
97
128
|
- lib/syntax_tree/language_server/inlay_hints.rb
|
98
129
|
- lib/syntax_tree/node.rb
|
99
130
|
- lib/syntax_tree/parser.rb
|
100
|
-
- lib/syntax_tree/
|
131
|
+
- lib/syntax_tree/plugin/single_quotes.rb
|
101
132
|
- lib/syntax_tree/version.rb
|
102
133
|
- lib/syntax_tree/visitor.rb
|
134
|
+
- lib/syntax_tree/visitor/field_visitor.rb
|
103
135
|
- lib/syntax_tree/visitor/json_visitor.rb
|
136
|
+
- lib/syntax_tree/visitor/match_visitor.rb
|
104
137
|
- lib/syntax_tree/visitor/pretty_print_visitor.rb
|
105
138
|
- syntax_tree.gemspec
|
106
139
|
homepage: https://github.com/kddnewton/syntax_tree
|
@@ -116,14 +149,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
116
149
|
requirements:
|
117
150
|
- - ">="
|
118
151
|
- !ruby/object:Gem::Version
|
119
|
-
version:
|
152
|
+
version: 2.7.3
|
120
153
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
121
154
|
requirements:
|
122
155
|
- - ">="
|
123
156
|
- !ruby/object:Gem::Version
|
124
157
|
version: '0'
|
125
158
|
requirements: []
|
126
|
-
rubygems_version: 3.
|
159
|
+
rubygems_version: 3.3.3
|
127
160
|
signing_key:
|
128
161
|
specification_version: 4
|
129
162
|
summary: A parser based on ripper
|