Skip to content

Commit b33a44a

Browse files
committed
Make Document generic
1 parent 8dfcb85 commit b33a44a

22 files changed

+127
-35
lines changed

lib/ruby_lsp/document.rb

+8-5
Original file line numberDiff line numberDiff line change
@@ -12,10 +12,13 @@ class LanguageId < T::Enum
1212

1313
extend T::Sig
1414
extend T::Helpers
15+
extend T::Generic
16+
17+
ParseResultType = type_member
1518

1619
abstract!
1720

18-
sig { returns(Prism::ParseResult) }
21+
sig { returns(ParseResultType) }
1922
attr_reader :parse_result
2023

2124
sig { returns(String) }
@@ -38,10 +41,10 @@ def initialize(source:, version:, uri:, encoding: Encoding::UTF_8)
3841
@version = T.let(version, Integer)
3942
@uri = T.let(uri, URI::Generic)
4043
@needs_parsing = T.let(true, T::Boolean)
41-
@parse_result = T.let(parse, Prism::ParseResult)
44+
@parse_result = T.let(parse, ParseResultType)
4245
end
4346

44-
sig { params(other: Document).returns(T::Boolean) }
47+
sig { params(other: Document[T.untyped]).returns(T::Boolean) }
4548
def ==(other)
4649
self.class == other.class && uri == other.uri && @source == other.source
4750
end
@@ -54,7 +57,7 @@ def language_id; end
5457
type_parameters(:T)
5558
.params(
5659
request_name: String,
57-
block: T.proc.params(document: Document).returns(T.type_parameter(:T)),
60+
block: T.proc.params(document: Document[ParseResultType]).returns(T.type_parameter(:T)),
5861
).returns(T.type_parameter(:T))
5962
end
6063
def cache_fetch(request_name, &block)
@@ -93,7 +96,7 @@ def push_edits(edits, version:)
9396
@cache.clear
9497
end
9598

96-
sig { abstract.returns(Prism::ParseResult) }
99+
sig { abstract.returns(ParseResultType) }
97100
def parse; end
98101

99102
sig { abstract.returns(T::Boolean) }

lib/ruby_lsp/erb_document.rb

+4-1
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,11 @@
44
module RubyLsp
55
class ERBDocument < Document
66
extend T::Sig
7+
extend T::Generic
78

8-
sig { override.returns(Prism::ParseResult) }
9+
ParseResultType = type_member { { fixed: Prism::ParseResult } }
10+
11+
sig { override.returns(ParseResultType) }
912
def parse
1013
return @parse_result unless @needs_parsing
1114

lib/ruby_lsp/requests/code_actions.rb

+1-1
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ def provider
3737

3838
sig do
3939
params(
40-
document: Document,
40+
document: T.any(RubyDocument, ERBDocument),
4141
range: T::Hash[Symbol, T.untyped],
4242
context: T::Hash[Symbol, T.untyped],
4343
).void

lib/ruby_lsp/requests/completion.rb

+1-1
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ def provider
4646

4747
sig do
4848
params(
49-
document: Document,
49+
document: T.any(RubyDocument, ERBDocument),
5050
global_state: GlobalState,
5151
params: T::Hash[Symbol, T.untyped],
5252
sorbet_level: RubyDocument::SorbetLevel,

lib/ruby_lsp/requests/definition.rb

+1-1
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ class Definition < Request
3838

3939
sig do
4040
params(
41-
document: Document,
41+
document: T.any(RubyDocument, ERBDocument),
4242
global_state: GlobalState,
4343
position: T::Hash[Symbol, T.untyped],
4444
dispatcher: Prism::Dispatcher,

lib/ruby_lsp/requests/diagnostics.rb

+1-1
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ def provider
3232
end
3333
end
3434

35-
sig { params(global_state: GlobalState, document: Document).void }
35+
sig { params(global_state: GlobalState, document: RubyDocument).void }
3636
def initialize(global_state, document)
3737
super()
3838
@active_linters = T.let(global_state.active_linters, T::Array[Support::Formatter])

lib/ruby_lsp/requests/document_highlight.rb

+1-1
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ class DocumentHighlight < Request
2929

3030
sig do
3131
params(
32-
document: Document,
32+
document: T.any(RubyDocument, ERBDocument),
3333
position: T::Hash[Symbol, T.untyped],
3434
dispatcher: Prism::Dispatcher,
3535
).void

lib/ruby_lsp/requests/formatting.rb

+1-1
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ def provider
4040
end
4141
end
4242

43-
sig { params(global_state: GlobalState, document: Document).void }
43+
sig { params(global_state: GlobalState, document: RubyDocument).void }
4444
def initialize(global_state, document)
4545
super()
4646
@document = document

lib/ruby_lsp/requests/hover.rb

+1-1
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ def provider
3232

3333
sig do
3434
params(
35-
document: Document,
35+
document: T.any(RubyDocument, ERBDocument),
3636
global_state: GlobalState,
3737
position: T::Hash[Symbol, T.untyped],
3838
dispatcher: Prism::Dispatcher,

lib/ruby_lsp/requests/inlay_hints.rb

+1-1
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ def provider
5252

5353
sig do
5454
params(
55-
document: Document,
55+
document: T.any(RubyDocument, ERBDocument),
5656
range: T::Hash[Symbol, T.untyped],
5757
hints_configuration: RequestConfig,
5858
dispatcher: Prism::Dispatcher,

lib/ruby_lsp/requests/on_type_formatting.rb

+1-1
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ def provider
4242

4343
sig do
4444
params(
45-
document: Document,
45+
document: RubyDocument,
4646
position: T::Hash[Symbol, T.untyped],
4747
trigger_character: String,
4848
client_name: String,

lib/ruby_lsp/requests/prepare_type_hierarchy.rb

+1-1
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ def provider
3535

3636
sig do
3737
params(
38-
document: Document,
38+
document: T.any(RubyDocument, ERBDocument),
3939
index: RubyIndexer::Index,
4040
position: T::Hash[Symbol, T.untyped],
4141
).void

lib/ruby_lsp/requests/selection_ranges.rb

+2-1
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,8 @@ module Requests
2323
class SelectionRanges < Request
2424
extend T::Sig
2525
include Support::Common
26-
sig { params(document: Document).void }
26+
27+
sig { params(document: T.any(RubyDocument, ERBDocument)).void }
2728
def initialize(document)
2829
super()
2930
@document = document

lib/ruby_lsp/requests/show_syntax_tree.rb

+1-1
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ module Requests
2020
class ShowSyntaxTree < Request
2121
extend T::Sig
2222

23-
sig { params(document: Document, range: T.nilable(T::Hash[Symbol, T.untyped])).void }
23+
sig { params(document: RubyDocument, range: T.nilable(T::Hash[Symbol, T.untyped])).void }
2424
def initialize(document, range)
2525
super()
2626
@document = document

lib/ruby_lsp/requests/signature_help.rb

+1-1
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ def provider
4141

4242
sig do
4343
params(
44-
document: Document,
44+
document: T.any(RubyDocument, ERBDocument),
4545
global_state: GlobalState,
4646
position: T::Hash[Symbol, T.untyped],
4747
context: T.nilable(T::Hash[Symbol, T.untyped]),

lib/ruby_lsp/requests/support/formatter.rb

+2-2
Original file line numberDiff line numberDiff line change
@@ -10,13 +10,13 @@ module Formatter
1010

1111
interface!
1212

13-
sig { abstract.params(uri: URI::Generic, document: Document).returns(T.nilable(String)) }
13+
sig { abstract.params(uri: URI::Generic, document: RubyDocument).returns(T.nilable(String)) }
1414
def run_formatting(uri, document); end
1515

1616
sig do
1717
abstract.params(
1818
uri: URI::Generic,
19-
document: Document,
19+
document: RubyDocument,
2020
).returns(T.nilable(T::Array[Interface::Diagnostic]))
2121
end
2222
def run_diagnostic(uri, document); end

lib/ruby_lsp/requests/support/rubocop_diagnostic.rb

+1-1
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ class RuboCopDiagnostic
3131

3232
# TODO: avoid passing document once we have alternative ways to get at
3333
# encoding and file source
34-
sig { params(document: Document, offense: RuboCop::Cop::Offense, uri: URI::Generic).void }
34+
sig { params(document: RubyDocument, offense: RuboCop::Cop::Offense, uri: URI::Generic).void }
3535
def initialize(document, offense, uri)
3636
@document = document
3737
@offense = offense

lib/ruby_lsp/requests/support/rubocop_formatter.rb

+2-2
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ def initialize
1717
@format_runner = T.let(RuboCopRunner.new("-a"), RuboCopRunner)
1818
end
1919

20-
sig { override.params(uri: URI::Generic, document: Document).returns(T.nilable(String)) }
20+
sig { override.params(uri: URI::Generic, document: RubyDocument).returns(T.nilable(String)) }
2121
def run_formatting(uri, document)
2222
filename = T.must(uri.to_standardized_path || uri.opaque)
2323

@@ -29,7 +29,7 @@ def run_formatting(uri, document)
2929
sig do
3030
override.params(
3131
uri: URI::Generic,
32-
document: Document,
32+
document: RubyDocument,
3333
).returns(T.nilable(T::Array[Interface::Diagnostic]))
3434
end
3535
def run_diagnostic(uri, document)

lib/ruby_lsp/requests/support/syntax_tree_formatter.rb

+2-2
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ def initialize
2929
)
3030
end
3131

32-
sig { override.params(uri: URI::Generic, document: Document).returns(T.nilable(String)) }
32+
sig { override.params(uri: URI::Generic, document: RubyDocument).returns(T.nilable(String)) }
3333
def run_formatting(uri, document)
3434
path = uri.to_standardized_path
3535
return if path && @options.ignore_files.any? { |pattern| File.fnmatch?("*/#{pattern}", path) }
@@ -40,7 +40,7 @@ def run_formatting(uri, document)
4040
sig do
4141
override.params(
4242
uri: URI::Generic,
43-
document: Document,
43+
document: RubyDocument,
4444
).returns(T.nilable(T::Array[Interface::Diagnostic]))
4545
end
4646
def run_diagnostic(uri, document)

lib/ruby_lsp/ruby_document.rb

+6-1
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,11 @@
33

44
module RubyLsp
55
class RubyDocument < Document
6+
extend T::Sig
7+
extend T::Generic
8+
9+
ParseResultType = type_member { { fixed: Prism::ParseResult } }
10+
611
class SorbetLevel < T::Enum
712
enums do
813
None = new("none")
@@ -13,7 +18,7 @@ class SorbetLevel < T::Enum
1318
end
1419
end
1520

16-
sig { override.returns(Prism::ParseResult) }
21+
sig { override.returns(ParseResultType) }
1722
def parse
1823
return @parse_result unless @needs_parsing
1924

0 commit comments

Comments
 (0)