syntax_tree 2.8.0 → 2.9.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: ad3c35843b6e3148499ac001d05a9c5d613d69debff5fdc411dff89a9adc5ca4
4
- data.tar.gz: 570ae99edf8b17b5d205142872621b0551632d29ac4671ee14fed8415cf9cfe4
3
+ metadata.gz: f8818212d64fea80bd776267ea9dac3a10c454e789b47ed72f4cf715dc087b30
4
+ data.tar.gz: ac90d097d6cbd8b50427c5ead994021448732022ce680a809c17e5e7fe9b427f
5
5
  SHA512:
6
- metadata.gz: 7ec0e9d8f5f4f828ba0d451d49bd7fa9f5576570f7427c91973503e795fe068e21a61dac4f1880be12dbd551855eb0b8d27f359a9a682b964f3183aaf687e1da
7
- data.tar.gz: b8ae5c0132ebc445d060b1d5cef477253c724ea2c7a22a536d4ea78b3fb2d905c560e1f044f8843b92f79e0dbc1a434cda2a38e76b2732b426719150785a59af
6
+ metadata.gz: cfe0af3c52f742ed24f5643710df53fd09b761f428c007ac9434d0e96828bc75c8e082884685173e6b7ea5cf5343d264219c5f5d2c9eb0a90a1fd58d2bec70c8
7
+ data.tar.gz: 0ee8b8362d6d18945f5bca0a0bfef1d1dc85e2fa5f27c61e807d7c4aa15b23cbb70fe6a8ebe4b1d6e73fd26e473c6fbb158287de2ee7343d0231e75b3529329b
data/CHANGELOG.md CHANGED
@@ -6,6 +6,10 @@ The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/) a
6
6
 
7
7
  ## [Unreleased]
8
8
 
9
+ ## [2.9.0] - 2022-07-04
10
+
11
+ - [#106](https://github.com/ruby-syntax-tree/syntax_tree/pull/106) - Add inlay hint support to match the LSP specification.
12
+
9
13
  ## [2.8.0] - 2022-06-21
10
14
 
11
15
  ### Added
@@ -272,7 +276,8 @@ The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/) a
272
276
 
273
277
  - 🎉 Initial release! 🎉
274
278
 
275
- [unreleased]: https://github.com/ruby-syntax-tree/syntax_tree/compare/v2.8.0...HEAD
279
+ [unreleased]: https://github.com/ruby-syntax-tree/syntax_tree/compare/v2.1.0...HEAD
280
+ [2.1.0]: https://github.com/ruby-syntax-tree/syntax_tree/compare/v2.8.0...v2.1.0
276
281
  [2.8.0]: https://github.com/ruby-syntax-tree/syntax_tree/compare/v2.7.1...v2.8.0
277
282
  [2.7.1]: https://github.com/ruby-syntax-tree/syntax_tree/compare/v2.7.0...v2.7.1
278
283
  [2.7.0]: https://github.com/ruby-syntax-tree/syntax_tree/compare/v2.6.0...v2.7.0
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- syntax_tree (2.8.0)
4
+ syntax_tree (2.9.0)
5
5
  prettier_print
6
6
 
7
7
  GEM
@@ -9,7 +9,8 @@ GEM
9
9
  specs:
10
10
  ast (2.4.2)
11
11
  docile (1.4.0)
12
- minitest (5.16.0)
12
+ json (2.6.2)
13
+ minitest (5.16.2)
13
14
  parallel (1.22.1)
14
15
  parser (3.1.2.0)
15
16
  ast (~> 2.4.1)
@@ -18,7 +19,8 @@ GEM
18
19
  rake (13.0.6)
19
20
  regexp_parser (2.5.0)
20
21
  rexml (3.2.5)
21
- rubocop (1.30.1)
22
+ rubocop (1.31.1)
23
+ json (~> 2.3)
22
24
  parallel (~> 1.10)
23
25
  parser (>= 3.1.0.0)
24
26
  rainbow (>= 2.2.2, < 4.0)
@@ -36,7 +38,7 @@ GEM
36
38
  simplecov_json_formatter (~> 0.1)
37
39
  simplecov-html (0.12.3)
38
40
  simplecov_json_formatter (0.1.4)
39
- unicode-display_width (2.1.0)
41
+ unicode-display_width (2.2.0)
40
42
 
41
43
  PLATFORMS
42
44
  arm64-darwin-21
@@ -2,18 +2,19 @@
2
2
 
3
3
  module SyntaxTree
4
4
  class LanguageServer
5
- # This class provides inlay hints for the language server. It is loosely
6
- # designed around the LSP spec, but existed before the spec was finalized so
7
- # is a little different for now.
5
+ # This class provides inlay hints for the language server. It existed
6
+ # before the spec was finalized so, so it provides two result formats:
7
+ # aligned with the spec (`#all`) and proprietary (`#before` and `#after`).
8
8
  #
9
9
  # For more information, see the spec here:
10
10
  # https://github.com/microsoft/language-server-protocol/issues/956.
11
11
  #
12
12
  class InlayHints < Visitor
13
- attr_reader :stack, :before, :after
13
+ attr_reader :stack, :all, :before, :after
14
14
 
15
15
  def initialize
16
16
  @stack = []
17
+ @all = []
17
18
  @before = Hash.new { |hash, key| hash[key] = +"" }
18
19
  @after = Hash.new { |hash, key| hash[key] = +"" }
19
20
  end
@@ -98,6 +99,13 @@ module SyntaxTree
98
99
  def visit_rescue(node)
99
100
  if node.exception.nil?
100
101
  after[node.location.start_char + "rescue".length] << " StandardError"
102
+ all << {
103
+ position: {
104
+ line: node.location.start_line - 1,
105
+ character: node.location.start_column + "rescue".length
106
+ },
107
+ label: " StandardError"
108
+ }
101
109
  end
102
110
 
103
111
  super
@@ -129,6 +137,20 @@ module SyntaxTree
129
137
  private
130
138
 
131
139
  def parentheses(location)
140
+ all << {
141
+ position: {
142
+ line: location.start_line - 1,
143
+ character: location.start_column
144
+ },
145
+ label: "₍"
146
+ }
147
+ all << {
148
+ position: {
149
+ line: location.end_line - 1,
150
+ character: location.end_column
151
+ },
152
+ label: "₎"
153
+ }
132
154
  before[location.start_char] << "₍"
133
155
  after[location.end_char] << "₎"
134
156
  end
@@ -61,11 +61,19 @@ module SyntaxTree
61
61
  }
62
62
  write(id: id, result: [format(store[uri])])
63
63
  in {
64
+ # official RPC in LSP spec 3.17
65
+ method: "textDocument/inlayHint",
66
+ id:,
67
+ params: { textDocument: { uri: } }
68
+ }
69
+ write(id: id, result: inlay_hints(store[uri], false))
70
+ in {
71
+ # proprietary RPC (deprecated) between this gem and vscode-syntax-tree
64
72
  method: "textDocument/inlayHints",
65
73
  id:,
66
74
  params: { textDocument: { uri: } }
67
75
  }
68
- write(id: id, result: inlay_hints(store[uri]))
76
+ write(id: id, result: inlay_hints(store[uri], true))
69
77
  in {
70
78
  method: "syntaxTree/visualizing",
71
79
  id:,
@@ -85,6 +93,9 @@ module SyntaxTree
85
93
  def capabilities
86
94
  {
87
95
  documentFormattingProvider: true,
96
+ inlayHintProvider: {
97
+ resolveProvider: false
98
+ },
88
99
  textDocumentSync: {
89
100
  change: 1,
90
101
  openClose: true
@@ -108,14 +119,18 @@ module SyntaxTree
108
119
  }
109
120
  end
110
121
 
111
- def inlay_hints(source)
122
+ def inlay_hints(source, proprietary)
112
123
  inlay_hints = InlayHints.find(SyntaxTree.parse(source))
113
124
  serialize = ->(position, text) { { position: position, text: text } }
114
125
 
115
- {
116
- before: inlay_hints.before.map(&serialize),
117
- after: inlay_hints.after.map(&serialize)
118
- }
126
+ if proprietary
127
+ {
128
+ before: inlay_hints.before.map(&serialize),
129
+ after: inlay_hints.after.map(&serialize)
130
+ }
131
+ else
132
+ inlay_hints.all
133
+ end
119
134
  rescue Parser::ParseError
120
135
  # If there is a parse error, then we're not going to return any inlay
121
136
  # hints for this source.
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module SyntaxTree
4
- VERSION = "2.8.0"
4
+ VERSION = "2.9.0"
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: syntax_tree
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.8.0
4
+ version: 2.9.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-06-21 00:00:00.000000000 Z
11
+ date: 2022-07-04 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: prettier_print
@@ -160,7 +160,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
160
160
  - !ruby/object:Gem::Version
161
161
  version: '0'
162
162
  requirements: []
163
- rubygems_version: 3.3.3
163
+ rubygems_version: 3.4.0.dev
164
164
  signing_key:
165
165
  specification_version: 4
166
166
  summary: A parser based on ripper