solargraph 0.58.3 → 0.59.2
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 +12 -5
- data/.github/workflows/plugins.yml +54 -34
- data/.github/workflows/rspec.yml +15 -28
- data/.github/workflows/typecheck.yml +6 -3
- data/.rubocop.yml +38 -6
- data/.rubocop_todo.yml +53 -966
- data/CHANGELOG.md +24 -0
- data/Gemfile +3 -1
- data/README.md +3 -3
- data/Rakefile +26 -23
- data/bin/solargraph +2 -1
- data/lib/solargraph/api_map/cache.rb +3 -3
- data/lib/solargraph/api_map/constants.rb +12 -3
- data/lib/solargraph/api_map/index.rb +29 -18
- data/lib/solargraph/api_map/source_to_yard.rb +22 -9
- data/lib/solargraph/api_map/store.rb +40 -30
- data/lib/solargraph/api_map.rb +160 -78
- data/lib/solargraph/bench.rb +2 -3
- data/lib/solargraph/complex_type/conformance.rb +176 -0
- data/lib/solargraph/complex_type/type_methods.rb +31 -18
- data/lib/solargraph/complex_type/unique_type.rb +221 -63
- data/lib/solargraph/complex_type.rb +173 -59
- data/lib/solargraph/convention/active_support_concern.rb +111 -111
- data/lib/solargraph/convention/base.rb +50 -50
- data/lib/solargraph/convention/data_definition/data_assignment_node.rb +1 -1
- data/lib/solargraph/convention/data_definition/data_definition_node.rb +7 -5
- data/lib/solargraph/convention/data_definition.rb +5 -2
- data/lib/solargraph/convention/gemfile.rb +1 -1
- data/lib/solargraph/convention/gemspec.rb +1 -1
- data/lib/solargraph/convention/rakefile.rb +1 -1
- data/lib/solargraph/convention/struct_definition/struct_assignment_node.rb +2 -1
- data/lib/solargraph/convention/struct_definition/struct_definition_node.rb +4 -3
- data/lib/solargraph/convention/struct_definition.rb +8 -4
- data/lib/solargraph/convention.rb +2 -2
- data/lib/solargraph/converters/dd.rb +2 -0
- data/lib/solargraph/converters/dl.rb +2 -0
- data/lib/solargraph/converters/dt.rb +2 -0
- data/lib/solargraph/converters/misc.rb +2 -0
- data/lib/solargraph/diagnostics/require_not_found.rb +1 -0
- data/lib/solargraph/diagnostics/rubocop.rb +11 -10
- data/lib/solargraph/diagnostics/rubocop_helpers.rb +5 -3
- data/lib/solargraph/diagnostics/type_check.rb +11 -10
- data/lib/solargraph/diagnostics/update_errors.rb +4 -8
- data/lib/solargraph/diagnostics.rb +55 -55
- data/lib/solargraph/doc_map.rb +38 -39
- data/lib/solargraph/environ.rb +52 -52
- data/lib/solargraph/equality.rb +4 -4
- data/lib/solargraph/gem_pins.rb +4 -15
- data/lib/solargraph/language_server/error_codes.rb +10 -10
- data/lib/solargraph/language_server/host/diagnoser.rb +1 -1
- data/lib/solargraph/language_server/host/dispatch.rb +3 -3
- data/lib/solargraph/language_server/host/message_worker.rb +4 -3
- data/lib/solargraph/language_server/host/sources.rb +2 -1
- data/lib/solargraph/language_server/host.rb +35 -28
- data/lib/solargraph/language_server/message/base.rb +1 -1
- data/lib/solargraph/language_server/message/client/register_capability.rb +1 -3
- data/lib/solargraph/language_server/message/completion_item/resolve.rb +6 -8
- data/lib/solargraph/language_server/message/extended/check_gem_version.rb +12 -18
- data/lib/solargraph/language_server/message/extended/document.rb +1 -0
- data/lib/solargraph/language_server/message/extended/document_gems.rb +7 -7
- data/lib/solargraph/language_server/message/extended/download_core.rb +2 -1
- data/lib/solargraph/language_server/message/extended/environment.rb +25 -25
- data/lib/solargraph/language_server/message/extended/search.rb +1 -1
- data/lib/solargraph/language_server/message/initialize.rb +20 -14
- data/lib/solargraph/language_server/message/initialized.rb +28 -28
- data/lib/solargraph/language_server/message/text_document/completion.rb +10 -8
- data/lib/solargraph/language_server/message/text_document/definition.rb +41 -32
- data/lib/solargraph/language_server/message/text_document/document_highlight.rb +17 -10
- data/lib/solargraph/language_server/message/text_document/document_symbol.rb +29 -19
- data/lib/solargraph/language_server/message/text_document/formatting.rb +8 -6
- data/lib/solargraph/language_server/message/text_document/hover.rb +5 -5
- data/lib/solargraph/language_server/message/text_document/prepare_rename.rb +13 -6
- data/lib/solargraph/language_server/message/text_document/references.rb +17 -10
- data/lib/solargraph/language_server/message/text_document/rename.rb +20 -13
- data/lib/solargraph/language_server/message/text_document/signature_help.rb +3 -2
- data/lib/solargraph/language_server/message/text_document/type_definition.rb +25 -17
- data/lib/solargraph/language_server/message/text_document.rb +28 -28
- data/lib/solargraph/language_server/message/workspace/did_change_configuration.rb +34 -28
- data/lib/solargraph/language_server/message/workspace/did_change_watched_files.rb +38 -30
- data/lib/solargraph/language_server/message/workspace/did_change_workspace_folders.rb +23 -17
- data/lib/solargraph/language_server/message/workspace/workspace_symbol.rb +27 -17
- data/lib/solargraph/language_server/message.rb +1 -1
- data/lib/solargraph/language_server/progress.rb +143 -143
- data/lib/solargraph/language_server/request.rb +4 -2
- data/lib/solargraph/language_server/transport/adapter.rb +68 -68
- data/lib/solargraph/language_server/transport/data_reader.rb +11 -13
- data/lib/solargraph/language_server/uri_helpers.rb +2 -2
- data/lib/solargraph/language_server.rb +20 -20
- data/lib/solargraph/library.rb +57 -38
- data/lib/solargraph/location.rb +17 -14
- data/lib/solargraph/logging.rb +22 -4
- data/lib/solargraph/page.rb +1 -1
- data/lib/solargraph/parser/comment_ripper.rb +19 -4
- data/lib/solargraph/parser/flow_sensitive_typing.rb +324 -108
- data/lib/solargraph/parser/node_processor/base.rb +34 -4
- data/lib/solargraph/parser/node_processor.rb +8 -7
- data/lib/solargraph/parser/parser_gem/class_methods.rb +30 -14
- data/lib/solargraph/parser/parser_gem/flawed_builder.rb +1 -1
- data/lib/solargraph/parser/parser_gem/node_chainer.rb +51 -25
- data/lib/solargraph/parser/parser_gem/node_methods.rb +181 -73
- data/lib/solargraph/parser/parser_gem/node_processors/alias_node.rb +24 -24
- data/lib/solargraph/parser/parser_gem/node_processors/and_node.rb +4 -4
- data/lib/solargraph/parser/parser_gem/node_processors/args_node.rb +13 -11
- data/lib/solargraph/parser/parser_gem/node_processors/begin_node.rb +9 -0
- data/lib/solargraph/parser/parser_gem/node_processors/block_node.rb +11 -12
- data/lib/solargraph/parser/parser_gem/node_processors/casgn_node.rb +36 -36
- data/lib/solargraph/parser/parser_gem/node_processors/cvasgn_node.rb +24 -24
- data/lib/solargraph/parser/parser_gem/node_processors/def_node.rb +10 -3
- data/lib/solargraph/parser/parser_gem/node_processors/defs_node.rb +9 -8
- data/lib/solargraph/parser/parser_gem/node_processors/gvasgn_node.rb +24 -24
- data/lib/solargraph/parser/parser_gem/node_processors/if_node.rb +36 -6
- data/lib/solargraph/parser/parser_gem/node_processors/ivasgn_node.rb +5 -3
- data/lib/solargraph/parser/parser_gem/node_processors/lvasgn_node.rb +1 -0
- data/lib/solargraph/parser/parser_gem/node_processors/masgn_node.rb +3 -1
- data/lib/solargraph/parser/parser_gem/node_processors/namespace_node.rb +40 -40
- data/lib/solargraph/parser/parser_gem/node_processors/opasgn_node.rb +3 -3
- data/lib/solargraph/parser/parser_gem/node_processors/or_node.rb +22 -0
- data/lib/solargraph/parser/parser_gem/node_processors/orasgn_node.rb +1 -1
- data/lib/solargraph/parser/parser_gem/node_processors/resbody_node.rb +2 -1
- data/lib/solargraph/parser/parser_gem/node_processors/sclass_node.rb +4 -5
- data/lib/solargraph/parser/parser_gem/node_processors/send_node.rb +124 -113
- data/lib/solargraph/parser/parser_gem/node_processors/sym_node.rb +20 -20
- data/lib/solargraph/parser/parser_gem/node_processors/until_node.rb +1 -1
- data/lib/solargraph/parser/parser_gem/node_processors/when_node.rb +23 -0
- data/lib/solargraph/parser/parser_gem/node_processors/while_node.rb +6 -2
- data/lib/solargraph/parser/parser_gem/node_processors.rb +4 -0
- data/lib/solargraph/parser/parser_gem.rb +2 -0
- data/lib/solargraph/parser/region.rb +9 -3
- data/lib/solargraph/parser/snippet.rb +3 -1
- data/lib/solargraph/parser.rb +2 -0
- data/lib/solargraph/pin/base.rb +126 -82
- data/lib/solargraph/pin/base_variable.rb +273 -24
- data/lib/solargraph/pin/block.rb +29 -6
- data/lib/solargraph/pin/breakable.rb +7 -1
- data/lib/solargraph/pin/callable.rb +65 -21
- data/lib/solargraph/pin/closure.rb +7 -10
- data/lib/solargraph/pin/common.rb +24 -6
- data/lib/solargraph/pin/compound_statement.rb +55 -0
- data/lib/solargraph/pin/constant.rb +3 -5
- data/lib/solargraph/pin/conversions.rb +10 -4
- data/lib/solargraph/pin/delegated_method.rb +19 -8
- data/lib/solargraph/pin/documenting.rb +4 -2
- data/lib/solargraph/pin/instance_variable.rb +5 -1
- data/lib/solargraph/pin/keyword.rb +0 -4
- data/lib/solargraph/pin/local_variable.rb +15 -59
- data/lib/solargraph/pin/method.rb +158 -104
- data/lib/solargraph/pin/method_alias.rb +8 -0
- data/lib/solargraph/pin/namespace.rb +19 -12
- data/lib/solargraph/pin/parameter.rb +102 -36
- data/lib/solargraph/pin/proxy_type.rb +4 -1
- data/lib/solargraph/pin/reference/override.rb +1 -1
- data/lib/solargraph/pin/reference/require.rb +14 -14
- data/lib/solargraph/pin/reference/superclass.rb +2 -0
- data/lib/solargraph/pin/reference/type_alias.rb +16 -0
- data/lib/solargraph/pin/reference.rb +20 -0
- data/lib/solargraph/pin/search.rb +8 -7
- data/lib/solargraph/pin/signature.rb +15 -12
- data/lib/solargraph/pin/singleton.rb +11 -11
- data/lib/solargraph/pin/symbol.rb +2 -1
- data/lib/solargraph/pin/until.rb +2 -4
- data/lib/solargraph/pin/while.rb +2 -4
- data/lib/solargraph/pin.rb +2 -0
- data/lib/solargraph/pin_cache.rb +22 -19
- data/lib/solargraph/position.rb +17 -10
- data/lib/solargraph/range.rb +16 -15
- data/lib/solargraph/rbs_map/conversions.rb +367 -231
- data/lib/solargraph/rbs_map/core_fills.rb +18 -11
- data/lib/solargraph/rbs_map/core_map.rb +24 -17
- data/lib/solargraph/rbs_map/stdlib_map.rb +33 -5
- data/lib/solargraph/rbs_map.rb +76 -32
- data/lib/solargraph/server_methods.rb +1 -1
- data/lib/solargraph/shell.rb +258 -66
- data/lib/solargraph/source/chain/array.rb +3 -12
- data/lib/solargraph/source/chain/block_symbol.rb +13 -13
- data/lib/solargraph/source/chain/block_variable.rb +13 -13
- data/lib/solargraph/source/chain/call.rb +96 -56
- data/lib/solargraph/source/chain/class_variable.rb +1 -1
- data/lib/solargraph/source/chain/constant.rb +5 -1
- data/lib/solargraph/source/chain/global_variable.rb +1 -1
- data/lib/solargraph/source/chain/hash.rb +8 -5
- data/lib/solargraph/source/chain/head.rb +19 -19
- data/lib/solargraph/source/chain/if.rb +12 -10
- data/lib/solargraph/source/chain/instance_variable.rb +24 -1
- data/lib/solargraph/source/chain/link.rb +12 -22
- data/lib/solargraph/source/chain/literal.rb +22 -15
- data/lib/solargraph/source/chain/or.rb +10 -4
- data/lib/solargraph/source/chain/q_call.rb +2 -0
- data/lib/solargraph/source/chain/variable.rb +3 -1
- data/lib/solargraph/source/chain/z_super.rb +1 -3
- data/lib/solargraph/source/chain.rb +51 -38
- data/lib/solargraph/source/change.rb +12 -5
- data/lib/solargraph/source/cursor.rb +33 -18
- data/lib/solargraph/source/encoding_fixes.rb +6 -7
- data/lib/solargraph/source/source_chainer.rb +56 -32
- data/lib/solargraph/source/updater.rb +5 -1
- data/lib/solargraph/source.rb +59 -35
- data/lib/solargraph/source_map/clip.rb +54 -30
- data/lib/solargraph/source_map/data.rb +4 -1
- data/lib/solargraph/source_map/mapper.rb +69 -42
- data/lib/solargraph/source_map.rb +21 -9
- data/lib/solargraph/type_checker/problem.rb +3 -1
- data/lib/solargraph/type_checker/rules.rb +81 -8
- data/lib/solargraph/type_checker.rb +196 -122
- data/lib/solargraph/version.rb +1 -1
- data/lib/solargraph/workspace/config.rb +14 -11
- data/lib/solargraph/workspace/gemspecs.rb +367 -0
- data/lib/solargraph/workspace/require_paths.rb +1 -0
- data/lib/solargraph/workspace.rb +50 -28
- data/lib/solargraph/yard_map/cache.rb +25 -25
- data/lib/solargraph/yard_map/helpers.rb +8 -3
- data/lib/solargraph/yard_map/mapper/to_constant.rb +28 -28
- data/lib/solargraph/yard_map/mapper/to_method.rb +13 -7
- data/lib/solargraph/yard_map/mapper/to_namespace.rb +2 -1
- data/lib/solargraph/yard_map/mapper.rb +13 -8
- data/lib/solargraph/yard_map.rb +17 -18
- data/lib/solargraph/yard_tags.rb +2 -2
- data/lib/solargraph/yardoc.rb +7 -4
- data/lib/solargraph.rb +33 -10
- data/rbs/fills/rubygems/0/dependency.rbs +193 -0
- data/rbs/shims/ast/0/node.rbs +1 -1
- data/rbs/shims/diff-lcs/1.5/diff-lcs.rbs +11 -0
- data/solargraph.gemspec +37 -35
- metadata +41 -42
- 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/rbs/fills/tuple/tuple.rbs +0 -149
|
@@ -1,68 +1,68 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
require 'backport'
|
|
4
|
-
|
|
5
|
-
module Solargraph
|
|
6
|
-
module LanguageServer
|
|
7
|
-
module Transport
|
|
8
|
-
# A common module for running language servers in Backport.
|
|
9
|
-
#
|
|
10
|
-
module Adapter
|
|
11
|
-
# This runs in the context of Backport::Adapter, which
|
|
12
|
-
# provides write() - but if we didn't hide this behind a parse
|
|
13
|
-
# tag, it would override the one in the class.
|
|
14
|
-
#
|
|
15
|
-
# @!method write(text)
|
|
16
|
-
# @abstract
|
|
17
|
-
# Write the change to the specified text.
|
|
18
|
-
# @param text [String] The text to be changed.
|
|
19
|
-
# @return [String] The updated text.
|
|
20
|
-
|
|
21
|
-
# @return [void]
|
|
22
|
-
def opening
|
|
23
|
-
@host = Solargraph::LanguageServer::Host.new
|
|
24
|
-
@host.add_observer self
|
|
25
|
-
@host.start
|
|
26
|
-
@data_reader = Solargraph::LanguageServer::Transport::DataReader.new
|
|
27
|
-
@data_reader.set_message_handler do |message|
|
|
28
|
-
process message
|
|
29
|
-
end
|
|
30
|
-
end
|
|
31
|
-
|
|
32
|
-
# @return [void]
|
|
33
|
-
def closing
|
|
34
|
-
@host.stop
|
|
35
|
-
end
|
|
36
|
-
|
|
37
|
-
# @param data [String]
|
|
38
|
-
# @return [void]
|
|
39
|
-
def receiving data
|
|
40
|
-
@data_reader.receive data
|
|
41
|
-
end
|
|
42
|
-
|
|
43
|
-
# @return [void]
|
|
44
|
-
def update
|
|
45
|
-
if @host.stopped?
|
|
46
|
-
shutdown
|
|
47
|
-
else
|
|
48
|
-
tmp = @host.flush
|
|
49
|
-
write tmp unless tmp.empty?
|
|
50
|
-
end
|
|
51
|
-
end
|
|
52
|
-
|
|
53
|
-
private
|
|
54
|
-
|
|
55
|
-
# @param request [Hash]
|
|
56
|
-
# @return [void]
|
|
57
|
-
def process request
|
|
58
|
-
@host.process(request)
|
|
59
|
-
end
|
|
60
|
-
|
|
61
|
-
# @return [void]
|
|
62
|
-
def shutdown
|
|
63
|
-
Backport.stop unless @host.options['transport'] == 'external'
|
|
64
|
-
end
|
|
65
|
-
end
|
|
66
|
-
end
|
|
67
|
-
end
|
|
68
|
-
end
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'backport'
|
|
4
|
+
|
|
5
|
+
module Solargraph
|
|
6
|
+
module LanguageServer
|
|
7
|
+
module Transport
|
|
8
|
+
# A common module for running language servers in Backport.
|
|
9
|
+
#
|
|
10
|
+
module Adapter
|
|
11
|
+
# This runs in the context of Backport::Adapter, which
|
|
12
|
+
# provides write() - but if we didn't hide this behind a parse
|
|
13
|
+
# tag, it would override the one in the class.
|
|
14
|
+
#
|
|
15
|
+
# @!method write(text)
|
|
16
|
+
# @abstract
|
|
17
|
+
# Write the change to the specified text.
|
|
18
|
+
# @param text [String] The text to be changed.
|
|
19
|
+
# @return [String] The updated text.
|
|
20
|
+
|
|
21
|
+
# @return [void]
|
|
22
|
+
def opening
|
|
23
|
+
@host = Solargraph::LanguageServer::Host.new
|
|
24
|
+
@host.add_observer self
|
|
25
|
+
@host.start
|
|
26
|
+
@data_reader = Solargraph::LanguageServer::Transport::DataReader.new
|
|
27
|
+
@data_reader.set_message_handler do |message|
|
|
28
|
+
process message
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
# @return [void]
|
|
33
|
+
def closing
|
|
34
|
+
@host.stop
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
# @param data [String]
|
|
38
|
+
# @return [void]
|
|
39
|
+
def receiving data
|
|
40
|
+
@data_reader.receive data
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
# @return [void]
|
|
44
|
+
def update
|
|
45
|
+
if @host.stopped?
|
|
46
|
+
shutdown
|
|
47
|
+
else
|
|
48
|
+
tmp = @host.flush
|
|
49
|
+
write tmp unless tmp.empty?
|
|
50
|
+
end
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
private
|
|
54
|
+
|
|
55
|
+
# @param request [Hash]
|
|
56
|
+
# @return [void]
|
|
57
|
+
def process request
|
|
58
|
+
@host.process(request)
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
# @return [void]
|
|
62
|
+
def shutdown
|
|
63
|
+
Backport.stop unless @host.options['transport'] == 'external'
|
|
64
|
+
end
|
|
65
|
+
end
|
|
66
|
+
end
|
|
67
|
+
end
|
|
68
|
+
end
|
|
@@ -33,8 +33,8 @@ module Solargraph
|
|
|
33
33
|
@buffer.concat char
|
|
34
34
|
if @in_header
|
|
35
35
|
prepare_to_parse_message if @buffer.end_with?("\r\n\r\n")
|
|
36
|
-
|
|
37
|
-
parse_message_from_buffer
|
|
36
|
+
elsif @buffer.bytesize == @content_length
|
|
37
|
+
parse_message_from_buffer
|
|
38
38
|
end
|
|
39
39
|
end
|
|
40
40
|
end
|
|
@@ -56,17 +56,15 @@ module Solargraph
|
|
|
56
56
|
|
|
57
57
|
# @return [void]
|
|
58
58
|
def parse_message_from_buffer
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
@content_length = 0
|
|
69
|
-
end
|
|
59
|
+
msg = JSON.parse(@buffer)
|
|
60
|
+
@message_handler&.call msg
|
|
61
|
+
rescue JSON::ParserError => e
|
|
62
|
+
Solargraph::Logging.logger.warn "Failed to parse request: #{e.message}"
|
|
63
|
+
Solargraph::Logging.logger.debug "Buffer: #{@buffer}"
|
|
64
|
+
ensure
|
|
65
|
+
@buffer.clear
|
|
66
|
+
@in_header = true
|
|
67
|
+
@content_length = 0
|
|
70
68
|
end
|
|
71
69
|
end
|
|
72
70
|
end
|
|
@@ -14,7 +14,7 @@ module Solargraph
|
|
|
14
14
|
# @param uri [String]
|
|
15
15
|
# @return [String]
|
|
16
16
|
def uri_to_file uri
|
|
17
|
-
decode(uri).sub(
|
|
17
|
+
decode(uri).sub(%r{^file:(?://)?}, '').sub(%r{^/([a-z]:)}i, '\1')
|
|
18
18
|
end
|
|
19
19
|
|
|
20
20
|
# Convert a file path to a URI.
|
|
@@ -22,7 +22,7 @@ module Solargraph
|
|
|
22
22
|
# @param file [String]
|
|
23
23
|
# @return [String]
|
|
24
24
|
def file_to_uri file
|
|
25
|
-
"file://#{encode(file.gsub(/^([a-z]
|
|
25
|
+
"file://#{encode(file.gsub(/^([a-z]:)/i, '/\1'))}"
|
|
26
26
|
end
|
|
27
27
|
|
|
28
28
|
# Encode text to be used as a URI path component in LSP.
|
|
@@ -1,20 +1,20 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
require 'solargraph/language_server/error_codes'
|
|
4
|
-
require 'solargraph/language_server/completion_item_kinds'
|
|
5
|
-
require 'solargraph/language_server/symbol_kinds'
|
|
6
|
-
|
|
7
|
-
module Solargraph
|
|
8
|
-
# The LanguageServer namespace contains the classes and modules that compose
|
|
9
|
-
# concrete implementations of language servers.
|
|
10
|
-
#
|
|
11
|
-
module LanguageServer
|
|
12
|
-
autoload :Host, 'solargraph/language_server/host'
|
|
13
|
-
autoload :Message, 'solargraph/language_server/message'
|
|
14
|
-
autoload :UriHelpers, 'solargraph/language_server/uri_helpers'
|
|
15
|
-
autoload :MessageTypes, 'solargraph/language_server/message_types'
|
|
16
|
-
autoload :Request, 'solargraph/language_server/request'
|
|
17
|
-
autoload :Transport, 'solargraph/language_server/transport'
|
|
18
|
-
autoload :Progress, 'solargraph/language_server/progress'
|
|
19
|
-
end
|
|
20
|
-
end
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'solargraph/language_server/error_codes'
|
|
4
|
+
require 'solargraph/language_server/completion_item_kinds'
|
|
5
|
+
require 'solargraph/language_server/symbol_kinds'
|
|
6
|
+
|
|
7
|
+
module Solargraph
|
|
8
|
+
# The LanguageServer namespace contains the classes and modules that compose
|
|
9
|
+
# concrete implementations of language servers.
|
|
10
|
+
#
|
|
11
|
+
module LanguageServer
|
|
12
|
+
autoload :Host, 'solargraph/language_server/host'
|
|
13
|
+
autoload :Message, 'solargraph/language_server/message'
|
|
14
|
+
autoload :UriHelpers, 'solargraph/language_server/uri_helpers'
|
|
15
|
+
autoload :MessageTypes, 'solargraph/language_server/message_types'
|
|
16
|
+
autoload :Request, 'solargraph/language_server/request'
|
|
17
|
+
autoload :Transport, 'solargraph/language_server/transport'
|
|
18
|
+
autoload :Progress, 'solargraph/language_server/progress'
|
|
19
|
+
end
|
|
20
|
+
end
|
data/lib/solargraph/library.rb
CHANGED
|
@@ -57,9 +57,11 @@ module Solargraph
|
|
|
57
57
|
# @param source [Source, nil]
|
|
58
58
|
# @return [void]
|
|
59
59
|
def attach source
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
60
|
+
# @type [String, nil]
|
|
61
|
+
current_filename = @current&.filename
|
|
62
|
+
if @current && (!source || current_filename != source.filename) && current_filename && source_map_hash.key?(current_filename) && !workspace.has_file?(current_filename)
|
|
63
|
+
source_map_hash.delete current_filename
|
|
64
|
+
source_map_external_require_hash.delete current_filename
|
|
63
65
|
@external_requires = nil
|
|
64
66
|
end
|
|
65
67
|
changed = source && @current != source
|
|
@@ -116,8 +118,8 @@ module Solargraph
|
|
|
116
118
|
# @return [Boolean] True if at least one file was added to the workspace.
|
|
117
119
|
def create_from_disk *filenames
|
|
118
120
|
sources = filenames
|
|
119
|
-
|
|
120
|
-
|
|
121
|
+
.reject { |filename| File.directory?(filename) || !File.exist?(filename) }
|
|
122
|
+
.map { |filename| Solargraph::Source.load_string(File.read(filename), filename) }
|
|
121
123
|
result = workspace.merge(*sources)
|
|
122
124
|
sources.each { |source| maybe_map source }
|
|
123
125
|
result
|
|
@@ -182,9 +184,12 @@ module Solargraph
|
|
|
182
184
|
if cursor.comment?
|
|
183
185
|
source = read(filename)
|
|
184
186
|
offset = Solargraph::Position.to_offset(source.code, Solargraph::Position.new(line, column))
|
|
185
|
-
|
|
186
|
-
|
|
187
|
+
# @type [MatchData, nil]
|
|
188
|
+
lft = source.code[0..(offset - 1)]&.match(/\[[a-z0-9_:<, ]*?([a-z0-9_:]*)\z/i)
|
|
189
|
+
# @type [MatchData, nil]
|
|
190
|
+
rgt = source.code[offset..]&.match(/^([a-z0-9_]*)(:[a-z0-9_:]*)?[\]>, ]/i)
|
|
187
191
|
if lft && rgt
|
|
192
|
+
# @sg-ignore lft and rgt are checked for nil above
|
|
188
193
|
tag = (lft[1] + rgt[1]).sub(/:+$/, '')
|
|
189
194
|
clip = mutex.synchronize { api_map.clip(cursor) }
|
|
190
195
|
clip.translate tag
|
|
@@ -246,16 +251,17 @@ module Solargraph
|
|
|
246
251
|
clip = mutex.synchronize { api_map.clip(cursor) }
|
|
247
252
|
pin = clip.define.first
|
|
248
253
|
return [] unless pin
|
|
254
|
+
|
|
249
255
|
result = []
|
|
250
256
|
files = if only
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
257
|
+
[api_map.source_map(filename)]
|
|
258
|
+
else
|
|
259
|
+
(workspace.sources + (@current ? [@current] : []))
|
|
260
|
+
end
|
|
255
261
|
files.uniq(&:filename).each do |source|
|
|
256
262
|
found = source.references(pin.name)
|
|
257
263
|
found.select! do |loc|
|
|
258
|
-
referenced = definitions_at(loc.filename, loc.range.ending.line, loc.range.ending.character)
|
|
264
|
+
referenced = definitions_at(loc.filename, loc.range.ending.line, loc.range.ending.character)&.first
|
|
259
265
|
referenced&.path == pin.path
|
|
260
266
|
end
|
|
261
267
|
if pin.path == 'Class#new'
|
|
@@ -271,8 +277,9 @@ module Solargraph
|
|
|
271
277
|
end
|
|
272
278
|
end
|
|
273
279
|
# HACK: for language clients that exclude special characters from the start of variable names
|
|
274
|
-
if strip && match = cursor.word.match(/^[^a-z0-9_]+/i)
|
|
280
|
+
if strip && (match = cursor.word.match(/^[^a-z0-9_]+/i))
|
|
275
281
|
found.map! do |loc|
|
|
282
|
+
# @sg-ignore Unresolved call to []
|
|
276
283
|
Solargraph::Location.new(loc.filename, Solargraph::Range.from_to(loc.range.start.line, loc.range.start.column + match[0].length, loc.range.ending.line, loc.range.ending.column))
|
|
277
284
|
end
|
|
278
285
|
end
|
|
@@ -299,7 +306,7 @@ module Solargraph
|
|
|
299
306
|
def locate_ref location
|
|
300
307
|
map = source_map_hash[location.filename]
|
|
301
308
|
return if map.nil?
|
|
302
|
-
pin = map.requires.select { |p| p.location
|
|
309
|
+
pin = map.requires.select { |p| p.location&.range&.contain?(location.range.start) }.first
|
|
303
310
|
return nil if pin.nil?
|
|
304
311
|
# @param full [String]
|
|
305
312
|
return_if_match = proc do |full|
|
|
@@ -309,8 +316,8 @@ module Solargraph
|
|
|
309
316
|
end
|
|
310
317
|
workspace.require_paths.each do |path|
|
|
311
318
|
full = File.join path, pin.name
|
|
312
|
-
return_if_match.(full)
|
|
313
|
-
return_if_match.(full <<
|
|
319
|
+
return_if_match.call(full)
|
|
320
|
+
return_if_match.call(full << '.rb')
|
|
314
321
|
end
|
|
315
322
|
nil
|
|
316
323
|
rescue FileNotFoundError
|
|
@@ -403,14 +410,17 @@ module Solargraph
|
|
|
403
410
|
workspace.config.reporters.each do |line|
|
|
404
411
|
if line == 'all!'
|
|
405
412
|
Diagnostics.reporters.each do |reporter_name|
|
|
406
|
-
|
|
413
|
+
r = Diagnostics.reporter(reporter_name)
|
|
414
|
+
repargs[r] ||= [] if r
|
|
407
415
|
end
|
|
408
416
|
else
|
|
409
417
|
args = line.split(':').map(&:strip)
|
|
410
418
|
name = args.shift
|
|
411
419
|
reporter = Diagnostics.reporter(name)
|
|
412
420
|
raise DiagnosticsError, "Diagnostics reporter #{name} does not exist" if reporter.nil?
|
|
421
|
+
# @sg-ignore Hash errors
|
|
413
422
|
repargs[reporter] ||= []
|
|
423
|
+
# @sg-ignore Hash errors
|
|
414
424
|
repargs[reporter].concat args
|
|
415
425
|
end
|
|
416
426
|
end
|
|
@@ -433,6 +443,7 @@ module Solargraph
|
|
|
433
443
|
source_maps: source_map_hash.values,
|
|
434
444
|
workspace: workspace,
|
|
435
445
|
external_requires: external_requires,
|
|
446
|
+
# @sg-ignore OK if @current.filename is nil
|
|
436
447
|
live_map: @current ? source_map_hash[@current.filename] : nil
|
|
437
448
|
)
|
|
438
449
|
end
|
|
@@ -472,7 +483,9 @@ module Solargraph
|
|
|
472
483
|
src = workspace.sources.find { |s| !source_map_hash.key?(s.filename) }
|
|
473
484
|
if src
|
|
474
485
|
Logging.logger.debug "Mapping #{src.filename}"
|
|
486
|
+
# @sg-ignore OK if src.filename is nil
|
|
475
487
|
source_map_hash[src.filename] = Solargraph::SourceMap.map(src)
|
|
488
|
+
# @sg-ignore OK if src.filename is nil
|
|
476
489
|
source_map_hash[src.filename]
|
|
477
490
|
else
|
|
478
491
|
false
|
|
@@ -482,7 +495,9 @@ module Solargraph
|
|
|
482
495
|
# @return [self]
|
|
483
496
|
def map!
|
|
484
497
|
workspace.sources.each do |src|
|
|
498
|
+
# @sg-ignore OK if src.filename is nil
|
|
485
499
|
source_map_hash[src.filename] = Solargraph::SourceMap.map(src)
|
|
500
|
+
# @sg-ignore OK if src.filename is nil
|
|
486
501
|
find_external_requires source_map_hash[src.filename]
|
|
487
502
|
end
|
|
488
503
|
self
|
|
@@ -509,14 +524,14 @@ module Solargraph
|
|
|
509
524
|
# @return [void]
|
|
510
525
|
def find_external_requires source_map
|
|
511
526
|
# @type [Set<String>]
|
|
512
|
-
new_set = source_map.requires.
|
|
513
|
-
# return if new_set == source_map_external_require_hash[source_map.filename]
|
|
527
|
+
new_set = source_map.requires.to_set(&:name)
|
|
514
528
|
_filenames = nil
|
|
515
|
-
filenames = ->{ _filenames ||= workspace.filenames.to_set }
|
|
529
|
+
filenames = -> { _filenames ||= workspace.filenames.to_set }
|
|
530
|
+
# @sg-ignore OK if source_map.filename is nil
|
|
516
531
|
source_map_external_require_hash[source_map.filename] = new_set.reject do |path|
|
|
517
532
|
workspace.require_paths.any? do |base|
|
|
518
533
|
full = File.join(base, path)
|
|
519
|
-
filenames[].include?(full) or filenames[].include?(full <<
|
|
534
|
+
filenames[].include?(full) or filenames[].include?(full << '.rb')
|
|
520
535
|
end
|
|
521
536
|
end
|
|
522
537
|
@external_requires = nil
|
|
@@ -550,23 +565,23 @@ module Solargraph
|
|
|
550
565
|
# @param error [FileNotFoundError]
|
|
551
566
|
# @return [nil]
|
|
552
567
|
def handle_file_not_found filename, error
|
|
553
|
-
|
|
554
|
-
|
|
555
|
-
|
|
556
|
-
else
|
|
557
|
-
raise error
|
|
558
|
-
end
|
|
568
|
+
raise error unless workspace.source(filename)
|
|
569
|
+
Solargraph.logger.debug "#{filename} is not cataloged in the ApiMap"
|
|
570
|
+
nil
|
|
559
571
|
end
|
|
560
572
|
|
|
561
573
|
# @param source [Source, nil]
|
|
562
574
|
# @return [void]
|
|
563
575
|
def maybe_map source
|
|
564
576
|
return unless source
|
|
577
|
+
# @sg-ignore Wrong argument type for Solargraph::Workspace#has_file?: filename expected String, received String, nil
|
|
565
578
|
return unless @current == source || workspace.has_file?(source.filename)
|
|
566
579
|
if source_map_hash.key?(source.filename)
|
|
567
580
|
new_map = Solargraph::SourceMap.map(source)
|
|
581
|
+
# @sg-ignore OK if source.filename is nil
|
|
568
582
|
source_map_hash[source.filename] = new_map
|
|
569
583
|
else
|
|
584
|
+
# @sg-ignore OK if source.filename is nil
|
|
570
585
|
source_map_hash[source.filename] = Solargraph::SourceMap.map(source)
|
|
571
586
|
end
|
|
572
587
|
end
|
|
@@ -632,26 +647,30 @@ module Solargraph
|
|
|
632
647
|
# @return [void]
|
|
633
648
|
def report_cache_progress gem_name, pending
|
|
634
649
|
@total ||= pending
|
|
650
|
+
# @sg-ignore Wrong argument type for Integer#>: arg_0 expected Numeric, received Integer, nil
|
|
635
651
|
@total = pending if pending > @total
|
|
652
|
+
# @sg-ignore Unresolved call to - on Integer, nil
|
|
636
653
|
finished = @total - pending
|
|
654
|
+
# @sg-ignore @total should always be an Integer
|
|
637
655
|
pct = if @total.zero?
|
|
638
|
-
|
|
639
|
-
|
|
640
|
-
|
|
641
|
-
|
|
642
|
-
|
|
656
|
+
0
|
|
657
|
+
else
|
|
658
|
+
# @sg-ignore Unresolved call to to_f
|
|
659
|
+
((finished.to_f / @total) * 100).to_i
|
|
660
|
+
end
|
|
661
|
+
message = "#{gem_name}#{" (+#{pending})" if pending.positive?}"
|
|
643
662
|
# "
|
|
644
|
-
|
|
645
|
-
@cache_progress.report(message, pct)
|
|
646
|
-
else
|
|
663
|
+
unless @cache_progress
|
|
647
664
|
@cache_progress = LanguageServer::Progress.new('Caching gem')
|
|
648
665
|
# If we don't send both a begin and a report, the progress notification
|
|
649
666
|
# might get stuck in the status bar forever
|
|
667
|
+
# @sg-ignore Unresolved call to begin
|
|
650
668
|
@cache_progress.begin(message, pct)
|
|
651
669
|
changed
|
|
652
670
|
notify_observers @cache_progress
|
|
653
|
-
@cache_progress.report(message, pct)
|
|
654
671
|
end
|
|
672
|
+
# @sg-ignore Unresolved call to report
|
|
673
|
+
@cache_progress.report(message, pct)
|
|
655
674
|
changed
|
|
656
675
|
notify_observers @cache_progress
|
|
657
676
|
end
|
|
@@ -666,11 +685,11 @@ module Solargraph
|
|
|
666
685
|
|
|
667
686
|
# @return [void]
|
|
668
687
|
def sync_catalog
|
|
669
|
-
return if @sync_count
|
|
688
|
+
return if @sync_count.zero?
|
|
670
689
|
|
|
671
690
|
mutex.synchronize do
|
|
672
691
|
logger.info "Cataloging #{workspace.directory.empty? ? 'generic workspace' : workspace.directory}"
|
|
673
|
-
source_map_hash.
|
|
692
|
+
source_map_hash.each_value { |map| find_external_requires(map) }
|
|
674
693
|
api_map.catalog bench
|
|
675
694
|
logger.info "Catalog complete (#{api_map.source_maps.length} files, #{api_map.pins.length} pins)"
|
|
676
695
|
logger.info "#{api_map.uncached_yard_gemspecs.length} uncached YARD gemspecs"
|
data/lib/solargraph/location.rb
CHANGED
|
@@ -6,6 +6,7 @@ module Solargraph
|
|
|
6
6
|
#
|
|
7
7
|
class Location
|
|
8
8
|
include Equality
|
|
9
|
+
include Comparable
|
|
9
10
|
|
|
10
11
|
# @return [String]
|
|
11
12
|
attr_reader :filename
|
|
@@ -13,20 +14,17 @@ module Solargraph
|
|
|
13
14
|
# @return [Solargraph::Range]
|
|
14
15
|
attr_reader :range
|
|
15
16
|
|
|
16
|
-
# @param filename [String]
|
|
17
|
+
# @param filename [String, nil]
|
|
17
18
|
# @param range [Solargraph::Range]
|
|
18
19
|
def initialize filename, range
|
|
20
|
+
raise 'Use nil to represent no-file' if filename&.empty?
|
|
21
|
+
|
|
19
22
|
@filename = filename
|
|
20
23
|
@range = range
|
|
21
24
|
end
|
|
22
25
|
|
|
23
|
-
# @sg-ignore Fix "Not enough arguments to Module#protected"
|
|
24
|
-
protected def equality_fields
|
|
25
|
-
[filename, range]
|
|
26
|
-
end
|
|
27
|
-
|
|
28
26
|
# @param other [self]
|
|
29
|
-
def <=>
|
|
27
|
+
def <=> other
|
|
30
28
|
return nil unless other.is_a?(Location)
|
|
31
29
|
if filename == other.filename
|
|
32
30
|
range <=> other.range
|
|
@@ -44,10 +42,6 @@ module Solargraph
|
|
|
44
42
|
range.contain?(location.range.start) && range.contain?(location.range.ending) && filename == location.filename
|
|
45
43
|
end
|
|
46
44
|
|
|
47
|
-
def inspect
|
|
48
|
-
"<#{self.class.name}: filename=#{filename}, range=#{range.inspect}>"
|
|
49
|
-
end
|
|
50
|
-
|
|
51
45
|
def to_s
|
|
52
46
|
inspect
|
|
53
47
|
end
|
|
@@ -62,21 +56,30 @@ module Solargraph
|
|
|
62
56
|
|
|
63
57
|
# @param node [Parser::AST::Node, nil]
|
|
64
58
|
# @return [Location, nil]
|
|
65
|
-
def self.from_node
|
|
59
|
+
def self.from_node node
|
|
66
60
|
return nil if node.nil? || node.loc.nil?
|
|
61
|
+
filename = node.loc.expression.source_buffer.name
|
|
62
|
+
# @sg-ignore flow sensitive typing needs to create separate ranges for postfix if
|
|
63
|
+
filename = nil if filename.empty?
|
|
67
64
|
range = Range.from_node(node)
|
|
68
|
-
|
|
65
|
+
# @sg-ignore Need to add nil check here
|
|
66
|
+
new(filename, range)
|
|
69
67
|
end
|
|
70
68
|
|
|
71
69
|
# @param other [BasicObject]
|
|
72
70
|
def == other
|
|
73
71
|
return false unless other.is_a?(Location)
|
|
74
|
-
# @sg-ignore https://github.com/castwide/solargraph/pull/1114
|
|
75
72
|
filename == other.filename and range == other.range
|
|
76
73
|
end
|
|
77
74
|
|
|
78
75
|
def inspect
|
|
79
76
|
"#<#{self.class} #{filename}, #{range.inspect}>"
|
|
80
77
|
end
|
|
78
|
+
|
|
79
|
+
protected
|
|
80
|
+
|
|
81
|
+
def equality_fields
|
|
82
|
+
[filename, range]
|
|
83
|
+
end
|
|
81
84
|
end
|
|
82
85
|
end
|
data/lib/solargraph/logging.rb
CHANGED
|
@@ -10,7 +10,7 @@ module Solargraph
|
|
|
10
10
|
'warn' => Logger::WARN,
|
|
11
11
|
'info' => Logger::INFO,
|
|
12
12
|
'debug' => Logger::DEBUG
|
|
13
|
-
}
|
|
13
|
+
}.freeze
|
|
14
14
|
configured_level = ENV.fetch('SOLARGRAPH_LOG', nil)
|
|
15
15
|
level = if LOG_LEVELS.keys.include?(configured_level)
|
|
16
16
|
LOG_LEVELS.fetch(configured_level)
|
|
@@ -21,17 +21,35 @@ module Solargraph
|
|
|
21
21
|
end
|
|
22
22
|
DEFAULT_LOG_LEVEL
|
|
23
23
|
end
|
|
24
|
-
@@logger = Logger.new(
|
|
24
|
+
@@logger = Logger.new($stderr, level: level)
|
|
25
25
|
# @sg-ignore Fix cvar issue
|
|
26
|
-
@@logger.formatter = proc do |severity,
|
|
26
|
+
@@logger.formatter = proc do |severity, _datetime, _progname, msg|
|
|
27
27
|
"[#{severity}] #{msg}\n"
|
|
28
28
|
end
|
|
29
29
|
|
|
30
30
|
module_function
|
|
31
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
|
+
|
|
32
42
|
# @return [Logger]
|
|
33
43
|
def logger
|
|
34
|
-
|
|
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
|
+
logger.formatter = @@logger.formatter
|
|
51
|
+
logger
|
|
52
|
+
end
|
|
35
53
|
end
|
|
36
54
|
end
|
|
37
55
|
end
|
data/lib/solargraph/page.rb
CHANGED
|
@@ -49,7 +49,7 @@ module Solargraph
|
|
|
49
49
|
|
|
50
50
|
# @param directory [String]
|
|
51
51
|
def initialize directory = VIEWS_PATH
|
|
52
|
-
directory = VIEWS_PATH if directory.nil?
|
|
52
|
+
directory = VIEWS_PATH if directory.nil? || !File.directory?(directory)
|
|
53
53
|
directories = [directory]
|
|
54
54
|
directories.push VIEWS_PATH if directory != VIEWS_PATH
|
|
55
55
|
# @type [Proc]
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
require 'ripper'
|
|
2
4
|
|
|
3
5
|
module Solargraph
|
|
@@ -23,37 +25,50 @@ module Solargraph
|
|
|
23
25
|
# @sg-ignore
|
|
24
26
|
# @type [Array(Symbol, String, Array([Integer, nil], [Integer, nil]))]
|
|
25
27
|
result = super
|
|
28
|
+
# @sg-ignore Need to add nil check here
|
|
26
29
|
if @buffer_lines[result[2][0]][0..result[2][1]].strip =~ /^#/
|
|
27
30
|
chomped = result[1].chomp
|
|
28
|
-
if result[2][0]
|
|
31
|
+
if result[2][0].zero? && chomped.encode('UTF-8', 'binary', invalid: :replace, undef: :replace,
|
|
32
|
+
replace: '').match(/^#\s*frozen_string_literal:/)
|
|
29
33
|
chomped = '#'
|
|
30
34
|
end
|
|
31
|
-
@comments[result[2][0]] =
|
|
35
|
+
@comments[result[2][0]] =
|
|
36
|
+
Snippet.new(Range.from_to(result[2][0], result[2][1], result[2][0], result[2][1] + chomped.length), chomped)
|
|
32
37
|
end
|
|
33
38
|
result
|
|
34
39
|
end
|
|
35
40
|
|
|
36
41
|
# @param result [Array(Symbol, String, Array([Integer, nil], [Integer, nil]))]
|
|
37
42
|
# @return [void]
|
|
38
|
-
def create_snippet
|
|
43
|
+
def create_snippet result
|
|
39
44
|
chomped = result[1].chomp
|
|
40
|
-
@comments[result[2][0]] =
|
|
45
|
+
@comments[result[2][0]] =
|
|
46
|
+
Snippet.new(
|
|
47
|
+
Range.from_to(result[2][0] || 0, result[2][1] || 0, result[2][0] || 0,
|
|
48
|
+
(result[2][1] || 0) + chomped.length), chomped
|
|
49
|
+
)
|
|
41
50
|
end
|
|
42
51
|
|
|
52
|
+
# @sg-ignore @override is adding, not overriding
|
|
43
53
|
def on_embdoc_beg *args
|
|
44
54
|
result = super
|
|
55
|
+
# @sg-ignore @override is adding, not overriding
|
|
45
56
|
create_snippet(result)
|
|
46
57
|
result
|
|
47
58
|
end
|
|
48
59
|
|
|
60
|
+
# @sg-ignore @override is adding, not overriding
|
|
49
61
|
def on_embdoc *args
|
|
50
62
|
result = super
|
|
63
|
+
# @sg-ignore @override is adding, not overriding
|
|
51
64
|
create_snippet(result)
|
|
52
65
|
result
|
|
53
66
|
end
|
|
54
67
|
|
|
68
|
+
# @sg-ignore @override is adding, not overriding
|
|
55
69
|
def on_embdoc_end *args
|
|
56
70
|
result = super
|
|
71
|
+
# @sg-ignore @override is adding, not overriding
|
|
57
72
|
create_snippet(result)
|
|
58
73
|
result
|
|
59
74
|
end
|