steep 1.7.0.dev.3 → 1.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +43 -0
- data/README.md +18 -0
- data/doc/narrowing.md +1 -1
- data/doc/shape.md +176 -0
- data/guides/src/gem-rbs-collection/gem-rbs-collection.md +7 -24
- data/lib/steep/ast/types/factory.rb +27 -18
- data/lib/steep/ast/types/proc.rb +14 -9
- data/lib/steep/interface/block.rb +1 -1
- data/lib/steep/interface/builder.rb +1 -0
- data/lib/steep/interface/function.rb +14 -6
- data/lib/steep/interface/method_type.rb +15 -7
- data/lib/steep/project/pattern.rb +1 -2
- data/lib/steep/rake_task.rb +132 -0
- data/lib/steep/server/interaction_worker.rb +6 -0
- data/lib/steep/server/lsp_formatter.rb +2 -0
- data/lib/steep/services/completion_provider.rb +1 -1
- data/lib/steep/services/file_loader.rb +15 -20
- data/lib/steep/services/signature_help_provider.rb +11 -9
- data/lib/steep/signature/validator.rb +1 -1
- data/lib/steep/subtyping/check.rb +15 -6
- data/lib/steep/subtyping/variable_variance.rb +3 -3
- data/lib/steep/type_construction.rb +186 -149
- data/lib/steep/type_inference/block_params.rb +1 -1
- data/lib/steep/type_inference/logic_type_interpreter.rb +2 -1
- data/lib/steep/type_inference/method_params.rb +16 -0
- data/lib/steep/type_inference/send_args.rb +5 -2
- data/lib/steep/version.rb +1 -1
- data/steep.gemspec +5 -2
- metadata +7 -145
- data/.github/dependabot.yml +0 -28
- data/.github/workflows/ruby-windows.yml +0 -35
- data/.github/workflows/ruby.yml +0 -32
- data/.vscode/steep-shared.code-snippets +0 -41
- data/Gemfile +0 -14
- data/Gemfile.lock +0 -104
- data/Gemfile.steep +0 -0
- data/gemfile_steep/Gemfile +0 -3
- data/gemfile_steep/Gemfile.lock +0 -77
- data/rbs_collection.steep.lock.yaml +0 -108
- data/rbs_collection.steep.yaml +0 -23
- data/sig/shims/bundler.rbs +0 -3
- data/sig/shims/concurrent-ruby.rbs +0 -39
- data/sig/shims/exception.rbs +0 -4
- data/sig/shims/language-server_protocol.rbs +0 -450
- data/sig/shims/parser/comment.rbs +0 -33
- data/sig/shims/parser/nodes.rbs +0 -252
- data/sig/shims/parser/source/map.rbs +0 -146
- data/sig/shims/parser/source/range.rbs +0 -237
- data/sig/shims/parser.rbs +0 -69
- data/sig/shims/string.rbs +0 -4
- data/sig/shims/tagged_logging.rbs +0 -6
- data/sig/shims/yaml.rbs +0 -4
- data/sig/steep/annotation_parser.rbs +0 -60
- data/sig/steep/ast/annotation/collection.rbs +0 -78
- data/sig/steep/ast/annotation.rbs +0 -121
- data/sig/steep/ast/builtin.rbs +0 -69
- data/sig/steep/ast/ignore.rbs +0 -66
- data/sig/steep/ast/node/type_application.rbs +0 -31
- data/sig/steep/ast/node/type_assertion.rbs +0 -32
- data/sig/steep/ast/types/any.rbs +0 -29
- data/sig/steep/ast/types/boolean.rbs +0 -31
- data/sig/steep/ast/types/bot.rbs +0 -29
- data/sig/steep/ast/types/class.rbs +0 -33
- data/sig/steep/ast/types/factory.rbs +0 -110
- data/sig/steep/ast/types/helper.rbs +0 -24
- data/sig/steep/ast/types/instance.rbs +0 -33
- data/sig/steep/ast/types/intersection.rbs +0 -40
- data/sig/steep/ast/types/literal.rbs +0 -35
- data/sig/steep/ast/types/logic.rbs +0 -83
- data/sig/steep/ast/types/name.rbs +0 -84
- data/sig/steep/ast/types/nil.rbs +0 -31
- data/sig/steep/ast/types/proc.rbs +0 -53
- data/sig/steep/ast/types/record.rbs +0 -39
- data/sig/steep/ast/types/self.rbs +0 -33
- data/sig/steep/ast/types/top.rbs +0 -29
- data/sig/steep/ast/types/tuple.rbs +0 -37
- data/sig/steep/ast/types/union.rbs +0 -40
- data/sig/steep/ast/types/var.rbs +0 -42
- data/sig/steep/ast/types/void.rbs +0 -29
- data/sig/steep/ast/types.rbs +0 -16
- data/sig/steep/cli.rbs +0 -55
- data/sig/steep/diagnostic/deprecated/else_on_exhaustive_case.rbs +0 -13
- data/sig/steep/diagnostic/deprecated/unknown_constant_assigned.rbs +0 -15
- data/sig/steep/diagnostic/helper.rbs +0 -15
- data/sig/steep/diagnostic/lsp_formatter.rbs +0 -36
- data/sig/steep/diagnostic/ruby.rbs +0 -703
- data/sig/steep/diagnostic/signature.rbs +0 -252
- data/sig/steep/drivers/annotations.rbs +0 -17
- data/sig/steep/drivers/check.rbs +0 -33
- data/sig/steep/drivers/checkfile.rbs +0 -27
- data/sig/steep/drivers/diagnostic_printer.rbs +0 -25
- data/sig/steep/drivers/init.rbs +0 -19
- data/sig/steep/drivers/langserver.rbs +0 -36
- data/sig/steep/drivers/print_project.rbs +0 -15
- data/sig/steep/drivers/stats.rbs +0 -47
- data/sig/steep/drivers/utils/driver_helper.rbs +0 -25
- data/sig/steep/drivers/utils/jobs_option.rbs +0 -19
- data/sig/steep/drivers/validate.rbs +0 -15
- data/sig/steep/drivers/vendor.rbs +0 -19
- data/sig/steep/drivers/watch.rbs +0 -27
- data/sig/steep/drivers/worker.rbs +0 -29
- data/sig/steep/equatable.rbs +0 -11
- data/sig/steep/expectations.rbs +0 -72
- data/sig/steep/index/rbs_index.rbs +0 -141
- data/sig/steep/index/signature_symbol_provider.rbs +0 -41
- data/sig/steep/index/source_index.rbs +0 -63
- data/sig/steep/interface/block.rbs +0 -41
- data/sig/steep/interface/builder.rbs +0 -152
- data/sig/steep/interface/function.rbs +0 -270
- data/sig/steep/interface/method_type.rbs +0 -105
- data/sig/steep/interface/shape.rbs +0 -80
- data/sig/steep/interface/substitution.rbs +0 -51
- data/sig/steep/interface/type_param.rbs +0 -43
- data/sig/steep/method_name.rbs +0 -30
- data/sig/steep/module_helper.rbs +0 -16
- data/sig/steep/node_helper.rbs +0 -91
- data/sig/steep/path_helper.rbs +0 -15
- data/sig/steep/project/dsl.rbs +0 -108
- data/sig/steep/project/options.rbs +0 -47
- data/sig/steep/project/pattern.rbs +0 -47
- data/sig/steep/project/target.rbs +0 -25
- data/sig/steep/project.rbs +0 -26
- data/sig/steep/range_extension.rbs +0 -7
- data/sig/steep/server/base_worker.rbs +0 -49
- data/sig/steep/server/change_buffer.rbs +0 -38
- data/sig/steep/server/delay_queue.rbs +0 -37
- data/sig/steep/server/interaction_worker.rbs +0 -90
- data/sig/steep/server/lsp_formatter.rbs +0 -63
- data/sig/steep/server/master.rbs +0 -299
- data/sig/steep/server/type_check_worker.rbs +0 -141
- data/sig/steep/server/worker_process.rbs +0 -97
- data/sig/steep/services/completion_provider.rbs +0 -264
- data/sig/steep/services/content_change.rbs +0 -37
- data/sig/steep/services/file_loader.rbs +0 -21
- data/sig/steep/services/goto_service.rbs +0 -106
- data/sig/steep/services/hover_provider/rbs.rbs +0 -47
- data/sig/steep/services/hover_provider/ruby.rbs +0 -127
- data/sig/steep/services/hover_provider/singleton_methods.rbs +0 -11
- data/sig/steep/services/path_assignment.rbs +0 -21
- data/sig/steep/services/signature_help_provider.rbs +0 -51
- data/sig/steep/services/signature_service.rbs +0 -156
- data/sig/steep/services/stats_calculator.rbs +0 -41
- data/sig/steep/services/type_check_service.rbs +0 -112
- data/sig/steep/services/type_name_completion.rbs +0 -135
- data/sig/steep/signature/validator.rbs +0 -85
- data/sig/steep/source/ignore_ranges.rbs +0 -38
- data/sig/steep/source.rbs +0 -105
- data/sig/steep/subtyping/cache.rbs +0 -17
- data/sig/steep/subtyping/check.rbs +0 -131
- data/sig/steep/subtyping/constraints.rbs +0 -111
- data/sig/steep/subtyping/relation.rbs +0 -63
- data/sig/steep/subtyping/result.rbs +0 -179
- data/sig/steep/subtyping/variable_variance.rbs +0 -25
- data/sig/steep/thread_waiter.rbs +0 -13
- data/sig/steep/type_construction.rbs +0 -542
- data/sig/steep/type_inference/block_params.rbs +0 -170
- data/sig/steep/type_inference/case_when.rbs +0 -130
- data/sig/steep/type_inference/constant_env.rbs +0 -29
- data/sig/steep/type_inference/context.rbs +0 -216
- data/sig/steep/type_inference/context_array.rbs +0 -38
- data/sig/steep/type_inference/logic_type_interpreter.rbs +0 -108
- data/sig/steep/type_inference/method_call.rbs +0 -124
- data/sig/steep/type_inference/method_params.rbs +0 -127
- data/sig/steep/type_inference/multiple_assignment.rbs +0 -76
- data/sig/steep/type_inference/send_args.rbs +0 -243
- data/sig/steep/type_inference/type_env.rbs +0 -160
- data/sig/steep/type_inference/type_env_builder.rbs +0 -81
- data/sig/steep/typing.rbs +0 -75
- data/sig/steep.rbs +0 -45
data/sig/steep/path_helper.rbs
DELETED
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
module Steep
|
|
2
|
-
module PathHelper
|
|
3
|
-
# Receives a String that represents a *file* URI and returns a Pathname
|
|
4
|
-
#
|
|
5
|
-
# Returns `nil` when the schema of given URI is not `file://`.
|
|
6
|
-
#
|
|
7
|
-
def self?.to_pathname: (String uri, ?dosish: bool) -> Pathname?
|
|
8
|
-
|
|
9
|
-
def self?.to_pathname!: (String uri, ?dosish: bool) -> Pathname
|
|
10
|
-
|
|
11
|
-
# Receives a Pathname and returns a *file* URI
|
|
12
|
-
#
|
|
13
|
-
def self?.to_uri: (Pathname | String path, ?dosish: bool) -> URI::File
|
|
14
|
-
end
|
|
15
|
-
end
|
data/sig/steep/project/dsl.rbs
DELETED
|
@@ -1,108 +0,0 @@
|
|
|
1
|
-
use Steep::Diagnostic::Ruby::template
|
|
2
|
-
|
|
3
|
-
module Steep
|
|
4
|
-
class Project
|
|
5
|
-
class DSL
|
|
6
|
-
class TargetDSL
|
|
7
|
-
attr_reader name: Symbol
|
|
8
|
-
|
|
9
|
-
attr_reader sources: Array[String]
|
|
10
|
-
|
|
11
|
-
attr_reader libraries: Array[String]
|
|
12
|
-
|
|
13
|
-
attr_reader signatures: Array[String]
|
|
14
|
-
|
|
15
|
-
attr_reader ignored_sources: Array[String]
|
|
16
|
-
|
|
17
|
-
attr_reader stdlib_root: Pathname?
|
|
18
|
-
|
|
19
|
-
attr_reader core_root: Pathname?
|
|
20
|
-
|
|
21
|
-
attr_reader repo_paths: Array[Pathname]
|
|
22
|
-
|
|
23
|
-
attr_reader code_diagnostics_config: untyped
|
|
24
|
-
|
|
25
|
-
attr_reader project: Project?
|
|
26
|
-
|
|
27
|
-
# Attribute to keep track of collection configuration
|
|
28
|
-
#
|
|
29
|
-
# * `Pathname` means loading the configuration from the path
|
|
30
|
-
# * `nil` means no configuration is given
|
|
31
|
-
# * `false` means rbs-collection is disabled
|
|
32
|
-
#
|
|
33
|
-
attr_reader collection_config_path: Pathname | nil | false
|
|
34
|
-
|
|
35
|
-
def project!: () -> Project
|
|
36
|
-
|
|
37
|
-
def initialize: (Symbol name, ?sources: Array[String], ?libraries: Array[String], ?signatures: Array[String], ?ignored_sources: Array[String], ?repo_paths: Array[Pathname], ?code_diagnostics_config: ::Hash[untyped, untyped], ?project: Project?, ?collection_config_path: Pathname?) -> void
|
|
38
|
-
|
|
39
|
-
def initialize_copy: (instance other) -> void
|
|
40
|
-
|
|
41
|
-
def check: (*String args) -> void
|
|
42
|
-
|
|
43
|
-
def ignore: (*String args) -> void
|
|
44
|
-
|
|
45
|
-
def library: (*String args) -> void
|
|
46
|
-
|
|
47
|
-
def typing_options: (?untyped level, **untyped hash) -> void
|
|
48
|
-
|
|
49
|
-
def signature: (*String args) -> void
|
|
50
|
-
|
|
51
|
-
def update: (?name: Symbol, ?sources: Array[String], ?libraries: Array[String], ?signatures: Array[String], ?ignored_sources: Array[String], ?project: Project?) -> TargetDSL
|
|
52
|
-
|
|
53
|
-
def no_builtin!: (?bool value) -> void
|
|
54
|
-
|
|
55
|
-
def vendor: (?::String dir, ?stdlib: untyped?, ?gems: untyped?) -> void
|
|
56
|
-
|
|
57
|
-
def stdlib_path: (core_root: String, stdlib_root: String) -> void
|
|
58
|
-
|
|
59
|
-
def repo_path: (*String paths) -> void
|
|
60
|
-
|
|
61
|
-
# Configure the code diagnostics printing setup.
|
|
62
|
-
#
|
|
63
|
-
# Yields a hash, and the update the hash in the block.
|
|
64
|
-
#
|
|
65
|
-
# ```rb
|
|
66
|
-
# D = Steep::Diagnostic
|
|
67
|
-
#
|
|
68
|
-
# configure_code_diagnostics do |hash|
|
|
69
|
-
# # Assign one of :error, :warning, :information, :hint or :nil to error classes.
|
|
70
|
-
# hash[D::Ruby::UnexpectedPositionalArgument] = :error
|
|
71
|
-
# end
|
|
72
|
-
# ```
|
|
73
|
-
#
|
|
74
|
-
# Passing a hash is also allowed.
|
|
75
|
-
#
|
|
76
|
-
# ```rb
|
|
77
|
-
# D = Steep::Diagnostic
|
|
78
|
-
#
|
|
79
|
-
# configure_code_diagnostics(D::Ruby.lenient)
|
|
80
|
-
# configure_code_diagnostics(D::Ruby.strict) do |config|
|
|
81
|
-
# config[D::Ruby::NoMethod] = nil
|
|
82
|
-
# end
|
|
83
|
-
# ```
|
|
84
|
-
#
|
|
85
|
-
def configure_code_diagnostics: (template hash) ?{ (template) -> void }-> void
|
|
86
|
-
| () { (template) -> void }-> void
|
|
87
|
-
|
|
88
|
-
def collection_config: (Pathname path) -> void
|
|
89
|
-
|
|
90
|
-
def disable_collection: () -> void
|
|
91
|
-
end
|
|
92
|
-
|
|
93
|
-
attr_reader project: Project
|
|
94
|
-
|
|
95
|
-
@@templates: Hash[Symbol, TargetDSL]
|
|
96
|
-
|
|
97
|
-
def self.templates: () -> Hash[Symbol, TargetDSL]
|
|
98
|
-
|
|
99
|
-
def initialize: (project: Project) -> void
|
|
100
|
-
|
|
101
|
-
def self.register_template: (Symbol name, TargetDSL target) -> void
|
|
102
|
-
|
|
103
|
-
def self.parse: (Project project, String code, ?filename: String) -> void
|
|
104
|
-
|
|
105
|
-
def target: (Symbol name, ?template: Symbol?) ?{ (TargetDSL) [self: TargetDSL] -> void } -> void
|
|
106
|
-
end
|
|
107
|
-
end
|
|
108
|
-
end
|
|
@@ -1,47 +0,0 @@
|
|
|
1
|
-
module Steep
|
|
2
|
-
class Project
|
|
3
|
-
class Options
|
|
4
|
-
class PathOptions
|
|
5
|
-
attr_reader core_root: Pathname?
|
|
6
|
-
|
|
7
|
-
attr_reader stdlib_root: Pathname?
|
|
8
|
-
|
|
9
|
-
attr_reader repo_paths: Array[Pathname]
|
|
10
|
-
|
|
11
|
-
def initialize: (?core_root: Pathname?, ?stdlib_root: Pathname?, ?repo_paths: Array[Pathname]) -> void
|
|
12
|
-
|
|
13
|
-
def customized_stdlib?: () -> bool
|
|
14
|
-
|
|
15
|
-
def customized_core?: () -> bool
|
|
16
|
-
end
|
|
17
|
-
|
|
18
|
-
attr_reader libraries: Array[String]
|
|
19
|
-
|
|
20
|
-
attr_accessor paths: PathOptions
|
|
21
|
-
|
|
22
|
-
attr_accessor collection_config_path: Pathname?
|
|
23
|
-
|
|
24
|
-
def initialize: () -> void
|
|
25
|
-
|
|
26
|
-
# Returns path of lockfile
|
|
27
|
-
%a{pure} def collection_lock_path: () -> Pathname?
|
|
28
|
-
|
|
29
|
-
# Returns `Lockfile` instance if it can be loaded
|
|
30
|
-
#
|
|
31
|
-
%a{pure} def collection_lock: () -> RBS::Collection::Config::Lockfile?
|
|
32
|
-
|
|
33
|
-
@collection_lock: RBS::Collection::Config::Lockfile | Pathname | YAML::SyntaxError | RBS::Collection::Config::CollectionNotAvailable | nil
|
|
34
|
-
|
|
35
|
-
# Load collection configuration
|
|
36
|
-
#
|
|
37
|
-
# * Returns `Lockfile` instance if successfully loaded
|
|
38
|
-
# * Returns `nil` if collection is disabled
|
|
39
|
-
# * Returns `Pathname` if a file is missing
|
|
40
|
-
# * Returns `YAML::SyntaxError` or `CollectionNotAvailable` if an error is raised
|
|
41
|
-
#
|
|
42
|
-
# It keeps the last result unless `force: true` is specified.
|
|
43
|
-
#
|
|
44
|
-
def load_collection_lock: (?force: bool) -> (RBS::Collection::Config::Lockfile | Pathname | YAML::SyntaxError | RBS::Collection::Config::CollectionNotAvailable | nil)
|
|
45
|
-
end
|
|
46
|
-
end
|
|
47
|
-
end
|
|
@@ -1,47 +0,0 @@
|
|
|
1
|
-
module Steep
|
|
2
|
-
class Project
|
|
3
|
-
# `Pattern` class represents a pair of *positive* and *negative* patterns that may match with a pathname
|
|
4
|
-
#
|
|
5
|
-
# ```rb
|
|
6
|
-
# pat = Pattern.new(patterns: ["app/models"], ignores: ["app/models/account.rb"], ext: ".rbs")
|
|
7
|
-
#
|
|
8
|
-
# pat =~ "app/models/group.rb" # => true
|
|
9
|
-
# pat =~ "app/models/account.rb" # => false
|
|
10
|
-
# ```
|
|
11
|
-
#
|
|
12
|
-
# The pattern may be:
|
|
13
|
-
#
|
|
14
|
-
# 1. Directory name pattern -- `lib`, or
|
|
15
|
-
# 2. *Glob* pattern -- `foo/**/bar.rb`
|
|
16
|
-
#
|
|
17
|
-
class Pattern
|
|
18
|
-
# Positive patterns, which is tested with `fnmatch`
|
|
19
|
-
attr_reader patterns: Array[String]
|
|
20
|
-
|
|
21
|
-
# Negative patterns, which is tested with `fnmatch`
|
|
22
|
-
attr_reader ignores: Array[String]
|
|
23
|
-
|
|
24
|
-
# Positive *dir name* pattern constructed from `#patterns`, which is tested with `start_with?`
|
|
25
|
-
attr_reader prefixes: Array[String]
|
|
26
|
-
|
|
27
|
-
# Negative *dir name* pattern constructed from `#ignores`, which is tested with `start_with?`
|
|
28
|
-
attr_reader ignore_prefixes: Array[String]
|
|
29
|
-
|
|
30
|
-
attr_reader ext: String
|
|
31
|
-
|
|
32
|
-
def initialize: (patterns: Array[String], ext: String, ?ignores: Array[String]) -> void
|
|
33
|
-
|
|
34
|
-
# Returns `true` if given path matches to *positive* pattern, but doesn't match to *negative* pattern
|
|
35
|
-
#
|
|
36
|
-
def =~: (Pathname | String path) -> bool
|
|
37
|
-
|
|
38
|
-
# Returns true if given `Pathname` matches to *positive* pattern
|
|
39
|
-
def match?: (Pathname path) -> bool
|
|
40
|
-
|
|
41
|
-
# Returns true if given `Pathname` matches to *negative* pattern
|
|
42
|
-
def ignore?: (Pathname path) -> bool
|
|
43
|
-
|
|
44
|
-
def test_string: (Pathname path, Array[String] patterns, Array[String] prefixes) -> bool
|
|
45
|
-
end
|
|
46
|
-
end
|
|
47
|
-
end
|
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
module Steep
|
|
2
|
-
class Project
|
|
3
|
-
class Target
|
|
4
|
-
attr_reader name: Symbol
|
|
5
|
-
|
|
6
|
-
attr_reader options: Options
|
|
7
|
-
|
|
8
|
-
attr_reader source_pattern: Pattern
|
|
9
|
-
|
|
10
|
-
attr_reader signature_pattern: Pattern
|
|
11
|
-
|
|
12
|
-
attr_reader code_diagnostics_config: untyped
|
|
13
|
-
|
|
14
|
-
def initialize: (name: Symbol, options: Options, source_pattern: Pattern, signature_pattern: Pattern, code_diagnostics_config: untyped) -> void
|
|
15
|
-
|
|
16
|
-
def possible_source_file?: (Pathname path) -> bool
|
|
17
|
-
|
|
18
|
-
def possible_signature_file?: (Pathname path) -> bool
|
|
19
|
-
|
|
20
|
-
def new_env_loader: (project: Project) -> RBS::EnvironmentLoader
|
|
21
|
-
|
|
22
|
-
def self.construct_env_loader: (options: Options, project: Project) -> RBS::EnvironmentLoader
|
|
23
|
-
end
|
|
24
|
-
end
|
|
25
|
-
end
|
data/sig/steep/project.rbs
DELETED
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
module Steep
|
|
2
|
-
class Project
|
|
3
|
-
attr_reader targets: Array[Target]
|
|
4
|
-
|
|
5
|
-
attr_reader steepfile_path: Pathname?
|
|
6
|
-
|
|
7
|
-
attr_reader base_dir: Pathname
|
|
8
|
-
|
|
9
|
-
def initialize: (steepfile_path: Pathname?, ?base_dir: Pathname?) -> void
|
|
10
|
-
|
|
11
|
-
def relative_path: (Pathname path) -> Pathname
|
|
12
|
-
|
|
13
|
-
def absolute_path: (Pathname path) -> Pathname
|
|
14
|
-
|
|
15
|
-
def target_for_source_path: (Pathname path) -> Target?
|
|
16
|
-
|
|
17
|
-
# Returns target or array of targets that *can* contain given path
|
|
18
|
-
#
|
|
19
|
-
# * `Target` will return if `path` is a source code
|
|
20
|
-
# * `Array[Target]` will return if `path` is a signature
|
|
21
|
-
#
|
|
22
|
-
# `path` can be non-existent file.
|
|
23
|
-
#
|
|
24
|
-
def targets_for_path: (Pathname path) -> (Target | Array[Target] | nil)
|
|
25
|
-
end
|
|
26
|
-
end
|
|
@@ -1,49 +0,0 @@
|
|
|
1
|
-
module Steep
|
|
2
|
-
module Server
|
|
3
|
-
class BaseWorker
|
|
4
|
-
interface _Queue[A]
|
|
5
|
-
def pop: () -> A?
|
|
6
|
-
|
|
7
|
-
def <<: (A) -> A
|
|
8
|
-
|
|
9
|
-
def close: () -> void
|
|
10
|
-
end
|
|
11
|
-
|
|
12
|
-
module LSP = LanguageServer::Protocol
|
|
13
|
-
|
|
14
|
-
@skip_jobs_after_shutdown: bool
|
|
15
|
-
|
|
16
|
-
@skip_job: bool
|
|
17
|
-
|
|
18
|
-
@shutdown: bool
|
|
19
|
-
|
|
20
|
-
attr_reader project: Project
|
|
21
|
-
|
|
22
|
-
attr_reader reader: LanguageServer::Protocol::Transport::Io::Reader
|
|
23
|
-
|
|
24
|
-
attr_reader writer: LanguageServer::Protocol::Transport::Io::Writer
|
|
25
|
-
|
|
26
|
-
attr_reader queue: _Queue[untyped]
|
|
27
|
-
|
|
28
|
-
class ShutdownJob
|
|
29
|
-
attr_reader id: String
|
|
30
|
-
|
|
31
|
-
def initialize: (id: String) -> void
|
|
32
|
-
end
|
|
33
|
-
|
|
34
|
-
def initialize: (project: Project, reader: LanguageServer::Protocol::Transport::Io::Reader, writer: LanguageServer::Protocol::Transport::Io::Writer) -> void
|
|
35
|
-
|
|
36
|
-
def skip_jobs_after_shutdown!: (?bool flag) -> void
|
|
37
|
-
|
|
38
|
-
def skip_jobs_after_shutdown?: () -> bool
|
|
39
|
-
|
|
40
|
-
def skip_job?: () -> bool
|
|
41
|
-
|
|
42
|
-
def handle_request: (untyped request) -> void
|
|
43
|
-
|
|
44
|
-
def handle_job: (untyped job) -> void
|
|
45
|
-
|
|
46
|
-
def run: () -> void
|
|
47
|
-
end
|
|
48
|
-
end
|
|
49
|
-
end
|
|
@@ -1,38 +0,0 @@
|
|
|
1
|
-
module Steep
|
|
2
|
-
module Server
|
|
3
|
-
module ChangeBuffer : _WithProject, _WithMutex
|
|
4
|
-
interface _WithProject
|
|
5
|
-
def project: () -> Project
|
|
6
|
-
end
|
|
7
|
-
|
|
8
|
-
interface _WithMutex
|
|
9
|
-
def mutex: () -> Mutex
|
|
10
|
-
end
|
|
11
|
-
|
|
12
|
-
type changes = Hash[Pathname, Array[Services::ContentChange]]
|
|
13
|
-
|
|
14
|
-
attr_reader buffered_changes: changes
|
|
15
|
-
|
|
16
|
-
# Yields `buffered_changes` to modify with synchronization
|
|
17
|
-
#
|
|
18
|
-
def push_buffer: [A] () { (changes) -> A } -> A
|
|
19
|
-
|
|
20
|
-
# Yields or returns a copy of `buffered_changes` after clearing `buffered_changes` content
|
|
21
|
-
#
|
|
22
|
-
def pop_buffer: [A] () { (changes) -> A } -> A
|
|
23
|
-
| () -> changes
|
|
24
|
-
|
|
25
|
-
# Load files from `project` to `buffered_changes`
|
|
26
|
-
#
|
|
27
|
-
def load_files: (project: Project, commandline_args: Array[String]) -> void
|
|
28
|
-
|
|
29
|
-
# Load changes from a request with `DidChangeTextDocumentParams` into `buffered_changes`
|
|
30
|
-
#
|
|
31
|
-
def collect_changes: (untyped request) -> void
|
|
32
|
-
|
|
33
|
-
# Reset the content of `uri` to `text`
|
|
34
|
-
#
|
|
35
|
-
def reset_change: (uri: String, text: String) -> void
|
|
36
|
-
end
|
|
37
|
-
end
|
|
38
|
-
end
|
|
@@ -1,37 +0,0 @@
|
|
|
1
|
-
module Steep
|
|
2
|
-
module Server
|
|
3
|
-
# DelayQueue provides a queue that delays running given job
|
|
4
|
-
#
|
|
5
|
-
# 1. The `delay` is specific to a DelayQueue instance, not job specific
|
|
6
|
-
# 2. It executes only the last job
|
|
7
|
-
#
|
|
8
|
-
# ```ruby
|
|
9
|
-
# queue = DelayQueue.new(delay: 0.5)
|
|
10
|
-
# queue.execute { pp 1 }
|
|
11
|
-
# queue.execute { pp 2 }
|
|
12
|
-
# queue.execute { pp 3 }
|
|
13
|
-
#
|
|
14
|
-
# # => Will print only `3`, and the jobs printing `1` and `2` will be discarded
|
|
15
|
-
# ```
|
|
16
|
-
#
|
|
17
|
-
# The job will run on `#thread`.
|
|
18
|
-
#
|
|
19
|
-
class DelayQueue
|
|
20
|
-
attr_reader delay: Float
|
|
21
|
-
|
|
22
|
-
attr_reader thread: Thread
|
|
23
|
-
|
|
24
|
-
attr_reader queue: Thread::Queue
|
|
25
|
-
|
|
26
|
-
attr_reader last_task: Proc
|
|
27
|
-
|
|
28
|
-
def initialize: (delay: Float) -> void
|
|
29
|
-
|
|
30
|
-
# The `#execute` method is not thread safe
|
|
31
|
-
#
|
|
32
|
-
# You should synchronize yourself if you want to call the method from multiple threads.
|
|
33
|
-
#
|
|
34
|
-
def execute: () { () -> void } -> void
|
|
35
|
-
end
|
|
36
|
-
end
|
|
37
|
-
end
|
|
@@ -1,90 +0,0 @@
|
|
|
1
|
-
use LanguageServer::Protocol::Transport::Io::*, Thread::Queue, RBS::AST::Comment
|
|
2
|
-
use Steep::Services::CompletionProvider, Steep::Services::TypeNameCompletion
|
|
3
|
-
use RBS::TypeName, RBS::Namespace
|
|
4
|
-
|
|
5
|
-
module Steep
|
|
6
|
-
module Server
|
|
7
|
-
class InteractionWorker < BaseWorker
|
|
8
|
-
include ChangeBuffer
|
|
9
|
-
|
|
10
|
-
class ApplyChangeJob
|
|
11
|
-
end
|
|
12
|
-
|
|
13
|
-
class HoverJob
|
|
14
|
-
attr_reader id: String
|
|
15
|
-
|
|
16
|
-
attr_reader path: Pathname
|
|
17
|
-
|
|
18
|
-
attr_reader line: Integer
|
|
19
|
-
|
|
20
|
-
attr_reader column: Integer
|
|
21
|
-
|
|
22
|
-
def initialize: (id: String, path: Pathname, line: Integer, column: Integer) -> void
|
|
23
|
-
end
|
|
24
|
-
|
|
25
|
-
class CompletionJob
|
|
26
|
-
attr_reader id: String
|
|
27
|
-
|
|
28
|
-
attr_reader path: Pathname
|
|
29
|
-
|
|
30
|
-
attr_reader line: Integer
|
|
31
|
-
|
|
32
|
-
attr_reader column: Integer
|
|
33
|
-
|
|
34
|
-
attr_reader trigger: String
|
|
35
|
-
|
|
36
|
-
def initialize: (id: String, path: Pathname, line: Integer, column: Integer, trigger: String) -> void
|
|
37
|
-
end
|
|
38
|
-
|
|
39
|
-
class SignatureHelpJob
|
|
40
|
-
attr_reader id: String
|
|
41
|
-
|
|
42
|
-
attr_reader path: Pathname
|
|
43
|
-
|
|
44
|
-
attr_reader line: Integer
|
|
45
|
-
|
|
46
|
-
attr_reader column: Integer
|
|
47
|
-
|
|
48
|
-
def initialize: (id: String, path: Pathname, line: Integer, column: Integer) -> void
|
|
49
|
-
end
|
|
50
|
-
|
|
51
|
-
type job = ApplyChangeJob | HoverJob | CompletionJob | SignatureHelpJob
|
|
52
|
-
|
|
53
|
-
module LSP = LanguageServer::Protocol
|
|
54
|
-
|
|
55
|
-
@last_signature_help_line: Integer
|
|
56
|
-
|
|
57
|
-
@last_signature_help_result: LanguageServer::Protocol::Interface::SignatureHelp
|
|
58
|
-
|
|
59
|
-
attr_reader service: Services::TypeCheckService
|
|
60
|
-
|
|
61
|
-
attr_reader mutex: Mutex
|
|
62
|
-
|
|
63
|
-
def initialize: (project: Project, reader: Reader, writer: Writer, ?queue: Queue) -> void
|
|
64
|
-
|
|
65
|
-
def handle_job: (job) -> void
|
|
66
|
-
|
|
67
|
-
@last_job_mutex: Mutex
|
|
68
|
-
|
|
69
|
-
@last_job: job?
|
|
70
|
-
|
|
71
|
-
def process_latest_job: [T] (job) { () -> T } -> T?
|
|
72
|
-
|
|
73
|
-
def queue_job: (job) -> void
|
|
74
|
-
|
|
75
|
-
type lsp_request = { id: String, method: String, params: untyped }
|
|
76
|
-
|
|
77
|
-
def handle_request: (lsp_request) -> void
|
|
78
|
-
|
|
79
|
-
def process_hover: (HoverJob job) -> LanguageServer::Protocol::Interface::Hover?
|
|
80
|
-
|
|
81
|
-
def process_completion: (CompletionJob job) -> LanguageServer::Protocol::Interface::CompletionList?
|
|
82
|
-
|
|
83
|
-
def process_signature_help: (SignatureHelpJob) -> LanguageServer::Protocol::Interface::SignatureHelp?
|
|
84
|
-
|
|
85
|
-
def format_completion_item_for_rbs: (Services::SignatureService, RBS::TypeName, CompletionJob job, String complete_text, Integer prefix_size) -> LanguageServer::Protocol::Interface::CompletionItem
|
|
86
|
-
|
|
87
|
-
def format_completion_item: (CompletionProvider::item item) -> LanguageServer::Protocol::Interface::CompletionItem
|
|
88
|
-
end
|
|
89
|
-
end
|
|
90
|
-
end
|
|
@@ -1,63 +0,0 @@
|
|
|
1
|
-
use RBS::TypeName
|
|
2
|
-
|
|
3
|
-
module Steep
|
|
4
|
-
module Server
|
|
5
|
-
# LSPFormatter translates hover content and completion item to markdown string
|
|
6
|
-
#
|
|
7
|
-
# The class has four main methods:
|
|
8
|
-
#
|
|
9
|
-
# * `markup_content` translates a string to `MarkupContent` object
|
|
10
|
-
# * `format_hover_content` translates a hover content to Markdown string
|
|
11
|
-
# * `format_completion_docs` translates a completion item to a documentation
|
|
12
|
-
# * `format_rbs_competion_docs` generates docs for completion item of RBS
|
|
13
|
-
#
|
|
14
|
-
module LSPFormatter
|
|
15
|
-
include Services
|
|
16
|
-
|
|
17
|
-
module LSP = LanguageServer::Protocol
|
|
18
|
-
|
|
19
|
-
# Translate given String to MarkupContent
|
|
20
|
-
#
|
|
21
|
-
def self?.markup_content: (String?) -> LanguageServer::Protocol::Interface::MarkupContent?
|
|
22
|
-
| () { () -> String? } -> LanguageServer::Protocol::Interface::MarkupContent?
|
|
23
|
-
|
|
24
|
-
# Translates a hover content to String
|
|
25
|
-
#
|
|
26
|
-
def self?.format_hover_content: (Services::HoverProvider::Ruby::content | Services::HoverProvider::RBS::content) -> String
|
|
27
|
-
|
|
28
|
-
# Translates a completion item to String
|
|
29
|
-
def self?.format_completion_docs: (Services::CompletionProvider::item) -> String
|
|
30
|
-
|
|
31
|
-
# Translates a completion item for RBS to String
|
|
32
|
-
def self?.format_rbs_completion_docs: (TypeName, summarizable_decl, Array[RBS::AST::Comment]) -> String
|
|
33
|
-
|
|
34
|
-
def self?.format_comment: (RBS::AST::Comment?, ?header: String?) -> String?
|
|
35
|
-
| (RBS::AST::Comment?, ?header: String?) { (String) -> void } -> void
|
|
36
|
-
|
|
37
|
-
def self?.format_comments: (Array[[String, RBS::AST::Comment?]]) -> String
|
|
38
|
-
|
|
39
|
-
def self?.local_variable: (Symbol, AST::Types::t) -> String
|
|
40
|
-
|
|
41
|
-
def self?.instance_variable: (Symbol, AST::Types::t) -> String
|
|
42
|
-
|
|
43
|
-
# Renders type application
|
|
44
|
-
def self?.name_and_args: (TypeName name, Array[RBS::Types::t] args) -> String
|
|
45
|
-
|
|
46
|
-
# Renders generic type definition
|
|
47
|
-
def self?.name_and_params: (TypeName name, Array[RBS::AST::TypeParam] params) -> String
|
|
48
|
-
|
|
49
|
-
type summarizable_decl = RBS::AST::Declarations::Class
|
|
50
|
-
| RBS::AST::Declarations::Module
|
|
51
|
-
| RBS::AST::Declarations::Interface
|
|
52
|
-
| RBS::AST::Declarations::TypeAlias
|
|
53
|
-
| RBS::AST::Declarations::ClassAlias
|
|
54
|
-
| RBS::AST::Declarations::ModuleAlias
|
|
55
|
-
| RBS::AST::Declarations::Global
|
|
56
|
-
| RBS::AST::Declarations::Constant
|
|
57
|
-
|
|
58
|
-
def self?.declaration_summary: (summarizable_decl) -> String
|
|
59
|
-
|
|
60
|
-
def self?.format_method_item_doc: (Array[_ToS], Array[method_name], Hash[method_name, RBS::AST::Comment?], ?String footer) -> String
|
|
61
|
-
end
|
|
62
|
-
end
|
|
63
|
-
end
|