mt-lang 0.3.9 → 0.3.10
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/lib/milk_tea/base.rb +1 -2
- data/lib/milk_tea/bindings/bindgen/ast_parser.rb +0 -2
- data/lib/milk_tea/bindings/bindgen/declaration.rb +0 -2
- data/lib/milk_tea/bindings/bindgen/emitter.rb +0 -2
- data/lib/milk_tea/bindings/bindgen/overrides.rb +0 -2
- data/lib/milk_tea/bindings/bindgen/type_mapper.rb +51 -53
- data/lib/milk_tea/bindings/imported_bindings/generator.rb +7 -9
- data/lib/milk_tea/bindings/imported_bindings/method_source.rb +0 -2
- data/lib/milk_tea/bindings/imported_bindings/naming.rb +6 -8
- data/lib/milk_tea/bindings/imported_bindings.rb +0 -2
- data/lib/milk_tea/bindings/opengl_registry.rb +3 -7
- data/lib/milk_tea/bindings/steamworks.rb +12 -16
- data/lib/milk_tea/bindings/upstream_sources.rb +10 -14
- data/lib/milk_tea/bindings/vendored_box2d.rb +10 -12
- data/lib/milk_tea/bindings/vendored_cjson.rb +6 -8
- data/lib/milk_tea/bindings/vendored_flecs.rb +10 -12
- data/lib/milk_tea/bindings/vendored_glfw.rb +11 -13
- data/lib/milk_tea/bindings/vendored_libuv.rb +11 -13
- data/lib/milk_tea/bindings/vendored_pcre2.rb +11 -13
- data/lib/milk_tea/bindings/vendored_raylib.rb +6 -10
- data/lib/milk_tea/bindings/vendored_sdl3.rb +11 -13
- data/lib/milk_tea/bindings/vendored_steamworks.rb +1 -5
- data/lib/milk_tea/core/ast.rb +103 -45
- data/lib/milk_tea/core/async_runtime_installer.rb +0 -2
- data/lib/milk_tea/core/bindings/attribute_binding.rb +1 -3
- data/lib/milk_tea/core/c_backend/aggregate_utils.rb +147 -84
- data/lib/milk_tea/core/c_backend/control_flow_emission.rb +394 -396
- data/lib/milk_tea/core/c_backend/expressions.rb +489 -476
- data/lib/milk_tea/core/c_backend/feature_detection.rb +446 -437
- data/lib/milk_tea/core/c_backend/format_helpers.rb +0 -2
- data/lib/milk_tea/core/c_backend/reachability.rb +339 -341
- data/lib/milk_tea/core/c_backend/reinterpret.rb +231 -217
- data/lib/milk_tea/core/c_backend/runtime_helpers.rb +531 -526
- data/lib/milk_tea/core/c_backend/statements.rb +528 -530
- data/lib/milk_tea/core/c_backend/type_collectors.rb +1344 -1346
- data/lib/milk_tea/core/c_backend/type_declaration.rb +215 -213
- data/lib/milk_tea/core/c_backend/type_system.rb +347 -349
- data/lib/milk_tea/core/c_backend.rb +17 -9
- data/lib/milk_tea/core/compatibility_helpers.rb +0 -2
- data/lib/milk_tea/core/compile_time/const_eval.rb +7 -12
- data/lib/milk_tea/core/compile_time.rb +32 -38
- data/lib/milk_tea/core/control_flow/builder.rb +3 -5
- data/lib/milk_tea/core/control_flow/constant_propagation.rb +14 -17
- data/lib/milk_tea/core/control_flow/definite_assignment.rb +0 -1
- data/lib/milk_tea/core/ir.rb +10 -10
- data/lib/milk_tea/core/lexer/character_classes.rb +5 -7
- data/lib/milk_tea/core/lexer/format_strings.rb +7 -9
- data/lib/milk_tea/core/lexer/heredocs.rb +22 -22
- data/lib/milk_tea/core/lexer/indentation.rb +0 -2
- data/lib/milk_tea/core/lexer/numbers.rb +0 -2
- data/lib/milk_tea/core/lexer/recovery.rb +0 -2
- data/lib/milk_tea/core/lexer/strings.rb +0 -2
- data/lib/milk_tea/core/lexer/symbols.rb +0 -2
- data/lib/milk_tea/core/lexer/trivia.rb +0 -2
- data/lib/milk_tea/core/lexer.rb +0 -2
- data/lib/milk_tea/core/lowering/async/analysis.rb +0 -2
- data/lib/milk_tea/core/lowering/async/lowering.rb +1264 -1265
- data/lib/milk_tea/core/lowering/async/normalization.rb +0 -2
- data/lib/milk_tea/core/lowering/async.rb +627 -630
- data/lib/milk_tea/core/lowering/block.rb +413 -416
- data/lib/milk_tea/core/lowering/calls.rb +1381 -1384
- data/lib/milk_tea/core/lowering/declarations.rb +180 -183
- data/lib/milk_tea/core/lowering/dyn.rb +48 -50
- data/lib/milk_tea/core/lowering/events.rb +983 -985
- data/lib/milk_tea/core/lowering/expressions.rb +1513 -1518
- data/lib/milk_tea/core/lowering/foreign_cstr.rb +181 -184
- data/lib/milk_tea/core/lowering/functions.rb +185 -188
- data/lib/milk_tea/core/lowering/loops.rb +1028 -1031
- data/lib/milk_tea/core/lowering/proc.rb +363 -366
- data/lib/milk_tea/core/lowering/resolve.rb +2133 -2135
- data/lib/milk_tea/core/lowering/scans.rb +179 -181
- data/lib/milk_tea/core/lowering/str_buffer.rb +102 -105
- data/lib/milk_tea/core/lowering/utils.rb +1040 -1044
- data/lib/milk_tea/core/lowering.rb +5 -7
- data/lib/milk_tea/core/module_binder.rb +0 -2
- data/lib/milk_tea/core/module_loader/errors.rb +4 -2
- data/lib/milk_tea/core/module_loader.rb +113 -20
- data/lib/milk_tea/core/module_path_resolver.rb +0 -2
- data/lib/milk_tea/core/module_roots.rb +6 -8
- data/lib/milk_tea/core/parser/attributes.rb +0 -2
- data/lib/milk_tea/core/parser/blocks.rb +0 -2
- data/lib/milk_tea/core/parser/declarations.rb +0 -2
- data/lib/milk_tea/core/parser/expressions.rb +8 -9
- data/lib/milk_tea/core/parser/recovery.rb +0 -2
- data/lib/milk_tea/core/parser/statements.rb +0 -2
- data/lib/milk_tea/core/parser/types.rb +8 -10
- data/lib/milk_tea/core/parser.rb +0 -2
- data/lib/milk_tea/core/pretty_printer/ast_formatter.rb +31 -33
- data/lib/milk_tea/core/pretty_printer/base_formatter.rb +0 -2
- data/lib/milk_tea/core/pretty_printer/ir_formatter.rb +0 -2
- data/lib/milk_tea/core/semantic_analyzer/analysis_context.rb +0 -2
- data/lib/milk_tea/core/semantic_analyzer/attributes.rb +14 -16
- data/lib/milk_tea/core/semantic_analyzer/calls.rb +0 -2
- data/lib/milk_tea/core/semantic_analyzer/expressions.rb +1 -14
- data/lib/milk_tea/core/semantic_analyzer/flow_refinement.rb +18 -21
- data/lib/milk_tea/core/semantic_analyzer/foreign_functions.rb +0 -3
- data/lib/milk_tea/core/semantic_analyzer/function_binding.rb +12 -15
- data/lib/milk_tea/core/semantic_analyzer/generics.rb +57 -59
- data/lib/milk_tea/core/semantic_analyzer/interface_conformance.rb +0 -2
- data/lib/milk_tea/core/semantic_analyzer/name_resolution.rb +5 -9
- data/lib/milk_tea/core/semantic_analyzer/nullability.rb +0 -3
- data/lib/milk_tea/core/semantic_analyzer/statements.rb +35 -40
- data/lib/milk_tea/core/semantic_analyzer/top_level.rb +10 -12
- data/lib/milk_tea/core/semantic_analyzer/type_compatibility.rb +0 -6
- data/lib/milk_tea/core/semantic_analyzer/type_declaration.rb +102 -105
- data/lib/milk_tea/core/semantic_analyzer.rb +17 -8
- data/lib/milk_tea/core/types/layout.rb +21 -22
- data/lib/milk_tea/core/types/predicates.rb +0 -2
- data/lib/milk_tea/core/types/registry.rb +16 -18
- data/lib/milk_tea/core/types/visitor.rb +0 -4
- data/lib/milk_tea/dap/backends/lldb_dap.rb +0 -2
- data/lib/milk_tea/dap/protocol.rb +1 -1
- data/lib/milk_tea/dap/server/breakpoints.rb +0 -2
- data/lib/milk_tea/dap/server/debug_map.rb +0 -2
- data/lib/milk_tea/dap/server/handlers.rb +0 -2
- data/lib/milk_tea/dap/server/launch.rb +0 -2
- data/lib/milk_tea/dap/server/lldb_backend.rb +8 -10
- data/lib/milk_tea/dap/server/pause_diagnostics.rb +14 -16
- data/lib/milk_tea/dap/server/utilities.rb +0 -2
- data/lib/milk_tea/dap/server/wire.rb +0 -2
- data/lib/milk_tea/dap/server.rb +0 -2
- data/lib/milk_tea/lsp/diagnostics.rb +16 -16
- data/lib/milk_tea/lsp/server/call_hierarchy.rb +11 -12
- data/lib/milk_tea/lsp/server/code_actions.rb +355 -357
- data/lib/milk_tea/lsp/server/code_lens.rb +23 -25
- data/lib/milk_tea/lsp/server/completion.rb +873 -875
- data/lib/milk_tea/lsp/server/configuration.rb +129 -131
- data/lib/milk_tea/lsp/server/debug_info.rb +0 -2
- data/lib/milk_tea/lsp/server/definition.rb +564 -565
- data/lib/milk_tea/lsp/server/diagnostics_scheduling.rb +191 -193
- data/lib/milk_tea/lsp/server/execute_command.rb +0 -2
- data/lib/milk_tea/lsp/server/folding_range.rb +0 -4
- data/lib/milk_tea/lsp/server/formatting.rb +478 -480
- data/lib/milk_tea/lsp/server/hover.rb +1282 -1284
- data/lib/milk_tea/lsp/server/inlay_hints.rb +179 -181
- data/lib/milk_tea/lsp/server/lifecycle.rb +192 -194
- data/lib/milk_tea/lsp/server/linked_editing_range.rb +0 -2
- data/lib/milk_tea/lsp/server/on_type_formatting.rb +0 -2
- data/lib/milk_tea/lsp/server/progress.rb +0 -2
- data/lib/milk_tea/lsp/server/references.rb +316 -318
- data/lib/milk_tea/lsp/server/rename.rb +445 -447
- data/lib/milk_tea/lsp/server/selection_range.rb +0 -4
- data/lib/milk_tea/lsp/server/semantic_tokens.rb +1318 -1320
- data/lib/milk_tea/lsp/server/signature_help.rb +146 -148
- data/lib/milk_tea/lsp/server/text_documents.rb +99 -101
- data/lib/milk_tea/lsp/server/type_hierarchy.rb +2 -4
- data/lib/milk_tea/lsp/server/utilities.rb +397 -399
- data/lib/milk_tea/lsp/server.rb +0 -3
- data/lib/milk_tea/lsp/workspace/analysis.rb +40 -42
- data/lib/milk_tea/lsp/workspace/dependency_graph.rb +4 -10
- data/lib/milk_tea/lsp/workspace/utilities.rb +19 -19
- data/lib/milk_tea/packages/atomic_write.rb +4 -5
- data/lib/milk_tea/packages/dependency_solver.rb +15 -15
- data/lib/milk_tea/packages/lock.rb +4 -4
- data/lib/milk_tea/packages/manager_cli.rb +1 -1
- data/lib/milk_tea/packages/manifest.rb +3 -3
- data/lib/milk_tea/packages/registry_store.rb +4 -6
- data/lib/milk_tea/packages/services.rb +16 -16
- data/lib/milk_tea/packages/source_cache.rb +4 -6
- data/lib/milk_tea/packages/source_resolver.rb +44 -44
- data/lib/milk_tea/packages/version.rb +8 -8
- data/lib/milk_tea/tooling/build.rb +3 -7
- data/lib/milk_tea/tooling/build_cache.rb +0 -2
- data/lib/milk_tea/tooling/debug_info_formatter.rb +31 -33
- data/lib/milk_tea/tooling/debug_map.rb +8 -10
- data/lib/milk_tea/tooling/docs_app.rb +0 -2
- data/lib/milk_tea/tooling/linter/doc_tags.rb +25 -27
- data/lib/milk_tea/tooling/linter/fix_engine.rb +87 -24
- data/lib/milk_tea/tooling/linter/flow_rules.rb +44 -46
- data/lib/milk_tea/tooling/linter/imports_platform.rb +14 -16
- data/lib/milk_tea/tooling/linter/release_rules.rb +3 -5
- data/lib/milk_tea/tooling/linter/reserved_names.rb +23 -25
- data/lib/milk_tea/tooling/linter/rules.rb +87 -89
- data/lib/milk_tea/tooling/linter/source_helpers.rb +40 -42
- data/lib/milk_tea/tooling/linter/trailing_comma.rb +17 -19
- data/lib/milk_tea/tooling/linter/visitors.rb +112 -54
- data/lib/milk_tea/tooling/linter.rb +0 -2
- data/lib/milk_tea/tooling/project_scaffold.rb +0 -2
- data/lib/milk_tea/tooling/run.rb +0 -2
- data/lib/milk_tea/tooling/toolchain_cli.rb +0 -2
- data/std/cli.mt +13 -32
- data/std/color.mt +28 -28
- data/std/encoding.mt +4 -4
- data/std/graph.mt +1 -2
- data/std/hash.mt +14 -14
- data/std/http/server.mt +3 -3
- data/std/input.mt +1 -1
- data/std/json.mt +1 -1
- data/std/linear_algebra.mt +6 -6
- data/std/net/mux.mt +1 -1
- data/std/noise.mt +23 -23
- data/std/parse.mt +2 -2
- data/std/process.mt +3 -4
- data/std/sparse_set.mt +1 -1
- data/std/steering.mt +5 -5
- data/std/str.mt +1 -1
- data/std/tween.mt +4 -4
- data/std/utility.mt +3 -3
- metadata +2 -2
|
@@ -6,80 +6,78 @@ module MilkTea
|
|
|
6
6
|
@pool = {}
|
|
7
7
|
@mutex = Mutex.new
|
|
8
8
|
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
def reset!
|
|
9
|
+
def self.reset!
|
|
12
10
|
@mutex.synchronize { @pool.clear }
|
|
13
11
|
end
|
|
14
12
|
|
|
15
|
-
def _intern(key, &construct)
|
|
13
|
+
def self._intern(key, &construct)
|
|
16
14
|
@mutex.synchronize do
|
|
17
15
|
@pool[key] ||= construct.call
|
|
18
16
|
end
|
|
19
17
|
end
|
|
20
18
|
|
|
21
|
-
def primitive(name)
|
|
19
|
+
def self.primitive(name)
|
|
22
20
|
_intern([:primitive, name]) { Primitive.new(name) }
|
|
23
21
|
end
|
|
24
22
|
|
|
25
|
-
def nullable(base)
|
|
23
|
+
def self.nullable(base)
|
|
26
24
|
_intern([:nullable, base]) { Nullable.new(base) }
|
|
27
25
|
end
|
|
28
26
|
|
|
29
|
-
def generic_instance(name, arguments)
|
|
27
|
+
def self.generic_instance(name, arguments)
|
|
30
28
|
args = arguments.freeze
|
|
31
29
|
_intern([:generic, name, args]) { GenericInstance.new(name, args) }
|
|
32
30
|
end
|
|
33
31
|
|
|
34
|
-
def span(element_type)
|
|
32
|
+
def self.span(element_type)
|
|
35
33
|
_intern([:span, element_type]) { Span.new(element_type) }
|
|
36
34
|
end
|
|
37
35
|
|
|
38
|
-
def task(result_type)
|
|
36
|
+
def self.task(result_type)
|
|
39
37
|
_intern([:task, result_type]) { Task.new(result_type) }
|
|
40
38
|
end
|
|
41
39
|
|
|
42
|
-
def string_view
|
|
40
|
+
def self.string_view
|
|
43
41
|
_intern([:string_view]) { StringView.new }
|
|
44
42
|
end
|
|
45
43
|
|
|
46
|
-
def function(name, params:, return_type:, receiver_type: nil, receiver_editable: false, variadic: false, external: false)
|
|
44
|
+
def self.function(name, params:, return_type:, receiver_type: nil, receiver_editable: false, variadic: false, external: false)
|
|
47
45
|
params_frozen = params.freeze
|
|
48
46
|
_intern([:function, name, params_frozen, return_type, receiver_type, receiver_editable, variadic, external]) {
|
|
49
47
|
Function.new(name, params: params_frozen, return_type: return_type, receiver_type: receiver_type, receiver_editable: receiver_editable, variadic: variadic, external: external)
|
|
50
48
|
}
|
|
51
49
|
end
|
|
52
50
|
|
|
53
|
-
def proc(params:, return_type:)
|
|
51
|
+
def self.proc(params:, return_type:)
|
|
54
52
|
params_frozen = params.freeze
|
|
55
53
|
_intern([:proc, params_frozen, return_type]) { Proc.new(params: params_frozen, return_type: return_type) }
|
|
56
54
|
end
|
|
57
55
|
|
|
58
|
-
def parameter(name, type, mutable: false, passing_mode: :plain, boundary_type: nil)
|
|
56
|
+
def self.parameter(name, type, mutable: false, passing_mode: :plain, boundary_type: nil)
|
|
59
57
|
_intern([:parameter, name, type, mutable, passing_mode, boundary_type]) {
|
|
60
58
|
Parameter.new(name, type, mutable: mutable, passing_mode: passing_mode, boundary_type: boundary_type)
|
|
61
59
|
}
|
|
62
60
|
end
|
|
63
61
|
|
|
64
|
-
def tuple(element_types, field_names: nil)
|
|
62
|
+
def self.tuple(element_types, field_names: nil)
|
|
65
63
|
et_frozen = element_types.freeze
|
|
66
64
|
fn_frozen = field_names&.freeze
|
|
67
65
|
_intern([:tuple, et_frozen, fn_frozen]) { Tuple.new(et_frozen, field_names: fn_frozen) }
|
|
68
66
|
end
|
|
69
67
|
|
|
70
|
-
def soa(element_type, count:)
|
|
68
|
+
def self.soa(element_type, count:)
|
|
71
69
|
_intern([:soa, element_type, count]) { SoA.new(element_type, count: count) }
|
|
72
70
|
end
|
|
73
71
|
|
|
74
|
-
def simd(element_type, lane_count:)
|
|
72
|
+
def self.simd(element_type, lane_count:)
|
|
75
73
|
_intern([:simd, element_type, lane_count]) { Simd.new(element_type, lane_count: lane_count) }
|
|
76
74
|
end
|
|
77
75
|
|
|
78
|
-
def lifetime_ref(name)
|
|
76
|
+
def self.lifetime_ref(name)
|
|
79
77
|
LifetimeRef.new(name)
|
|
80
78
|
end
|
|
81
79
|
|
|
82
|
-
def dyn(interface_binding, type_arguments = [])
|
|
80
|
+
def self.dyn(interface_binding, type_arguments = [])
|
|
83
81
|
Dyn.new(interface_binding, type_arguments)
|
|
84
82
|
end
|
|
85
83
|
end
|
|
@@ -188,8 +188,6 @@ module MilkTea
|
|
|
188
188
|
end
|
|
189
189
|
alias visit_function visit_proc
|
|
190
190
|
|
|
191
|
-
private
|
|
192
|
-
|
|
193
191
|
def visit_children(type)
|
|
194
192
|
type.children.each do |child|
|
|
195
193
|
visit(child)
|
|
@@ -431,8 +429,6 @@ module MilkTea
|
|
|
431
429
|
end
|
|
432
430
|
end
|
|
433
431
|
|
|
434
|
-
private
|
|
435
|
-
|
|
436
432
|
def with_context(new_context)
|
|
437
433
|
old = @context
|
|
438
434
|
@context = new_context
|
|
@@ -4,8 +4,6 @@ module MilkTea
|
|
|
4
4
|
module DAP
|
|
5
5
|
class Server
|
|
6
6
|
module ServerLLDBBackend
|
|
7
|
-
private
|
|
8
|
-
|
|
9
7
|
def using_lldb_backend?
|
|
10
8
|
@session.backend_kind == "lldb-dap"
|
|
11
9
|
end
|
|
@@ -22,14 +20,14 @@ module MilkTea
|
|
|
22
20
|
end
|
|
23
21
|
|
|
24
22
|
@lldb_backend = if @backend_factory
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
23
|
+
build_backend_via_factory(adapter_command)
|
|
24
|
+
else
|
|
25
|
+
Backends::LLDBDAP.new(
|
|
26
|
+
adapter_command: adapter_command,
|
|
27
|
+
on_event: method(:handle_backend_event),
|
|
28
|
+
on_request: method(:handle_backend_request)
|
|
29
|
+
)
|
|
30
|
+
end
|
|
33
31
|
@lldb_backend.start!
|
|
34
32
|
end
|
|
35
33
|
|
|
@@ -4,8 +4,6 @@ module MilkTea
|
|
|
4
4
|
module DAP
|
|
5
5
|
class Server
|
|
6
6
|
module ServerPauseDiagnostics
|
|
7
|
-
private
|
|
8
|
-
|
|
9
7
|
def emit_pause_diagnostic_async(body)
|
|
10
8
|
return unless body.is_a?(Hash)
|
|
11
9
|
|
|
@@ -80,22 +78,22 @@ module MilkTea
|
|
|
80
78
|
line = dap_value(frame, "line")
|
|
81
79
|
|
|
82
80
|
location_source = if !source_path.empty? && !source_path.include?("`")
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
81
|
+
source_path
|
|
82
|
+
elsif !source_name.empty?
|
|
83
|
+
source_name
|
|
84
|
+
elsif !source_path.empty?
|
|
85
|
+
source_path
|
|
86
|
+
else
|
|
87
|
+
instruction_pointer
|
|
88
|
+
end
|
|
91
89
|
|
|
92
90
|
location = if location_source.to_s.empty?
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
91
|
+
"(unknown)"
|
|
92
|
+
elsif line.to_i.positive? && !location_source.include?(":#{line}")
|
|
93
|
+
"#{location_source}:#{line}"
|
|
94
|
+
else
|
|
95
|
+
location_source
|
|
96
|
+
end
|
|
99
97
|
|
|
100
98
|
if include_ip && !instruction_pointer.empty? && location != instruction_pointer
|
|
101
99
|
"#{frame_name} @ #{location} ip=#{instruction_pointer}"
|
data/lib/milk_tea/dap/server.rb
CHANGED
|
@@ -77,7 +77,7 @@ module MilkTea
|
|
|
77
77
|
imports: ast.respond_to?(:imports) ? (ast.imports || []) : [],
|
|
78
78
|
directives: ast.respond_to?(:directives) ? (ast.directives || []) : [],
|
|
79
79
|
declarations: ast.respond_to?(:declarations) ? (ast.declarations || []) : [],
|
|
80
|
-
line: ast.
|
|
80
|
+
line: ast.line || 1,
|
|
81
81
|
node_ids: ast.respond_to?(:node_ids) ? ast.node_ids : {},
|
|
82
82
|
)
|
|
83
83
|
end
|
|
@@ -90,14 +90,14 @@ module MilkTea
|
|
|
90
90
|
cross_by_uri = {}
|
|
91
91
|
target_path = path.is_a?(String) ? File.expand_path(path) : nil
|
|
92
92
|
sema_snapshot.diagnostics.reject { |diagnostic| redundant_unknown_import_diagnostic?(diagnostic, unresolved_import_paths) }
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
93
|
+
.each do |diagnostic|
|
|
94
|
+
if target_path && diagnostic.path && File.expand_path(diagnostic.path) != target_path
|
|
95
|
+
target_uri = path_to_uri(diagnostic.path)
|
|
96
|
+
(cross_by_uri[target_uri] ||= []) << format_tooling_diagnostic(diagnostic, stage: 'sema')
|
|
97
|
+
else
|
|
98
|
+
diagnostics << format_tooling_diagnostic(diagnostic, stage: 'sema')
|
|
99
|
+
end
|
|
100
|
+
end
|
|
101
101
|
sema_ms = elapsed_ms(sema_start) if sema_start
|
|
102
102
|
rescue StandardError => e
|
|
103
103
|
log_diagnostics_warning("Error collecting diagnostics: #{e.message}")
|
|
@@ -369,12 +369,12 @@ module MilkTea
|
|
|
369
369
|
start_char, end_char = extract_warning_range(diagnostic, content)
|
|
370
370
|
|
|
371
371
|
lsp_severity = case diagnostic.severity
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
372
|
+
when :error then 1
|
|
373
|
+
when :warning then 2
|
|
374
|
+
when :info then 3
|
|
375
|
+
when :hint then 4
|
|
376
|
+
else 2
|
|
377
|
+
end
|
|
378
378
|
{
|
|
379
379
|
range: {
|
|
380
380
|
start: { line: line_index, character: start_char },
|
|
@@ -393,7 +393,7 @@ module MilkTea
|
|
|
393
393
|
# Returns [start_char, end_char] in 0-based LSP coordinates.
|
|
394
394
|
# Falls back to [0, 1] when a precise token span cannot be inferred.
|
|
395
395
|
def self.extract_warning_range(warning, content)
|
|
396
|
-
if warning.
|
|
396
|
+
if warning.column
|
|
397
397
|
start_char = [warning.column.to_i - 1, 0].max
|
|
398
398
|
len = warning.respond_to?(:length) ? warning.length.to_i : 0
|
|
399
399
|
len = 1 if len <= 0
|
|
@@ -4,8 +4,6 @@ module MilkTea
|
|
|
4
4
|
module LSP
|
|
5
5
|
class Server
|
|
6
6
|
module ServerCallHierarchy
|
|
7
|
-
private
|
|
8
|
-
|
|
9
7
|
def handle_prepare_call_hierarchy(params)
|
|
10
8
|
text_document = params["textDocument"]
|
|
11
9
|
position = params["position"]
|
|
@@ -176,8 +174,8 @@ module MilkTea
|
|
|
176
174
|
end
|
|
177
175
|
|
|
178
176
|
def binding_range(binding)
|
|
179
|
-
line = binding.ast.
|
|
180
|
-
col = binding.ast.
|
|
177
|
+
line = binding.ast.line ? binding.ast.line - 1 : 0
|
|
178
|
+
col = binding.ast.column ? binding.ast.column - 1 : 0
|
|
181
179
|
length = binding.name.length
|
|
182
180
|
{
|
|
183
181
|
start: { line: line, character: col },
|
|
@@ -188,8 +186,8 @@ module MilkTea
|
|
|
188
186
|
def selection_range_from_binding(binding)
|
|
189
187
|
name_len = binding.name.length
|
|
190
188
|
ast = binding.ast
|
|
191
|
-
line = ast.
|
|
192
|
-
col = ast.
|
|
189
|
+
line = ast.line ? ast.line - 1 : 0
|
|
190
|
+
col = ast.column ? ast.column - 1 : 0
|
|
193
191
|
|
|
194
192
|
if ast.respond_to?(:name)
|
|
195
193
|
name_ast = ast.name
|
|
@@ -226,11 +224,12 @@ module MilkTea
|
|
|
226
224
|
callee_name = extract_callee_name(node.callee, facts)
|
|
227
225
|
next unless callee_name
|
|
228
226
|
|
|
227
|
+
callee = node.callee
|
|
228
|
+
line_start = callee.line ? callee.line - 1 : 0
|
|
229
|
+
col_start = callee.column ? callee.column - 1 : 0
|
|
229
230
|
range = {
|
|
230
|
-
start: { line:
|
|
231
|
-
|
|
232
|
-
end: { line: node.callee.respond_to?(:line) ? node.callee.line - 1 : 0,
|
|
233
|
-
character: (node.callee.respond_to?(:column) ? node.callee.column - 1 : 0) + callee_name.length },
|
|
231
|
+
start: { line: line_start, character: col_start },
|
|
232
|
+
end: { line: line_start, character: col_start + callee_name.length },
|
|
234
233
|
}
|
|
235
234
|
|
|
236
235
|
callees[callee_name] ||= []
|
|
@@ -260,8 +259,8 @@ module MilkTea
|
|
|
260
259
|
end
|
|
261
260
|
|
|
262
261
|
def token_range(token)
|
|
263
|
-
line = token.
|
|
264
|
-
col = token.
|
|
262
|
+
line = token.line ? token.line - 1 : 0
|
|
263
|
+
col = token.column ? token.column - 1 : 0
|
|
265
264
|
len = token.respond_to?(:lexeme) ? token.lexeme.length : 0
|
|
266
265
|
{
|
|
267
266
|
start: { line: line, character: col },
|