solargraph 0.58.1 → 0.59.0.dev.1
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/.envrc +3 -0
- data/.github/workflows/linting.yml +4 -5
- data/.github/workflows/plugins.yml +40 -36
- data/.github/workflows/rspec.yml +45 -13
- data/.github/workflows/typecheck.yml +2 -2
- data/.rubocop_todo.yml +27 -49
- data/README.md +3 -3
- data/Rakefile +1 -0
- data/lib/solargraph/api_map/cache.rb +110 -110
- data/lib/solargraph/api_map/constants.rb +289 -279
- data/lib/solargraph/api_map/index.rb +204 -193
- data/lib/solargraph/api_map/source_to_yard.rb +109 -97
- data/lib/solargraph/api_map/store.rb +387 -384
- data/lib/solargraph/api_map.rb +1000 -945
- data/lib/solargraph/complex_type/conformance.rb +176 -0
- data/lib/solargraph/complex_type/type_methods.rb +242 -228
- data/lib/solargraph/complex_type/unique_type.rb +632 -482
- data/lib/solargraph/complex_type.rb +549 -444
- data/lib/solargraph/convention/data_definition/data_definition_node.rb +93 -91
- data/lib/solargraph/convention/data_definition.rb +108 -105
- data/lib/solargraph/convention/struct_definition/struct_assignment_node.rb +62 -61
- data/lib/solargraph/convention/struct_definition/struct_definition_node.rb +103 -102
- data/lib/solargraph/convention/struct_definition.rb +168 -164
- data/lib/solargraph/diagnostics/require_not_found.rb +54 -53
- data/lib/solargraph/diagnostics/rubocop.rb +119 -118
- data/lib/solargraph/diagnostics/rubocop_helpers.rb +70 -68
- data/lib/solargraph/diagnostics/type_check.rb +56 -55
- data/lib/solargraph/doc_map.rb +200 -439
- data/lib/solargraph/equality.rb +34 -34
- data/lib/solargraph/gem_pins.rb +97 -98
- data/lib/solargraph/language_server/host/dispatch.rb +131 -130
- data/lib/solargraph/language_server/host/message_worker.rb +113 -112
- data/lib/solargraph/language_server/host/sources.rb +100 -99
- data/lib/solargraph/language_server/host.rb +883 -878
- data/lib/solargraph/language_server/message/extended/check_gem_version.rb +109 -114
- data/lib/solargraph/language_server/message/extended/document.rb +24 -23
- data/lib/solargraph/language_server/message/text_document/completion.rb +58 -56
- data/lib/solargraph/language_server/message/text_document/definition.rb +42 -40
- data/lib/solargraph/language_server/message/text_document/document_symbol.rb +28 -26
- data/lib/solargraph/language_server/message/text_document/formatting.rb +150 -148
- data/lib/solargraph/language_server/message/text_document/hover.rb +60 -58
- data/lib/solargraph/language_server/message/text_document/signature_help.rb +25 -24
- data/lib/solargraph/language_server/message/text_document/type_definition.rb +27 -25
- data/lib/solargraph/language_server/message/workspace/workspace_symbol.rb +25 -23
- data/lib/solargraph/library.rb +729 -683
- data/lib/solargraph/location.rb +87 -82
- data/lib/solargraph/logging.rb +57 -37
- data/lib/solargraph/parser/comment_ripper.rb +76 -69
- data/lib/solargraph/parser/flow_sensitive_typing.rb +483 -255
- data/lib/solargraph/parser/node_processor/base.rb +122 -92
- data/lib/solargraph/parser/node_processor.rb +63 -62
- data/lib/solargraph/parser/parser_gem/class_methods.rb +167 -149
- data/lib/solargraph/parser/parser_gem/node_chainer.rb +191 -166
- data/lib/solargraph/parser/parser_gem/node_methods.rb +506 -486
- data/lib/solargraph/parser/parser_gem/node_processors/and_node.rb +22 -22
- data/lib/solargraph/parser/parser_gem/node_processors/args_node.rb +61 -59
- data/lib/solargraph/parser/parser_gem/node_processors/begin_node.rb +24 -15
- data/lib/solargraph/parser/parser_gem/node_processors/block_node.rb +46 -46
- data/lib/solargraph/parser/parser_gem/node_processors/def_node.rb +60 -53
- data/lib/solargraph/parser/parser_gem/node_processors/if_node.rb +53 -23
- data/lib/solargraph/parser/parser_gem/node_processors/ivasgn_node.rb +41 -40
- data/lib/solargraph/parser/parser_gem/node_processors/lvasgn_node.rb +30 -29
- data/lib/solargraph/parser/parser_gem/node_processors/masgn_node.rb +61 -59
- data/lib/solargraph/parser/parser_gem/node_processors/opasgn_node.rb +98 -98
- data/lib/solargraph/parser/parser_gem/node_processors/or_node.rb +22 -0
- data/lib/solargraph/parser/parser_gem/node_processors/orasgn_node.rb +17 -17
- data/lib/solargraph/parser/parser_gem/node_processors/resbody_node.rb +39 -38
- data/lib/solargraph/parser/parser_gem/node_processors/sclass_node.rb +53 -52
- data/lib/solargraph/parser/parser_gem/node_processors/send_node.rb +296 -291
- data/lib/solargraph/parser/parser_gem/node_processors/when_node.rb +23 -0
- data/lib/solargraph/parser/parser_gem/node_processors/while_node.rb +33 -29
- data/lib/solargraph/parser/parser_gem/node_processors.rb +74 -70
- data/lib/solargraph/parser/region.rb +75 -69
- data/lib/solargraph/parser/snippet.rb +17 -17
- data/lib/solargraph/pin/base.rb +761 -729
- data/lib/solargraph/pin/base_variable.rb +418 -126
- data/lib/solargraph/pin/block.rb +126 -104
- data/lib/solargraph/pin/breakable.rb +13 -9
- data/lib/solargraph/pin/callable.rb +278 -231
- data/lib/solargraph/pin/closure.rb +68 -72
- data/lib/solargraph/pin/common.rb +94 -79
- data/lib/solargraph/pin/compound_statement.rb +55 -0
- data/lib/solargraph/pin/conversions.rb +124 -123
- data/lib/solargraph/pin/delegated_method.rb +131 -120
- data/lib/solargraph/pin/documenting.rb +115 -114
- data/lib/solargraph/pin/instance_variable.rb +38 -34
- data/lib/solargraph/pin/keyword.rb +16 -20
- data/lib/solargraph/pin/local_variable.rb +31 -75
- data/lib/solargraph/pin/method.rb +720 -672
- data/lib/solargraph/pin/method_alias.rb +42 -34
- data/lib/solargraph/pin/namespace.rb +121 -115
- data/lib/solargraph/pin/parameter.rb +338 -275
- data/lib/solargraph/pin/proxy_type.rb +40 -39
- data/lib/solargraph/pin/reference/override.rb +47 -47
- data/lib/solargraph/pin/reference/superclass.rb +17 -15
- data/lib/solargraph/pin/reference.rb +41 -39
- data/lib/solargraph/pin/search.rb +62 -61
- data/lib/solargraph/pin/signature.rb +69 -61
- data/lib/solargraph/pin/symbol.rb +53 -53
- data/lib/solargraph/pin/until.rb +18 -18
- data/lib/solargraph/pin/while.rb +18 -18
- data/lib/solargraph/pin.rb +46 -44
- data/lib/solargraph/pin_cache.rb +665 -245
- data/lib/solargraph/position.rb +118 -119
- data/lib/solargraph/range.rb +112 -112
- data/lib/solargraph/rbs_map/conversions.rb +846 -823
- data/lib/solargraph/rbs_map/core_map.rb +65 -58
- data/lib/solargraph/rbs_map/stdlib_map.rb +72 -43
- data/lib/solargraph/rbs_map.rb +217 -163
- data/lib/solargraph/shell.rb +397 -352
- data/lib/solargraph/source/chain/call.rb +372 -337
- data/lib/solargraph/source/chain/constant.rb +28 -26
- data/lib/solargraph/source/chain/hash.rb +35 -34
- data/lib/solargraph/source/chain/if.rb +29 -28
- data/lib/solargraph/source/chain/instance_variable.rb +34 -13
- data/lib/solargraph/source/chain/literal.rb +53 -48
- data/lib/solargraph/source/chain/or.rb +31 -23
- data/lib/solargraph/source/chain.rb +294 -291
- data/lib/solargraph/source/change.rb +89 -82
- data/lib/solargraph/source/cursor.rb +172 -166
- data/lib/solargraph/source/source_chainer.rb +204 -194
- data/lib/solargraph/source/updater.rb +59 -55
- data/lib/solargraph/source.rb +524 -498
- data/lib/solargraph/source_map/clip.rb +237 -226
- data/lib/solargraph/source_map/data.rb +37 -34
- data/lib/solargraph/source_map/mapper.rb +282 -259
- data/lib/solargraph/source_map.rb +220 -212
- data/lib/solargraph/type_checker/problem.rb +34 -32
- data/lib/solargraph/type_checker/rules.rb +157 -84
- data/lib/solargraph/type_checker.rb +895 -814
- data/lib/solargraph/version.rb +1 -1
- data/lib/solargraph/workspace/config.rb +257 -255
- data/lib/solargraph/workspace/gemspecs.rb +367 -0
- data/lib/solargraph/workspace/require_paths.rb +98 -97
- data/lib/solargraph/workspace.rb +362 -220
- data/lib/solargraph/yard_map/helpers.rb +45 -44
- data/lib/solargraph/yard_map/mapper/to_method.rb +134 -130
- data/lib/solargraph/yard_map/mapper/to_namespace.rb +32 -31
- data/lib/solargraph/yard_map/mapper.rb +84 -79
- data/lib/solargraph/yardoc.rb +97 -87
- data/lib/solargraph.rb +126 -105
- data/rbs/fills/rubygems/0/dependency.rbs +193 -0
- data/rbs/fills/tuple/tuple.rbs +28 -0
- data/rbs/shims/ast/0/node.rbs +5 -0
- data/rbs/shims/diff-lcs/1.5/diff-lcs.rbs +11 -0
- data/rbs_collection.yaml +1 -1
- data/solargraph.gemspec +2 -1
- metadata +22 -17
- data/lib/solargraph/type_checker/checks.rb +0 -124
- data/lib/solargraph/type_checker/param_def.rb +0 -37
- data/lib/solargraph/yard_map/to_method.rb +0 -89
- data/sig/shims/ast/0/node.rbs +0 -5
- /data/{sig → rbs}/shims/ast/2.4/.rbs_meta.yaml +0 -0
- /data/{sig → rbs}/shims/ast/2.4/ast.rbs +0 -0
- /data/{sig → rbs}/shims/parser/3.2.0.1/builders/default.rbs +0 -0
- /data/{sig → rbs}/shims/parser/3.2.0.1/manifest.yaml +0 -0
- /data/{sig → rbs}/shims/parser/3.2.0.1/parser.rbs +0 -0
- /data/{sig → rbs}/shims/parser/3.2.0.1/polyfill.rbs +0 -0
- /data/{sig → rbs}/shims/thor/1.2.0.1/.rbs_meta.yaml +0 -0
- /data/{sig → rbs}/shims/thor/1.2.0.1/manifest.yaml +0 -0
- /data/{sig → rbs}/shims/thor/1.2.0.1/thor.rbs +0 -0
data/lib/solargraph/location.rb
CHANGED
|
@@ -1,82 +1,87 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
module Solargraph
|
|
4
|
-
# A pointer to a section of source text identified by its filename
|
|
5
|
-
# and Range.
|
|
6
|
-
#
|
|
7
|
-
class Location
|
|
8
|
-
include Equality
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
# @param
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
def
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Solargraph
|
|
4
|
+
# A pointer to a section of source text identified by its filename
|
|
5
|
+
# and Range.
|
|
6
|
+
#
|
|
7
|
+
class Location
|
|
8
|
+
include Equality
|
|
9
|
+
include Comparable
|
|
10
|
+
|
|
11
|
+
# @return [String]
|
|
12
|
+
attr_reader :filename
|
|
13
|
+
|
|
14
|
+
# @return [Solargraph::Range]
|
|
15
|
+
attr_reader :range
|
|
16
|
+
|
|
17
|
+
# @param filename [String, nil]
|
|
18
|
+
# @param range [Solargraph::Range]
|
|
19
|
+
def initialize filename, range
|
|
20
|
+
raise "Use nil to represent no-file" if filename&.empty?
|
|
21
|
+
|
|
22
|
+
@filename = filename
|
|
23
|
+
@range = range
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
protected def equality_fields
|
|
27
|
+
[filename, range]
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
# @param other [self]
|
|
31
|
+
def <=>(other)
|
|
32
|
+
return nil unless other.is_a?(Location)
|
|
33
|
+
if filename == other.filename
|
|
34
|
+
range <=> other.range
|
|
35
|
+
else
|
|
36
|
+
filename <=> other.filename
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
def rbs?
|
|
41
|
+
filename.end_with?('.rbs')
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
# @param location [self]
|
|
45
|
+
def contain? location
|
|
46
|
+
range.contain?(location.range.start) && range.contain?(location.range.ending) && filename == location.filename
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
def inspect
|
|
50
|
+
"<#{self.class.name}: filename=#{filename}, range=#{range.inspect}>"
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
def to_s
|
|
54
|
+
inspect
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
# @return [Hash]
|
|
58
|
+
def to_hash
|
|
59
|
+
{
|
|
60
|
+
filename: filename,
|
|
61
|
+
range: range.to_hash
|
|
62
|
+
}
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
# @param node [Parser::AST::Node, nil]
|
|
66
|
+
# @return [Location, nil]
|
|
67
|
+
def self.from_node(node)
|
|
68
|
+
return nil if node.nil? || node.loc.nil?
|
|
69
|
+
filename = node.loc.expression.source_buffer.name
|
|
70
|
+
# @sg-ignore flow sensitive typing needs to create separate ranges for postfix if
|
|
71
|
+
filename = nil if filename.empty?
|
|
72
|
+
range = Range.from_node(node)
|
|
73
|
+
# @sg-ignore Need to add nil check here
|
|
74
|
+
self.new(filename, range)
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
# @param other [BasicObject]
|
|
78
|
+
def == other
|
|
79
|
+
return false unless other.is_a?(Location)
|
|
80
|
+
filename == other.filename and range == other.range
|
|
81
|
+
end
|
|
82
|
+
|
|
83
|
+
def inspect
|
|
84
|
+
"#<#{self.class} #{filename}, #{range.inspect}>"
|
|
85
|
+
end
|
|
86
|
+
end
|
|
87
|
+
end
|
data/lib/solargraph/logging.rb
CHANGED
|
@@ -1,37 +1,57 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
require 'logger'
|
|
4
|
-
|
|
5
|
-
module Solargraph
|
|
6
|
-
module Logging
|
|
7
|
-
DEFAULT_LOG_LEVEL = Logger::WARN
|
|
8
|
-
|
|
9
|
-
LOG_LEVELS = {
|
|
10
|
-
'warn' => Logger::WARN,
|
|
11
|
-
'info' => Logger::INFO,
|
|
12
|
-
'debug' => Logger::DEBUG
|
|
13
|
-
}
|
|
14
|
-
configured_level = ENV.fetch('SOLARGRAPH_LOG', nil)
|
|
15
|
-
level = if LOG_LEVELS.keys.include?(configured_level)
|
|
16
|
-
LOG_LEVELS.fetch(configured_level)
|
|
17
|
-
else
|
|
18
|
-
if configured_level
|
|
19
|
-
warn "Invalid value for SOLARGRAPH_LOG: #{configured_level.inspect} - " \
|
|
20
|
-
"valid values are #{LOG_LEVELS.keys}"
|
|
21
|
-
end
|
|
22
|
-
DEFAULT_LOG_LEVEL
|
|
23
|
-
end
|
|
24
|
-
@@logger = Logger.new(STDERR, level: level)
|
|
25
|
-
# @sg-ignore Fix cvar issue
|
|
26
|
-
@@logger.formatter = proc do |severity, datetime, progname, msg|
|
|
27
|
-
"[#{severity}] #{msg}\n"
|
|
28
|
-
end
|
|
29
|
-
|
|
30
|
-
module_function
|
|
31
|
-
|
|
32
|
-
#
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'logger'
|
|
4
|
+
|
|
5
|
+
module Solargraph
|
|
6
|
+
module Logging
|
|
7
|
+
DEFAULT_LOG_LEVEL = Logger::WARN
|
|
8
|
+
|
|
9
|
+
LOG_LEVELS = {
|
|
10
|
+
'warn' => Logger::WARN,
|
|
11
|
+
'info' => Logger::INFO,
|
|
12
|
+
'debug' => Logger::DEBUG
|
|
13
|
+
}
|
|
14
|
+
configured_level = ENV.fetch('SOLARGRAPH_LOG', nil)
|
|
15
|
+
level = if LOG_LEVELS.keys.include?(configured_level)
|
|
16
|
+
LOG_LEVELS.fetch(configured_level)
|
|
17
|
+
else
|
|
18
|
+
if configured_level
|
|
19
|
+
warn "Invalid value for SOLARGRAPH_LOG: #{configured_level.inspect} - " \
|
|
20
|
+
"valid values are #{LOG_LEVELS.keys}"
|
|
21
|
+
end
|
|
22
|
+
DEFAULT_LOG_LEVEL
|
|
23
|
+
end
|
|
24
|
+
@@logger = Logger.new(STDERR, level: level)
|
|
25
|
+
# @sg-ignore Fix cvar issue
|
|
26
|
+
@@logger.formatter = proc do |severity, datetime, progname, msg|
|
|
27
|
+
"[#{severity}] #{msg}\n"
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
module_function
|
|
31
|
+
|
|
32
|
+
# override this in your class to temporarily set a custom
|
|
33
|
+
# filtering log level for the class (e.g., suppress any debug
|
|
34
|
+
# message by setting it to :info even if it is set elsewhere, or
|
|
35
|
+
# show existing debug messages by setting to :debug).
|
|
36
|
+
#
|
|
37
|
+
# @return [Symbol]
|
|
38
|
+
def log_level
|
|
39
|
+
:warn
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
# @return [Logger]
|
|
43
|
+
def logger
|
|
44
|
+
if LOG_LEVELS[log_level.to_s] == DEFAULT_LOG_LEVEL
|
|
45
|
+
@@logger
|
|
46
|
+
else
|
|
47
|
+
new_log_level = LOG_LEVELS[log_level.to_s]
|
|
48
|
+
logger = Logger.new(STDERR, level: new_log_level)
|
|
49
|
+
|
|
50
|
+
# @sg-ignore Wrong argument type for Logger#formatter=: arg_0
|
|
51
|
+
# expected nil, received Logger::_Formatter, nil
|
|
52
|
+
logger.formatter = @@logger.formatter
|
|
53
|
+
logger
|
|
54
|
+
end
|
|
55
|
+
end
|
|
56
|
+
end
|
|
57
|
+
end
|
|
@@ -1,69 +1,76 @@
|
|
|
1
|
-
require 'ripper'
|
|
2
|
-
|
|
3
|
-
module Solargraph
|
|
4
|
-
module Parser
|
|
5
|
-
class CommentRipper < Ripper::SexpBuilderPP
|
|
6
|
-
# @!override Ripper::SexpBuilder#on_embdoc_beg
|
|
7
|
-
# @return [Array(Symbol, String, Array)]
|
|
8
|
-
# @!override Ripper::SexpBuilder#on_embdoc
|
|
9
|
-
# @return [Array(Symbol, String, Array)]
|
|
10
|
-
# @!override Ripper::SexpBuilder#on_embdoc_end
|
|
11
|
-
# @return [Array(Symbol, String, Array)]
|
|
12
|
-
|
|
13
|
-
# @param src [String]
|
|
14
|
-
# @param filename [String]
|
|
15
|
-
# @param lineno [Integer]
|
|
16
|
-
def initialize src, filename = '(ripper)', lineno = 0
|
|
17
|
-
super
|
|
18
|
-
@buffer = src
|
|
19
|
-
@buffer_lines = @buffer.lines
|
|
20
|
-
end
|
|
21
|
-
|
|
22
|
-
def on_comment *args
|
|
23
|
-
# @sg-ignore
|
|
24
|
-
# @type [Array(Symbol, String, Array([Integer, nil], [Integer, nil]))]
|
|
25
|
-
result = super
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
# @
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
result
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
result
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
@
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
end
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
1
|
+
require 'ripper'
|
|
2
|
+
|
|
3
|
+
module Solargraph
|
|
4
|
+
module Parser
|
|
5
|
+
class CommentRipper < Ripper::SexpBuilderPP
|
|
6
|
+
# @!override Ripper::SexpBuilder#on_embdoc_beg
|
|
7
|
+
# @return [Array(Symbol, String, Array)]
|
|
8
|
+
# @!override Ripper::SexpBuilder#on_embdoc
|
|
9
|
+
# @return [Array(Symbol, String, Array)]
|
|
10
|
+
# @!override Ripper::SexpBuilder#on_embdoc_end
|
|
11
|
+
# @return [Array(Symbol, String, Array)]
|
|
12
|
+
|
|
13
|
+
# @param src [String]
|
|
14
|
+
# @param filename [String]
|
|
15
|
+
# @param lineno [Integer]
|
|
16
|
+
def initialize src, filename = '(ripper)', lineno = 0
|
|
17
|
+
super
|
|
18
|
+
@buffer = src
|
|
19
|
+
@buffer_lines = @buffer.lines
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
def on_comment *args
|
|
23
|
+
# @sg-ignore
|
|
24
|
+
# @type [Array(Symbol, String, Array([Integer, nil], [Integer, nil]))]
|
|
25
|
+
result = super
|
|
26
|
+
# @sg-ignore Need to add nil check here
|
|
27
|
+
if @buffer_lines[result[2][0]][0..result[2][1]].strip =~ /^#/
|
|
28
|
+
chomped = result[1].chomp
|
|
29
|
+
if result[2][0] == 0 && chomped.encode('UTF-8', 'binary', invalid: :replace, undef: :replace, replace: '').match(/^#\s*frozen_string_literal:/)
|
|
30
|
+
chomped = '#'
|
|
31
|
+
end
|
|
32
|
+
@comments[result[2][0]] = Snippet.new(Range.from_to(result[2][0], result[2][1], result[2][0], result[2][1] + chomped.length), chomped)
|
|
33
|
+
end
|
|
34
|
+
result
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
# @param result [Array(Symbol, String, Array([Integer, nil], [Integer, nil]))]
|
|
38
|
+
# @return [void]
|
|
39
|
+
def create_snippet(result)
|
|
40
|
+
chomped = result[1].chomp
|
|
41
|
+
@comments[result[2][0]] = Snippet.new(Range.from_to(result[2][0] || 0, result[2][1] || 0, result[2][0] || 0, (result[2][1] || 0) + chomped.length), chomped)
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
# @sg-ignore @override is adding, not overriding
|
|
45
|
+
def on_embdoc_beg *args
|
|
46
|
+
result = super
|
|
47
|
+
# @sg-ignore @override is adding, not overriding
|
|
48
|
+
create_snippet(result)
|
|
49
|
+
result
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
# @sg-ignore @override is adding, not overriding
|
|
53
|
+
def on_embdoc *args
|
|
54
|
+
result = super
|
|
55
|
+
# @sg-ignore @override is adding, not overriding
|
|
56
|
+
create_snippet(result)
|
|
57
|
+
result
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
# @sg-ignore @override is adding, not overriding
|
|
61
|
+
def on_embdoc_end *args
|
|
62
|
+
result = super
|
|
63
|
+
# @sg-ignore @override is adding, not overriding
|
|
64
|
+
create_snippet(result)
|
|
65
|
+
result
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
# @return [Hash{Integer => Solargraph::Parser::Snippet}]
|
|
69
|
+
def parse
|
|
70
|
+
@comments = {}
|
|
71
|
+
super
|
|
72
|
+
@comments
|
|
73
|
+
end
|
|
74
|
+
end
|
|
75
|
+
end
|
|
76
|
+
end
|