mt-lang 0.3.8 → 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 +31 -14
- 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 +1 -3
- 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 +162 -50
- 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
|
@@ -3,18 +3,16 @@
|
|
|
3
3
|
module MilkTea
|
|
4
4
|
class Linter
|
|
5
5
|
module LinterSourceHelpers
|
|
6
|
-
private
|
|
7
|
-
|
|
8
6
|
def emit_line_too_long_warnings
|
|
9
7
|
return unless @max_line_length.positive?
|
|
10
8
|
return if @source.empty?
|
|
11
|
-
|
|
9
|
+
|
|
12
10
|
@source_lines.each_with_index do |line, index|
|
|
13
11
|
next if line.empty?
|
|
14
12
|
next if external_or_foreign_function_header_line?(line)
|
|
15
13
|
next unless line.length > @max_line_length
|
|
16
14
|
next unless Formatter.wrappable_long_line_candidate_text?(line)
|
|
17
|
-
|
|
15
|
+
|
|
18
16
|
fix = Formatter.build_long_line_wrap_fix(
|
|
19
17
|
@source,
|
|
20
18
|
index,
|
|
@@ -43,11 +41,11 @@ module MilkTea
|
|
|
43
41
|
def emit_event_capacity_warnings(source_file)
|
|
44
42
|
each_event_declaration(source_file) do |event_decl, owner_name|
|
|
45
43
|
next unless event_decl.capacity >= EVENT_STACK_SNAPSHOT_WARNING_THRESHOLD
|
|
46
|
-
|
|
44
|
+
|
|
47
45
|
warn_large_event_capacity(event_decl, owner_name:)
|
|
48
46
|
end
|
|
49
47
|
end
|
|
50
|
-
|
|
48
|
+
|
|
51
49
|
def each_event_declaration(source_file)
|
|
52
50
|
source_file.declarations.each do |declaration|
|
|
53
51
|
case declaration
|
|
@@ -71,60 +69,60 @@ module MilkTea
|
|
|
71
69
|
end
|
|
72
70
|
def profile_phase(name)
|
|
73
71
|
return yield unless @profile
|
|
74
|
-
|
|
72
|
+
|
|
75
73
|
@profile.measure(name) { yield }
|
|
76
74
|
end
|
|
77
75
|
def param_line(param, fallback: nil)
|
|
78
|
-
line = param.
|
|
76
|
+
line = param.line
|
|
79
77
|
line || fallback
|
|
80
78
|
end
|
|
81
|
-
|
|
79
|
+
|
|
82
80
|
def param_column(param)
|
|
83
|
-
param.
|
|
81
|
+
param.column
|
|
84
82
|
end
|
|
85
|
-
|
|
83
|
+
|
|
86
84
|
def declaration_column(declaration)
|
|
87
|
-
declaration.
|
|
85
|
+
declaration.column
|
|
88
86
|
end
|
|
89
87
|
def source_line_text(line)
|
|
90
88
|
return nil unless line && line >= 1 && line <= @source_lines.length
|
|
91
|
-
|
|
89
|
+
|
|
92
90
|
@source_lines[line - 1]
|
|
93
91
|
end
|
|
94
|
-
|
|
92
|
+
|
|
95
93
|
def source_code_line(line)
|
|
96
94
|
text = source_line_text(line)
|
|
97
95
|
return nil unless text
|
|
98
|
-
|
|
96
|
+
|
|
99
97
|
text.rstrip
|
|
100
98
|
end
|
|
101
|
-
|
|
99
|
+
|
|
102
100
|
def source_statement_span(line)
|
|
103
101
|
text = source_code_line(line)
|
|
104
102
|
return nil unless text
|
|
105
|
-
|
|
103
|
+
|
|
106
104
|
start_index = text.index(/\S/)
|
|
107
105
|
return nil unless start_index
|
|
108
|
-
|
|
106
|
+
|
|
109
107
|
[start_index + 1, text.length - start_index]
|
|
110
108
|
end
|
|
111
109
|
def source_condition_span(line, keyword_pattern:)
|
|
112
110
|
text = source_code_line(line)
|
|
113
111
|
return nil unless text
|
|
114
|
-
|
|
112
|
+
|
|
115
113
|
match = text.match(/\A\s*(?:#{keyword_pattern})\s+(.*?)\s*:/)
|
|
116
114
|
return nil unless match
|
|
117
|
-
|
|
115
|
+
|
|
118
116
|
condition = match[1].rstrip
|
|
119
117
|
return nil if condition.empty?
|
|
120
|
-
|
|
118
|
+
|
|
121
119
|
[match.begin(1) + 1, condition.length]
|
|
122
120
|
end
|
|
123
121
|
def expression_line(expr)
|
|
124
122
|
return nil unless expr
|
|
125
|
-
|
|
126
|
-
return expr.line if expr.
|
|
127
|
-
|
|
123
|
+
|
|
124
|
+
return expr.line if expr.line
|
|
125
|
+
|
|
128
126
|
case expr
|
|
129
127
|
when AST::BinaryOp
|
|
130
128
|
expression_line(expr.left) || expression_line(expr.right)
|
|
@@ -156,14 +154,14 @@ module MilkTea
|
|
|
156
154
|
nil
|
|
157
155
|
end
|
|
158
156
|
end
|
|
159
|
-
|
|
157
|
+
|
|
160
158
|
def expression_column(expr)
|
|
161
159
|
return nil unless expr
|
|
162
|
-
|
|
163
|
-
if expr.
|
|
160
|
+
|
|
161
|
+
if expr.column
|
|
164
162
|
return expr.column
|
|
165
163
|
end
|
|
166
|
-
|
|
164
|
+
|
|
167
165
|
case expr
|
|
168
166
|
when AST::BinaryOp
|
|
169
167
|
expression_column(expr.left) || expression_column(expr.right)
|
|
@@ -191,10 +189,10 @@ module MilkTea
|
|
|
191
189
|
nil
|
|
192
190
|
end
|
|
193
191
|
end
|
|
194
|
-
|
|
192
|
+
|
|
195
193
|
def expression_length(expr)
|
|
196
194
|
return nil unless expr
|
|
197
|
-
|
|
195
|
+
|
|
198
196
|
case expr
|
|
199
197
|
when AST::Identifier
|
|
200
198
|
expr.name.length
|
|
@@ -225,14 +223,14 @@ module MilkTea
|
|
|
225
223
|
1
|
|
226
224
|
end
|
|
227
225
|
end
|
|
228
|
-
|
|
226
|
+
|
|
229
227
|
def statement_column(statement)
|
|
230
228
|
return nil unless statement
|
|
231
|
-
|
|
232
|
-
if statement.
|
|
229
|
+
|
|
230
|
+
if statement.column
|
|
233
231
|
return statement.column
|
|
234
232
|
end
|
|
235
|
-
|
|
233
|
+
|
|
236
234
|
case statement
|
|
237
235
|
when AST::IfStmt
|
|
238
236
|
statement.branches.first&.column || statement.else_column
|
|
@@ -250,14 +248,14 @@ module MilkTea
|
|
|
250
248
|
nil
|
|
251
249
|
end
|
|
252
250
|
end
|
|
253
|
-
|
|
251
|
+
|
|
254
252
|
def statement_length(statement)
|
|
255
253
|
return nil unless statement
|
|
256
|
-
|
|
254
|
+
|
|
257
255
|
if statement.respond_to?(:length) && statement.length
|
|
258
256
|
return statement.length
|
|
259
257
|
end
|
|
260
|
-
|
|
258
|
+
|
|
261
259
|
case statement
|
|
262
260
|
when AST::LocalDecl, AST::ForStmt
|
|
263
261
|
statement.name.length
|
|
@@ -277,7 +275,7 @@ module MilkTea
|
|
|
277
275
|
nil
|
|
278
276
|
end
|
|
279
277
|
end
|
|
280
|
-
|
|
278
|
+
|
|
281
279
|
def condition_span(expr, line:, keyword_pattern:)
|
|
282
280
|
source_span = source_condition_span(line, keyword_pattern:)
|
|
283
281
|
if source_span
|
|
@@ -286,7 +284,7 @@ module MilkTea
|
|
|
286
284
|
[expression_line(expr) || line, expression_column(expr), expression_length(expr)]
|
|
287
285
|
end
|
|
288
286
|
end
|
|
289
|
-
|
|
287
|
+
|
|
290
288
|
def condition_symbol_name(expr)
|
|
291
289
|
case expr
|
|
292
290
|
when AST::Identifier
|
|
@@ -344,10 +342,10 @@ module MilkTea
|
|
|
344
342
|
statement.body.each { |s| each_statement_expression(s, &block) }
|
|
345
343
|
end
|
|
346
344
|
end
|
|
347
|
-
|
|
345
|
+
|
|
348
346
|
def walk_expression_tree(expression, &block)
|
|
349
347
|
return unless expression
|
|
350
|
-
|
|
348
|
+
|
|
351
349
|
yield expression
|
|
352
350
|
case expression
|
|
353
351
|
when AST::MemberAccess
|
|
@@ -386,7 +384,7 @@ module MilkTea
|
|
|
386
384
|
end
|
|
387
385
|
def walk_statement_lists(stmts, &block)
|
|
388
386
|
return if stmts.nil? || stmts.empty?
|
|
389
|
-
|
|
387
|
+
|
|
390
388
|
yield stmts
|
|
391
389
|
stmts.each do |statement|
|
|
392
390
|
case statement
|
|
@@ -3,17 +3,15 @@
|
|
|
3
3
|
module MilkTea
|
|
4
4
|
class Linter
|
|
5
5
|
module LinterTrailingComma
|
|
6
|
-
private
|
|
7
|
-
|
|
8
6
|
def emit_trailing_list_comma_warnings(source_file)
|
|
9
7
|
return if @tokens.nil? || @tokens.empty?
|
|
10
|
-
|
|
8
|
+
|
|
11
9
|
warned_sites = Set.new
|
|
12
10
|
each_call_argument_list_candidate(source_file) do |call_expression, symbol_name|
|
|
13
11
|
site = trailing_call_argument_comma_site(call_expression)
|
|
14
12
|
next unless site
|
|
15
13
|
next if warned_sites.include?(site)
|
|
16
|
-
|
|
14
|
+
|
|
17
15
|
warned_sites << site
|
|
18
16
|
@warnings << Warning.new(
|
|
19
17
|
path: @path,
|
|
@@ -27,7 +25,7 @@ module MilkTea
|
|
|
27
25
|
)
|
|
28
26
|
end
|
|
29
27
|
end
|
|
30
|
-
|
|
28
|
+
|
|
31
29
|
def each_call_argument_list_candidate(source_file, &block)
|
|
32
30
|
source_file.declarations.each do |declaration|
|
|
33
31
|
case declaration
|
|
@@ -40,29 +38,29 @@ module MilkTea
|
|
|
40
38
|
end
|
|
41
39
|
end
|
|
42
40
|
end
|
|
43
|
-
|
|
41
|
+
|
|
44
42
|
def each_call_in_statement_list(stmts, &block)
|
|
45
43
|
walk_statement_lists(stmts) do |statement_list|
|
|
46
44
|
statement_list.each do |statement|
|
|
47
45
|
each_statement_expression(statement) do |expression|
|
|
48
46
|
next unless expression.is_a?(AST::Call)
|
|
49
47
|
next if expression.arguments.nil? || expression.arguments.empty?
|
|
50
|
-
|
|
48
|
+
|
|
51
49
|
block.call(expression, call_symbol_name(expression.callee))
|
|
52
50
|
end
|
|
53
51
|
end
|
|
54
52
|
end
|
|
55
53
|
end
|
|
56
|
-
|
|
54
|
+
|
|
57
55
|
def each_call_in_expression(expression, &block)
|
|
58
56
|
walk_expression_tree(expression) do |node|
|
|
59
57
|
next unless node.is_a?(AST::Call)
|
|
60
58
|
next if node.arguments.nil? || node.arguments.empty?
|
|
61
|
-
|
|
59
|
+
|
|
62
60
|
block.call(node, call_symbol_name(node.callee))
|
|
63
61
|
end
|
|
64
62
|
end
|
|
65
|
-
|
|
63
|
+
|
|
66
64
|
def call_symbol_name(callee)
|
|
67
65
|
case callee
|
|
68
66
|
when AST::Identifier
|
|
@@ -75,18 +73,18 @@ module MilkTea
|
|
|
75
73
|
nil
|
|
76
74
|
end
|
|
77
75
|
end
|
|
78
|
-
|
|
76
|
+
|
|
79
77
|
def trailing_call_argument_comma_site(call_expression)
|
|
80
78
|
return nil unless call_expression.is_a?(AST::Call)
|
|
81
79
|
return nil if call_expression.arguments.nil? || call_expression.arguments.empty?
|
|
82
|
-
|
|
80
|
+
|
|
83
81
|
callee_line = expression_line(call_expression.callee)
|
|
84
82
|
callee_column = expression_column(call_expression.callee)
|
|
85
83
|
return nil unless callee_line && callee_column
|
|
86
|
-
|
|
84
|
+
|
|
87
85
|
callee_token_idx = @token_index_by_location[[callee_line, callee_column]]
|
|
88
86
|
return nil unless callee_token_idx
|
|
89
|
-
|
|
87
|
+
|
|
90
88
|
lparen_idx = nil
|
|
91
89
|
cursor = callee_token_idx
|
|
92
90
|
while cursor < @tokens.length
|
|
@@ -96,16 +94,16 @@ module MilkTea
|
|
|
96
94
|
break
|
|
97
95
|
end
|
|
98
96
|
break if token.type == :newline && token.line > callee_line
|
|
99
|
-
|
|
97
|
+
|
|
100
98
|
cursor += 1
|
|
101
99
|
end
|
|
102
100
|
return nil unless lparen_idx
|
|
103
|
-
|
|
101
|
+
|
|
104
102
|
paren_depth = 0
|
|
105
103
|
bracket_depth = 0
|
|
106
104
|
comma_token = nil
|
|
107
105
|
cursor = lparen_idx + 1
|
|
108
|
-
|
|
106
|
+
|
|
109
107
|
while cursor < @tokens.length
|
|
110
108
|
token = @tokens[cursor]
|
|
111
109
|
case token.type
|
|
@@ -114,7 +112,7 @@ module MilkTea
|
|
|
114
112
|
when :rparen
|
|
115
113
|
if paren_depth.zero? && bracket_depth.zero?
|
|
116
114
|
return [comma_token.line, comma_token.column] if comma_token
|
|
117
|
-
|
|
115
|
+
|
|
118
116
|
return nil
|
|
119
117
|
end
|
|
120
118
|
paren_depth -= 1 if paren_depth.positive?
|
|
@@ -131,7 +129,7 @@ module MilkTea
|
|
|
131
129
|
end
|
|
132
130
|
cursor += 1
|
|
133
131
|
end
|
|
134
|
-
|
|
132
|
+
|
|
135
133
|
nil
|
|
136
134
|
end
|
|
137
135
|
end
|