solargraph 0.58.1 → 0.58.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/workflows/plugins.yml +3 -2
- data/.gitignore +1 -0
- data/CHANGELOG.md +10 -1
- data/lib/solargraph/api_map/cache.rb +110 -110
- data/lib/solargraph/api_map/constants.rb +279 -279
- data/lib/solargraph/api_map/index.rb +193 -193
- data/lib/solargraph/api_map/source_to_yard.rb +97 -97
- data/lib/solargraph/api_map/store.rb +384 -384
- data/lib/solargraph/api_map.rb +945 -945
- data/lib/solargraph/bench.rb +45 -45
- data/lib/solargraph/complex_type/type_methods.rb +228 -228
- data/lib/solargraph/complex_type/unique_type.rb +482 -482
- data/lib/solargraph/complex_type.rb +444 -444
- data/lib/solargraph/convention/data_definition/data_assignment_node.rb +61 -61
- data/lib/solargraph/convention/data_definition/data_definition_node.rb +91 -91
- data/lib/solargraph/convention/data_definition.rb +105 -105
- data/lib/solargraph/convention/gemfile.rb +15 -15
- data/lib/solargraph/convention/gemspec.rb +23 -23
- data/lib/solargraph/convention/rakefile.rb +17 -17
- data/lib/solargraph/convention/struct_definition/struct_assignment_node.rb +61 -61
- data/lib/solargraph/convention/struct_definition/struct_definition_node.rb +102 -102
- data/lib/solargraph/convention/struct_definition.rb +164 -164
- data/lib/solargraph/convention.rb +78 -78
- data/lib/solargraph/converters/dd.rb +17 -17
- data/lib/solargraph/converters/dl.rb +15 -15
- data/lib/solargraph/converters/dt.rb +15 -15
- data/lib/solargraph/converters/misc.rb +1 -1
- data/lib/solargraph/diagnostics/require_not_found.rb +53 -53
- data/lib/solargraph/diagnostics/rubocop.rb +118 -118
- data/lib/solargraph/diagnostics/rubocop_helpers.rb +68 -68
- data/lib/solargraph/diagnostics/type_check.rb +55 -55
- data/lib/solargraph/diagnostics/update_errors.rb +41 -41
- data/lib/solargraph/doc_map.rb +439 -439
- data/lib/solargraph/equality.rb +34 -34
- data/lib/solargraph/gem_pins.rb +98 -98
- data/lib/solargraph/language_server/error_codes.rb +20 -20
- data/lib/solargraph/language_server/host/diagnoser.rb +89 -89
- data/lib/solargraph/language_server/host/dispatch.rb +130 -130
- data/lib/solargraph/language_server/host/message_worker.rb +112 -112
- data/lib/solargraph/language_server/host/sources.rb +99 -99
- data/lib/solargraph/language_server/host.rb +878 -878
- data/lib/solargraph/language_server/message/base.rb +97 -97
- data/lib/solargraph/language_server/message/client/register_capability.rb +15 -15
- data/lib/solargraph/language_server/message/completion_item/resolve.rb +60 -60
- data/lib/solargraph/language_server/message/extended/check_gem_version.rb +114 -114
- data/lib/solargraph/language_server/message/extended/document.rb +23 -23
- data/lib/solargraph/language_server/message/extended/document_gems.rb +32 -32
- data/lib/solargraph/language_server/message/extended/download_core.rb +19 -19
- data/lib/solargraph/language_server/message/extended/search.rb +20 -20
- data/lib/solargraph/language_server/message/initialize.rb +191 -191
- data/lib/solargraph/language_server/message/text_document/completion.rb +56 -56
- data/lib/solargraph/language_server/message/text_document/definition.rb +40 -40
- data/lib/solargraph/language_server/message/text_document/document_highlight.rb +16 -16
- data/lib/solargraph/language_server/message/text_document/document_symbol.rb +26 -26
- data/lib/solargraph/language_server/message/text_document/formatting.rb +148 -148
- data/lib/solargraph/language_server/message/text_document/hover.rb +58 -58
- data/lib/solargraph/language_server/message/text_document/prepare_rename.rb +11 -11
- data/lib/solargraph/language_server/message/text_document/references.rb +16 -16
- data/lib/solargraph/language_server/message/text_document/rename.rb +19 -19
- data/lib/solargraph/language_server/message/text_document/signature_help.rb +24 -24
- data/lib/solargraph/language_server/message/text_document/type_definition.rb +25 -25
- data/lib/solargraph/language_server/message/workspace/did_change_configuration.rb +35 -35
- data/lib/solargraph/language_server/message/workspace/did_change_watched_files.rb +40 -40
- data/lib/solargraph/language_server/message/workspace/did_change_workspace_folders.rb +26 -26
- data/lib/solargraph/language_server/message/workspace/workspace_symbol.rb +23 -23
- data/lib/solargraph/language_server/message.rb +94 -94
- data/lib/solargraph/language_server/request.rb +27 -27
- data/lib/solargraph/language_server/transport/data_reader.rb +74 -74
- data/lib/solargraph/language_server/uri_helpers.rb +49 -49
- data/lib/solargraph/library.rb +683 -683
- data/lib/solargraph/location.rb +82 -82
- data/lib/solargraph/logging.rb +37 -37
- data/lib/solargraph/page.rb +92 -92
- data/lib/solargraph/parser/comment_ripper.rb +69 -69
- data/lib/solargraph/parser/flow_sensitive_typing.rb +255 -255
- data/lib/solargraph/parser/node_processor/base.rb +92 -92
- data/lib/solargraph/parser/node_processor.rb +62 -62
- data/lib/solargraph/parser/parser_gem/class_methods.rb +149 -149
- data/lib/solargraph/parser/parser_gem/flawed_builder.rb +19 -19
- data/lib/solargraph/parser/parser_gem/node_chainer.rb +166 -166
- data/lib/solargraph/parser/parser_gem/node_methods.rb +486 -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 +59 -59
- data/lib/solargraph/parser/parser_gem/node_processors/begin_node.rb +15 -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 +53 -53
- data/lib/solargraph/parser/parser_gem/node_processors/defs_node.rb +37 -37
- data/lib/solargraph/parser/parser_gem/node_processors/if_node.rb +23 -23
- data/lib/solargraph/parser/parser_gem/node_processors/ivasgn_node.rb +40 -40
- data/lib/solargraph/parser/parser_gem/node_processors/lvasgn_node.rb +29 -29
- data/lib/solargraph/parser/parser_gem/node_processors/masgn_node.rb +59 -59
- data/lib/solargraph/parser/parser_gem/node_processors/opasgn_node.rb +98 -98
- data/lib/solargraph/parser/parser_gem/node_processors/orasgn_node.rb +17 -17
- data/lib/solargraph/parser/parser_gem/node_processors/resbody_node.rb +38 -38
- data/lib/solargraph/parser/parser_gem/node_processors/sclass_node.rb +52 -52
- data/lib/solargraph/parser/parser_gem/node_processors/send_node.rb +291 -291
- data/lib/solargraph/parser/parser_gem/node_processors/until_node.rb +29 -29
- data/lib/solargraph/parser/parser_gem/node_processors/while_node.rb +29 -29
- data/lib/solargraph/parser/parser_gem/node_processors.rb +70 -70
- data/lib/solargraph/parser/parser_gem.rb +12 -12
- data/lib/solargraph/parser/region.rb +69 -69
- data/lib/solargraph/parser/snippet.rb +17 -17
- data/lib/solargraph/parser.rb +23 -23
- data/lib/solargraph/pin/base.rb +729 -729
- data/lib/solargraph/pin/base_variable.rb +126 -126
- data/lib/solargraph/pin/block.rb +104 -104
- data/lib/solargraph/pin/breakable.rb +9 -9
- data/lib/solargraph/pin/callable.rb +231 -231
- data/lib/solargraph/pin/closure.rb +72 -72
- data/lib/solargraph/pin/common.rb +79 -79
- data/lib/solargraph/pin/constant.rb +45 -45
- data/lib/solargraph/pin/conversions.rb +123 -123
- data/lib/solargraph/pin/delegated_method.rb +120 -120
- data/lib/solargraph/pin/documenting.rb +114 -114
- data/lib/solargraph/pin/instance_variable.rb +34 -34
- data/lib/solargraph/pin/keyword.rb +20 -20
- data/lib/solargraph/pin/local_variable.rb +75 -75
- data/lib/solargraph/pin/method.rb +672 -672
- data/lib/solargraph/pin/method_alias.rb +34 -34
- data/lib/solargraph/pin/namespace.rb +115 -115
- data/lib/solargraph/pin/parameter.rb +275 -275
- data/lib/solargraph/pin/proxy_type.rb +39 -39
- data/lib/solargraph/pin/reference/override.rb +47 -47
- data/lib/solargraph/pin/reference/superclass.rb +15 -15
- data/lib/solargraph/pin/reference.rb +39 -39
- data/lib/solargraph/pin/search.rb +61 -61
- data/lib/solargraph/pin/signature.rb +61 -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 +44 -44
- data/lib/solargraph/pin_cache.rb +245 -245
- data/lib/solargraph/position.rb +132 -119
- data/lib/solargraph/range.rb +112 -112
- data/lib/solargraph/rbs_map/conversions.rb +823 -823
- data/lib/solargraph/rbs_map/core_fills.rb +84 -84
- data/lib/solargraph/rbs_map/core_map.rb +58 -58
- data/lib/solargraph/rbs_map/stdlib_map.rb +43 -43
- data/lib/solargraph/rbs_map.rb +163 -163
- data/lib/solargraph/server_methods.rb +16 -16
- data/lib/solargraph/shell.rb +363 -352
- data/lib/solargraph/source/chain/array.rb +37 -37
- data/lib/solargraph/source/chain/call.rb +337 -337
- data/lib/solargraph/source/chain/class_variable.rb +13 -13
- data/lib/solargraph/source/chain/constant.rb +26 -26
- data/lib/solargraph/source/chain/global_variable.rb +13 -13
- data/lib/solargraph/source/chain/hash.rb +34 -34
- data/lib/solargraph/source/chain/if.rb +28 -28
- data/lib/solargraph/source/chain/instance_variable.rb +13 -13
- data/lib/solargraph/source/chain/link.rb +109 -109
- data/lib/solargraph/source/chain/literal.rb +48 -48
- data/lib/solargraph/source/chain/or.rb +23 -23
- data/lib/solargraph/source/chain/q_call.rb +11 -11
- data/lib/solargraph/source/chain/variable.rb +13 -13
- data/lib/solargraph/source/chain/z_super.rb +30 -30
- data/lib/solargraph/source/chain.rb +291 -291
- data/lib/solargraph/source/change.rb +82 -82
- data/lib/solargraph/source/cursor.rb +166 -166
- data/lib/solargraph/source/source_chainer.rb +194 -194
- data/lib/solargraph/source/updater.rb +55 -55
- data/lib/solargraph/source.rb +498 -498
- data/lib/solargraph/source_map/clip.rb +226 -226
- data/lib/solargraph/source_map/data.rb +34 -34
- data/lib/solargraph/source_map/mapper.rb +259 -259
- data/lib/solargraph/source_map.rb +212 -212
- data/lib/solargraph/type_checker/checks.rb +124 -124
- data/lib/solargraph/type_checker/param_def.rb +37 -37
- data/lib/solargraph/type_checker/problem.rb +32 -32
- data/lib/solargraph/type_checker/rules.rb +84 -84
- data/lib/solargraph/type_checker.rb +814 -814
- data/lib/solargraph/version.rb +1 -1
- data/lib/solargraph/workspace/config.rb +255 -255
- data/lib/solargraph/workspace/require_paths.rb +97 -97
- data/lib/solargraph/workspace.rb +220 -220
- data/lib/solargraph/yard_map/helpers.rb +44 -44
- data/lib/solargraph/yard_map/mapper/to_method.rb +130 -130
- data/lib/solargraph/yard_map/mapper/to_namespace.rb +31 -31
- data/lib/solargraph/yard_map/mapper.rb +79 -79
- data/lib/solargraph/yard_map/to_method.rb +89 -89
- data/lib/solargraph/yard_tags.rb +20 -20
- data/lib/solargraph/yardoc.rb +87 -87
- data/lib/solargraph.rb +105 -105
- data/rbs_collection.yaml +1 -1
- metadata +12 -12
- /data/{sig → rbs}/shims/ast/0/node.rbs +0 -0
- /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,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
|
-
|
|
10
|
-
# @return [String]
|
|
11
|
-
attr_reader :filename
|
|
12
|
-
|
|
13
|
-
# @return [Solargraph::Range]
|
|
14
|
-
attr_reader :range
|
|
15
|
-
|
|
16
|
-
# @param filename [String]
|
|
17
|
-
# @param range [Solargraph::Range]
|
|
18
|
-
def initialize filename, range
|
|
19
|
-
@filename = filename
|
|
20
|
-
@range = range
|
|
21
|
-
end
|
|
22
|
-
|
|
23
|
-
# @sg-ignore Fix "Not enough arguments to Module#protected"
|
|
24
|
-
protected def equality_fields
|
|
25
|
-
[filename, range]
|
|
26
|
-
end
|
|
27
|
-
|
|
28
|
-
# @param other [self]
|
|
29
|
-
def <=>(other)
|
|
30
|
-
return nil unless other.is_a?(Location)
|
|
31
|
-
if filename == other.filename
|
|
32
|
-
range <=> other.range
|
|
33
|
-
else
|
|
34
|
-
filename <=> other.filename
|
|
35
|
-
end
|
|
36
|
-
end
|
|
37
|
-
|
|
38
|
-
def rbs?
|
|
39
|
-
filename.end_with?('.rbs')
|
|
40
|
-
end
|
|
41
|
-
|
|
42
|
-
# @param location [self]
|
|
43
|
-
def contain? location
|
|
44
|
-
range.contain?(location.range.start) && range.contain?(location.range.ending) && filename == location.filename
|
|
45
|
-
end
|
|
46
|
-
|
|
47
|
-
def inspect
|
|
48
|
-
"<#{self.class.name}: filename=#{filename}, range=#{range.inspect}>"
|
|
49
|
-
end
|
|
50
|
-
|
|
51
|
-
def to_s
|
|
52
|
-
inspect
|
|
53
|
-
end
|
|
54
|
-
|
|
55
|
-
# @return [Hash]
|
|
56
|
-
def to_hash
|
|
57
|
-
{
|
|
58
|
-
filename: filename,
|
|
59
|
-
range: range.to_hash
|
|
60
|
-
}
|
|
61
|
-
end
|
|
62
|
-
|
|
63
|
-
# @param node [Parser::AST::Node, nil]
|
|
64
|
-
# @return [Location, nil]
|
|
65
|
-
def self.from_node(node)
|
|
66
|
-
return nil if node.nil? || node.loc.nil?
|
|
67
|
-
range = Range.from_node(node)
|
|
68
|
-
self.new(node.loc.expression.source_buffer.name, range)
|
|
69
|
-
end
|
|
70
|
-
|
|
71
|
-
# @param other [BasicObject]
|
|
72
|
-
def == other
|
|
73
|
-
return false unless other.is_a?(Location)
|
|
74
|
-
# @sg-ignore https://github.com/castwide/solargraph/pull/1114
|
|
75
|
-
filename == other.filename and range == other.range
|
|
76
|
-
end
|
|
77
|
-
|
|
78
|
-
def inspect
|
|
79
|
-
"#<#{self.class} #{filename}, #{range.inspect}>"
|
|
80
|
-
end
|
|
81
|
-
end
|
|
82
|
-
end
|
|
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
|
+
# @return [String]
|
|
11
|
+
attr_reader :filename
|
|
12
|
+
|
|
13
|
+
# @return [Solargraph::Range]
|
|
14
|
+
attr_reader :range
|
|
15
|
+
|
|
16
|
+
# @param filename [String]
|
|
17
|
+
# @param range [Solargraph::Range]
|
|
18
|
+
def initialize filename, range
|
|
19
|
+
@filename = filename
|
|
20
|
+
@range = range
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
# @sg-ignore Fix "Not enough arguments to Module#protected"
|
|
24
|
+
protected def equality_fields
|
|
25
|
+
[filename, range]
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
# @param other [self]
|
|
29
|
+
def <=>(other)
|
|
30
|
+
return nil unless other.is_a?(Location)
|
|
31
|
+
if filename == other.filename
|
|
32
|
+
range <=> other.range
|
|
33
|
+
else
|
|
34
|
+
filename <=> other.filename
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
def rbs?
|
|
39
|
+
filename.end_with?('.rbs')
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
# @param location [self]
|
|
43
|
+
def contain? location
|
|
44
|
+
range.contain?(location.range.start) && range.contain?(location.range.ending) && filename == location.filename
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
def inspect
|
|
48
|
+
"<#{self.class.name}: filename=#{filename}, range=#{range.inspect}>"
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
def to_s
|
|
52
|
+
inspect
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
# @return [Hash]
|
|
56
|
+
def to_hash
|
|
57
|
+
{
|
|
58
|
+
filename: filename,
|
|
59
|
+
range: range.to_hash
|
|
60
|
+
}
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
# @param node [Parser::AST::Node, nil]
|
|
64
|
+
# @return [Location, nil]
|
|
65
|
+
def self.from_node(node)
|
|
66
|
+
return nil if node.nil? || node.loc.nil?
|
|
67
|
+
range = Range.from_node(node)
|
|
68
|
+
self.new(node.loc.expression.source_buffer.name, range)
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
# @param other [BasicObject]
|
|
72
|
+
def == other
|
|
73
|
+
return false unless other.is_a?(Location)
|
|
74
|
+
# @sg-ignore https://github.com/castwide/solargraph/pull/1114
|
|
75
|
+
filename == other.filename and range == other.range
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
def inspect
|
|
79
|
+
"#<#{self.class} #{filename}, #{range.inspect}>"
|
|
80
|
+
end
|
|
81
|
+
end
|
|
82
|
+
end
|
data/lib/solargraph/logging.rb
CHANGED
|
@@ -1,37 +1,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
|
-
# @return [Logger]
|
|
33
|
-
def logger
|
|
34
|
-
@@logger
|
|
35
|
-
end
|
|
36
|
-
end
|
|
37
|
-
end
|
|
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
|
+
# @return [Logger]
|
|
33
|
+
def logger
|
|
34
|
+
@@logger
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
end
|
data/lib/solargraph/page.rb
CHANGED
|
@@ -1,92 +1,92 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
require 'ostruct'
|
|
4
|
-
require 'tilt'
|
|
5
|
-
require 'yard'
|
|
6
|
-
require 'cgi'
|
|
7
|
-
|
|
8
|
-
module Solargraph
|
|
9
|
-
class Page
|
|
10
|
-
# @todo This method directive is necessary because OpenStruct.new confuses
|
|
11
|
-
# the typechecker.
|
|
12
|
-
# @!method self.new(locals, render_method)
|
|
13
|
-
# @param locals[Hash]
|
|
14
|
-
# @param render_method [Proc]
|
|
15
|
-
# @return [Binder]
|
|
16
|
-
class Binder < OpenStruct
|
|
17
|
-
# @param locals [Hash]
|
|
18
|
-
# @param render_method [Proc]
|
|
19
|
-
def initialize locals, render_method
|
|
20
|
-
super(locals)
|
|
21
|
-
define_singleton_method :render do |template, layout: false, locals: {}|
|
|
22
|
-
render_method.call(template, layout: layout, locals: locals)
|
|
23
|
-
end
|
|
24
|
-
define_singleton_method :erb do |template, layout: false, locals: {}|
|
|
25
|
-
render_method.call(template, layout: layout, locals: locals)
|
|
26
|
-
end
|
|
27
|
-
end
|
|
28
|
-
|
|
29
|
-
# @param text [String]
|
|
30
|
-
# @return [String]
|
|
31
|
-
def htmlify text
|
|
32
|
-
# @type [String]
|
|
33
|
-
YARD::Templates::Helpers::Markup::RDocMarkup.new(text).to_html
|
|
34
|
-
end
|
|
35
|
-
|
|
36
|
-
# @param text [String]
|
|
37
|
-
# @return [String]
|
|
38
|
-
def escape text
|
|
39
|
-
CGI.escapeHTML(text)
|
|
40
|
-
end
|
|
41
|
-
|
|
42
|
-
# @param code [String]
|
|
43
|
-
# @return [String]
|
|
44
|
-
def ruby_to_html code
|
|
45
|
-
code
|
|
46
|
-
end
|
|
47
|
-
end
|
|
48
|
-
private_constant :Binder
|
|
49
|
-
|
|
50
|
-
# @param directory [String]
|
|
51
|
-
def initialize directory = VIEWS_PATH
|
|
52
|
-
directory = VIEWS_PATH if directory.nil? or !File.directory?(directory)
|
|
53
|
-
directories = [directory]
|
|
54
|
-
directories.push VIEWS_PATH if directory != VIEWS_PATH
|
|
55
|
-
# @type [Proc]
|
|
56
|
-
# @param template [String]
|
|
57
|
-
# @param layout [Boolean]
|
|
58
|
-
# @param locals [Hash]
|
|
59
|
-
@render_method = proc { |template, layout: false, locals: {}|
|
|
60
|
-
binder = Binder.new(locals, @render_method)
|
|
61
|
-
if layout
|
|
62
|
-
Tilt::ERBTemplate.new(Page.select_template(directories, 'layout')).render(binder) do
|
|
63
|
-
Tilt::ERBTemplate.new(Page.select_template(directories, template)).render(binder)
|
|
64
|
-
end
|
|
65
|
-
else
|
|
66
|
-
Tilt::ERBTemplate.new(Page.select_template(directories, template)).render(binder)
|
|
67
|
-
end
|
|
68
|
-
}
|
|
69
|
-
end
|
|
70
|
-
|
|
71
|
-
# @param template [String]
|
|
72
|
-
# @param layout [Boolean]
|
|
73
|
-
# @param locals [Hash]
|
|
74
|
-
# @sg-ignore
|
|
75
|
-
# @return [String]
|
|
76
|
-
def render template, layout: true, locals: {}
|
|
77
|
-
# @type [String]
|
|
78
|
-
@render_method.call(template, layout: layout, locals: locals)
|
|
79
|
-
end
|
|
80
|
-
|
|
81
|
-
# @param directories [Array<String>]
|
|
82
|
-
# @param name [String]
|
|
83
|
-
# @return [String]
|
|
84
|
-
def self.select_template directories, name
|
|
85
|
-
directories.each do |dir|
|
|
86
|
-
path = File.join(dir, "#{name}.erb")
|
|
87
|
-
return path if File.file?(path)
|
|
88
|
-
end
|
|
89
|
-
raise FileNotFoundError, "Template not found: #{name}"
|
|
90
|
-
end
|
|
91
|
-
end
|
|
92
|
-
end
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'ostruct'
|
|
4
|
+
require 'tilt'
|
|
5
|
+
require 'yard'
|
|
6
|
+
require 'cgi'
|
|
7
|
+
|
|
8
|
+
module Solargraph
|
|
9
|
+
class Page
|
|
10
|
+
# @todo This method directive is necessary because OpenStruct.new confuses
|
|
11
|
+
# the typechecker.
|
|
12
|
+
# @!method self.new(locals, render_method)
|
|
13
|
+
# @param locals[Hash]
|
|
14
|
+
# @param render_method [Proc]
|
|
15
|
+
# @return [Binder]
|
|
16
|
+
class Binder < OpenStruct
|
|
17
|
+
# @param locals [Hash]
|
|
18
|
+
# @param render_method [Proc]
|
|
19
|
+
def initialize locals, render_method
|
|
20
|
+
super(locals)
|
|
21
|
+
define_singleton_method :render do |template, layout: false, locals: {}|
|
|
22
|
+
render_method.call(template, layout: layout, locals: locals)
|
|
23
|
+
end
|
|
24
|
+
define_singleton_method :erb do |template, layout: false, locals: {}|
|
|
25
|
+
render_method.call(template, layout: layout, locals: locals)
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
# @param text [String]
|
|
30
|
+
# @return [String]
|
|
31
|
+
def htmlify text
|
|
32
|
+
# @type [String]
|
|
33
|
+
YARD::Templates::Helpers::Markup::RDocMarkup.new(text).to_html
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
# @param text [String]
|
|
37
|
+
# @return [String]
|
|
38
|
+
def escape text
|
|
39
|
+
CGI.escapeHTML(text)
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
# @param code [String]
|
|
43
|
+
# @return [String]
|
|
44
|
+
def ruby_to_html code
|
|
45
|
+
code
|
|
46
|
+
end
|
|
47
|
+
end
|
|
48
|
+
private_constant :Binder
|
|
49
|
+
|
|
50
|
+
# @param directory [String]
|
|
51
|
+
def initialize directory = VIEWS_PATH
|
|
52
|
+
directory = VIEWS_PATH if directory.nil? or !File.directory?(directory)
|
|
53
|
+
directories = [directory]
|
|
54
|
+
directories.push VIEWS_PATH if directory != VIEWS_PATH
|
|
55
|
+
# @type [Proc]
|
|
56
|
+
# @param template [String]
|
|
57
|
+
# @param layout [Boolean]
|
|
58
|
+
# @param locals [Hash]
|
|
59
|
+
@render_method = proc { |template, layout: false, locals: {}|
|
|
60
|
+
binder = Binder.new(locals, @render_method)
|
|
61
|
+
if layout
|
|
62
|
+
Tilt::ERBTemplate.new(Page.select_template(directories, 'layout')).render(binder) do
|
|
63
|
+
Tilt::ERBTemplate.new(Page.select_template(directories, template)).render(binder)
|
|
64
|
+
end
|
|
65
|
+
else
|
|
66
|
+
Tilt::ERBTemplate.new(Page.select_template(directories, template)).render(binder)
|
|
67
|
+
end
|
|
68
|
+
}
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
# @param template [String]
|
|
72
|
+
# @param layout [Boolean]
|
|
73
|
+
# @param locals [Hash]
|
|
74
|
+
# @sg-ignore
|
|
75
|
+
# @return [String]
|
|
76
|
+
def render template, layout: true, locals: {}
|
|
77
|
+
# @type [String]
|
|
78
|
+
@render_method.call(template, layout: layout, locals: locals)
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
# @param directories [Array<String>]
|
|
82
|
+
# @param name [String]
|
|
83
|
+
# @return [String]
|
|
84
|
+
def self.select_template directories, name
|
|
85
|
+
directories.each do |dir|
|
|
86
|
+
path = File.join(dir, "#{name}.erb")
|
|
87
|
+
return path if File.file?(path)
|
|
88
|
+
end
|
|
89
|
+
raise FileNotFoundError, "Template not found: #{name}"
|
|
90
|
+
end
|
|
91
|
+
end
|
|
92
|
+
end
|
|
@@ -1,69 +1,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
|
-
if @buffer_lines[result[2][0]][0..result[2][1]].strip =~ /^#/
|
|
27
|
-
chomped = result[1].chomp
|
|
28
|
-
if result[2][0] == 0 && chomped.encode('UTF-8', 'binary', invalid: :replace, undef: :replace, replace: '').match(/^#\s*frozen_string_literal:/)
|
|
29
|
-
chomped = '#'
|
|
30
|
-
end
|
|
31
|
-
@comments[result[2][0]] = Snippet.new(Range.from_to(result[2][0], result[2][1], result[2][0], result[2][1] + chomped.length), chomped)
|
|
32
|
-
end
|
|
33
|
-
result
|
|
34
|
-
end
|
|
35
|
-
|
|
36
|
-
# @param result [Array(Symbol, String, Array([Integer, nil], [Integer, nil]))]
|
|
37
|
-
# @return [void]
|
|
38
|
-
def create_snippet(result)
|
|
39
|
-
chomped = result[1].chomp
|
|
40
|
-
@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)
|
|
41
|
-
end
|
|
42
|
-
|
|
43
|
-
def on_embdoc_beg *args
|
|
44
|
-
result = super
|
|
45
|
-
create_snippet(result)
|
|
46
|
-
result
|
|
47
|
-
end
|
|
48
|
-
|
|
49
|
-
def on_embdoc *args
|
|
50
|
-
result = super
|
|
51
|
-
create_snippet(result)
|
|
52
|
-
result
|
|
53
|
-
end
|
|
54
|
-
|
|
55
|
-
def on_embdoc_end *args
|
|
56
|
-
result = super
|
|
57
|
-
create_snippet(result)
|
|
58
|
-
result
|
|
59
|
-
end
|
|
60
|
-
|
|
61
|
-
# @return [Hash{Integer => Solargraph::Parser::Snippet}]
|
|
62
|
-
def parse
|
|
63
|
-
@comments = {}
|
|
64
|
-
super
|
|
65
|
-
@comments
|
|
66
|
-
end
|
|
67
|
-
end
|
|
68
|
-
end
|
|
69
|
-
end
|
|
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
|
+
if @buffer_lines[result[2][0]][0..result[2][1]].strip =~ /^#/
|
|
27
|
+
chomped = result[1].chomp
|
|
28
|
+
if result[2][0] == 0 && chomped.encode('UTF-8', 'binary', invalid: :replace, undef: :replace, replace: '').match(/^#\s*frozen_string_literal:/)
|
|
29
|
+
chomped = '#'
|
|
30
|
+
end
|
|
31
|
+
@comments[result[2][0]] = Snippet.new(Range.from_to(result[2][0], result[2][1], result[2][0], result[2][1] + chomped.length), chomped)
|
|
32
|
+
end
|
|
33
|
+
result
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
# @param result [Array(Symbol, String, Array([Integer, nil], [Integer, nil]))]
|
|
37
|
+
# @return [void]
|
|
38
|
+
def create_snippet(result)
|
|
39
|
+
chomped = result[1].chomp
|
|
40
|
+
@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)
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
def on_embdoc_beg *args
|
|
44
|
+
result = super
|
|
45
|
+
create_snippet(result)
|
|
46
|
+
result
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
def on_embdoc *args
|
|
50
|
+
result = super
|
|
51
|
+
create_snippet(result)
|
|
52
|
+
result
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
def on_embdoc_end *args
|
|
56
|
+
result = super
|
|
57
|
+
create_snippet(result)
|
|
58
|
+
result
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
# @return [Hash{Integer => Solargraph::Parser::Snippet}]
|
|
62
|
+
def parse
|
|
63
|
+
@comments = {}
|
|
64
|
+
super
|
|
65
|
+
@comments
|
|
66
|
+
end
|
|
67
|
+
end
|
|
68
|
+
end
|
|
69
|
+
end
|