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
data/lib/milk_tea/lsp/server.rb
CHANGED
|
@@ -4,8 +4,6 @@ module MilkTea
|
|
|
4
4
|
module LSP
|
|
5
5
|
class Workspace
|
|
6
6
|
module WorkspaceAnalysis
|
|
7
|
-
private
|
|
8
|
-
|
|
9
7
|
# ── Compilation helpers ─────────────────────────────────────────────────
|
|
10
8
|
|
|
11
9
|
def lex_document(uri)
|
|
@@ -127,46 +125,46 @@ module MilkTea
|
|
|
127
125
|
def analyze_document(uri)
|
|
128
126
|
path = uri_to_path(uri)
|
|
129
127
|
snapshot = if path && File.file?(path)
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
128
|
+
parse_result = MilkTea::Parser.parse_collecting_errors(get_content(uri), path: uri)
|
|
129
|
+
ast = parse_result.ast
|
|
130
|
+
return @last_good_tooling_snapshot_cache[uri] if ast.nil?
|
|
131
|
+
|
|
132
|
+
@ast_cache[uri] = ast
|
|
133
|
+
|
|
134
|
+
resolution = DependencyResolution.resolve(path, mode: @dependency_resolution_mode)
|
|
135
|
+
return nil unless resolution.ok?
|
|
136
|
+
|
|
137
|
+
effective_platform = effective_platform_for_path(path)
|
|
138
|
+
ensure_root_platform_compatible!(path, effective_platform)
|
|
139
|
+
|
|
140
|
+
loader = MilkTea::ModuleLoader.new(
|
|
141
|
+
module_roots: module_roots_for_path(path, locked: resolution.locked),
|
|
142
|
+
package_graph: package_graph_for_path(path, locked: resolution.locked),
|
|
143
|
+
shared_cache: @shared_module_cache,
|
|
144
|
+
source_overrides: file_backed_source_overrides,
|
|
145
|
+
platform: effective_platform,
|
|
146
|
+
)
|
|
147
|
+
ast = with_inferred_module_name(ast, loader:, path:)
|
|
148
|
+
import_resolution = loader.imported_modules_for_ast_collecting_errors(ast, importer_path: path)
|
|
149
|
+
MilkTea::SemanticAnalyzer.tooling_snapshot(
|
|
150
|
+
ast,
|
|
151
|
+
imported_modules: import_resolution.modules,
|
|
152
|
+
allow_missing_imports: true,
|
|
153
|
+
path: path,
|
|
154
|
+
)
|
|
155
|
+
else
|
|
156
|
+
ast = get_ast(uri)
|
|
157
|
+
return @last_good_tooling_snapshot_cache[uri] if ast.nil?
|
|
158
|
+
|
|
159
|
+
result = MilkTea::SemanticAnalyzer.check_collecting_errors(ast, path:)
|
|
160
|
+
facts = result[:analysis]
|
|
161
|
+
MilkTea::SemanticAnalyzer::ToolingSnapshot.new(facts:, diagnostics: (Array(result[:errors]).map { |e| e.to_diagnostic(path:) } || []).freeze)
|
|
162
|
+
end
|
|
163
|
+
if snapshot&.facts
|
|
164
|
+
@last_good_tooling_snapshot_cache[uri] = snapshot
|
|
165
|
+
@last_good_facts_cache[uri] = snapshot.facts
|
|
166
|
+
@document_module_names[uri] = snapshot.facts.module_name
|
|
167
|
+
end
|
|
170
168
|
snapshot
|
|
171
169
|
rescue MilkTea::LexError, MilkTea::SemanticError, ModuleLoadError, PackageLockError
|
|
172
170
|
@last_good_tooling_snapshot_cache[uri]
|
|
@@ -100,8 +100,6 @@ module MilkTea
|
|
|
100
100
|
end
|
|
101
101
|
end
|
|
102
102
|
|
|
103
|
-
private
|
|
104
|
-
|
|
105
103
|
def clear_dependency_index
|
|
106
104
|
@dependency_module_name_by_uri.clear
|
|
107
105
|
@dependency_imports_by_uri.clear
|
|
@@ -111,10 +109,10 @@ module MilkTea
|
|
|
111
109
|
|
|
112
110
|
def update_dependency_index(uri, facts)
|
|
113
111
|
imported_module_names = if facts
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
112
|
+
facts.imports.each_value.filter_map(&:name).to_set
|
|
113
|
+
else
|
|
114
|
+
dependency_index_imports_for(uri)
|
|
115
|
+
end
|
|
118
116
|
|
|
119
117
|
if imported_module_names&.empty?
|
|
120
118
|
imported_module_names = dependency_index_imports_for(uri) || Set.new
|
|
@@ -246,15 +244,11 @@ module MilkTea
|
|
|
246
244
|
open_document_uris
|
|
247
245
|
end
|
|
248
246
|
|
|
249
|
-
public
|
|
250
|
-
|
|
251
247
|
def reverse_import_dependents_for(module_name)
|
|
252
248
|
ensure_full_reverse_import_index
|
|
253
249
|
@reverse_import_dependents[module_name]
|
|
254
250
|
end
|
|
255
251
|
|
|
256
|
-
private
|
|
257
|
-
|
|
258
252
|
def ensure_full_reverse_import_index
|
|
259
253
|
return if @full_reverse_index_built
|
|
260
254
|
|
|
@@ -265,21 +265,21 @@ module MilkTea
|
|
|
265
265
|
next unless id_tok.type == :identifier
|
|
266
266
|
|
|
267
267
|
kind = case kw_tok.type
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
268
|
+
when :function then 'function'
|
|
269
|
+
when :struct then 'struct'
|
|
270
|
+
when :union then 'union'
|
|
271
|
+
when :enum then 'enum'
|
|
272
|
+
when :flags then 'flags'
|
|
273
|
+
when :variant then 'variant'
|
|
274
|
+
when :type then 'type_alias'
|
|
275
|
+
when :const then 'constant'
|
|
276
|
+
when :let then 'variable'
|
|
277
|
+
when :var then 'variable'
|
|
278
|
+
when :event then 'event'
|
|
279
|
+
when :extending then 'struct'
|
|
280
|
+
when :opaque then 'struct'
|
|
281
|
+
when :interface then 'interface'
|
|
282
|
+
end
|
|
283
283
|
|
|
284
284
|
symbols << {
|
|
285
285
|
name: id_tok.lexeme,
|
|
@@ -447,10 +447,10 @@ module MilkTea
|
|
|
447
447
|
clamped_line = [[line.to_i, 0].max, lines.length - 1].min
|
|
448
448
|
|
|
449
449
|
preceding = if clamped_line.zero?
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
450
|
+
''
|
|
451
|
+
else
|
|
452
|
+
lines[0...clamped_line].join("\n") + "\n"
|
|
453
|
+
end
|
|
454
454
|
|
|
455
455
|
line_text = lines[clamped_line] || ''
|
|
456
456
|
target_units = [char.to_i, 0].max
|
|
@@ -5,15 +5,14 @@ require "tempfile"
|
|
|
5
5
|
|
|
6
6
|
module MilkTea
|
|
7
7
|
module PackageAtomicWrite
|
|
8
|
-
module_function
|
|
9
8
|
|
|
10
|
-
def write(path, content, binmode: false)
|
|
9
|
+
def self.write(path, content, binmode: false)
|
|
11
10
|
open(path, binmode:) do |file|
|
|
12
11
|
file.write(content)
|
|
13
12
|
end
|
|
14
13
|
end
|
|
15
14
|
|
|
16
|
-
def open(path, binmode: false)
|
|
15
|
+
def self.open(path, binmode: false)
|
|
17
16
|
expanded_path = File.expand_path(path)
|
|
18
17
|
directory = File.dirname(expanded_path)
|
|
19
18
|
|
|
@@ -35,13 +34,13 @@ module MilkTea
|
|
|
35
34
|
expanded_path
|
|
36
35
|
end
|
|
37
36
|
|
|
38
|
-
def replace(source_path, destination_path)
|
|
37
|
+
def self.replace(source_path, destination_path)
|
|
39
38
|
File.rename(source_path, destination_path)
|
|
40
39
|
rescue Errno::EACCES, Errno::EEXIST, Errno::EPERM
|
|
41
40
|
replace_via_backup(source_path, destination_path)
|
|
42
41
|
end
|
|
43
42
|
|
|
44
|
-
def replace_via_backup(source_path, destination_path)
|
|
43
|
+
def self.replace_via_backup(source_path, destination_path)
|
|
45
44
|
backup_path = "#{destination_path}.bak.#{$$}.#{Thread.current.object_id}"
|
|
46
45
|
|
|
47
46
|
File.rename(destination_path, backup_path) if File.exist?(destination_path)
|
|
@@ -171,21 +171,21 @@ module MilkTea
|
|
|
171
171
|
|
|
172
172
|
versions.each_with_object({}) do |(key, version), locked|
|
|
173
173
|
normalized_key = case key
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
174
|
+
when PackageSourceResolver::RegistryDependencyKey
|
|
175
|
+
PackageSourceResolver.registry_dependency_key(
|
|
176
|
+
parent_source_key: key.parent_source_key,
|
|
177
|
+
dependency_name: key.dependency_name,
|
|
178
|
+
)
|
|
179
|
+
when Array
|
|
180
|
+
if key.length != 2
|
|
181
|
+
raise PackageDependencySolverError,
|
|
182
|
+
"registry dependency key must contain parent manifest path and dependency name"
|
|
183
|
+
end
|
|
184
|
+
|
|
185
|
+
PackageSourceResolver.registry_dependency_key(parent_source_key: key[0], dependency_name: key[1])
|
|
186
|
+
else
|
|
187
|
+
key.to_s
|
|
188
|
+
end
|
|
189
189
|
|
|
190
190
|
locked[normalized_key] = version.to_s
|
|
191
191
|
end
|
|
@@ -137,10 +137,10 @@ module MilkTea
|
|
|
137
137
|
end
|
|
138
138
|
|
|
139
139
|
root_package_id = if schema_version == 1
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
140
|
+
root_package_name
|
|
141
|
+
else
|
|
142
|
+
required_string(config, "root_package_id", lock_path)
|
|
143
|
+
end
|
|
144
144
|
|
|
145
145
|
[root_manifest, lock_path, root_package_name, root_package_id, schema_version, packages]
|
|
146
146
|
end
|
|
@@ -135,9 +135,9 @@ module MilkTea
|
|
|
135
135
|
end
|
|
136
136
|
|
|
137
137
|
duplicate_basenames = asset_paths.group_by { |asset_path| File.basename(asset_path) }
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
138
|
+
.select { |_basename, paths| paths.length > 1 }
|
|
139
|
+
.keys
|
|
140
|
+
.sort
|
|
141
141
|
return asset_paths if duplicate_basenames.empty?
|
|
142
142
|
|
|
143
143
|
raise PackageManifestError, "build.assets entries must have unique basenames: #{duplicate_basenames.join(", ")}"
|
|
@@ -21,10 +21,10 @@ module MilkTea
|
|
|
21
21
|
|
|
22
22
|
xdg_data_home = env.fetch("XDG_DATA_HOME", "").to_s.strip
|
|
23
23
|
base_root = if xdg_data_home.empty?
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
24
|
+
File.join(home || Dir.home, ".local", "share")
|
|
25
|
+
else
|
|
26
|
+
File.expand_path(xdg_data_home)
|
|
27
|
+
end
|
|
28
28
|
|
|
29
29
|
File.join(base_root, "milk_tea", "registry")
|
|
30
30
|
end
|
|
@@ -155,8 +155,6 @@ module MilkTea
|
|
|
155
155
|
self.class.http_url?(@upstream_root)
|
|
156
156
|
end
|
|
157
157
|
|
|
158
|
-
private
|
|
159
|
-
|
|
160
158
|
def extract_package_version(package_or_identity, version)
|
|
161
159
|
if package_or_identity.respond_to?(:package_name) && package_or_identity.respond_to?(:version)
|
|
162
160
|
[package_or_identity.package_name, package_or_identity.version]
|
|
@@ -20,22 +20,22 @@ module MilkTea
|
|
|
20
20
|
|
|
21
21
|
def source_resolver(mode)
|
|
22
22
|
@source_resolvers[mode] ||= case mode
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
23
|
+
when :reject
|
|
24
|
+
PackageSourceResolver.new(source_cache: source_cache)
|
|
25
|
+
when :cache
|
|
26
|
+
PackageSourceResolver.new(
|
|
27
|
+
source_cache: source_cache,
|
|
28
|
+
remote_resolution: :cache,
|
|
29
|
+
)
|
|
30
|
+
when :materialize
|
|
31
|
+
PackageSourceResolver.new(
|
|
32
|
+
source_cache: source_cache,
|
|
33
|
+
remote_resolution: :materialize,
|
|
34
|
+
source_fetcher: source_fetcher,
|
|
35
|
+
)
|
|
36
|
+
else
|
|
37
|
+
raise ArgumentError, "unknown dependency source resolution mode #{mode.inspect}"
|
|
38
|
+
end
|
|
39
39
|
end
|
|
40
40
|
end
|
|
41
41
|
end
|
|
@@ -7,10 +7,10 @@ module MilkTea
|
|
|
7
7
|
def self.default_root(env: ENV, home: nil)
|
|
8
8
|
xdg_cache_home = env.fetch("XDG_CACHE_HOME", "").to_s.strip
|
|
9
9
|
base_root = if xdg_cache_home.empty?
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
10
|
+
File.join(home || Dir.home, ".cache")
|
|
11
|
+
else
|
|
12
|
+
File.expand_path(xdg_cache_home)
|
|
13
|
+
end
|
|
14
14
|
|
|
15
15
|
File.join(base_root, "milk_tea", "package_sources")
|
|
16
16
|
end
|
|
@@ -58,8 +58,6 @@ module MilkTea
|
|
|
58
58
|
File.file?(manifest_path_for(source_or_identity))
|
|
59
59
|
end
|
|
60
60
|
|
|
61
|
-
private
|
|
62
|
-
|
|
63
61
|
def extract_identity(source_or_identity)
|
|
64
62
|
if source_or_identity.respond_to?(:identity)
|
|
65
63
|
source_or_identity.identity
|
|
@@ -284,22 +284,22 @@ module MilkTea
|
|
|
284
284
|
def resolve_cache_backed_dependency(identity, dependency:, parent_manifest:)
|
|
285
285
|
context_label = "dependency #{dependency.name} in #{parent_manifest.manifest_path}"
|
|
286
286
|
source = case @remote_resolution
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
287
|
+
when :reject
|
|
288
|
+
raise PackageSourceResolverError,
|
|
289
|
+
"#{context_label} uses #{identity.kind} resolution, but live dependency resolution only supports local path dependencies; run mtc deps lock and then use --locked or --frozen"
|
|
290
|
+
when :cache
|
|
291
|
+
source_for_identity(identity, context_label)
|
|
292
|
+
when :materialize
|
|
293
|
+
unless @source_fetcher
|
|
294
|
+
raise PackageSourceResolverError,
|
|
295
|
+
"#{context_label} requested #{identity.kind} materialization without a package source fetcher"
|
|
296
|
+
end
|
|
297
|
+
|
|
298
|
+
@source_fetcher.materialize_identity(package_name: dependency.name, identity:)
|
|
299
|
+
source_for_identity(identity, context_label)
|
|
300
|
+
else
|
|
301
|
+
raise PackageSourceResolverError, "unknown remote resolution mode #{@remote_resolution.inspect}"
|
|
302
|
+
end
|
|
303
303
|
|
|
304
304
|
manifest = PackageManifest.load(source.local_root)
|
|
305
305
|
if manifest.package_name != dependency.name
|
|
@@ -334,16 +334,16 @@ module MilkTea
|
|
|
334
334
|
|
|
335
335
|
def source_for_identity(identity, context_label)
|
|
336
336
|
local_root = if identity.is_a?(PathIdentity)
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
337
|
+
identity.path
|
|
338
|
+
else
|
|
339
|
+
manifest_path = @source_cache.manifest_path_for(identity)
|
|
340
|
+
unless File.file?(manifest_path)
|
|
341
|
+
raise PackageSourceResolverError,
|
|
342
|
+
"package source_kind #{identity.kind.inspect} in #{context_label} is not materialized in the source cache: expected #{manifest_path}"
|
|
343
|
+
end
|
|
344
344
|
|
|
345
|
-
|
|
346
|
-
|
|
345
|
+
@source_cache.materialized_root_for(identity)
|
|
346
|
+
end
|
|
347
347
|
|
|
348
348
|
Source.new(
|
|
349
349
|
identity:,
|
|
@@ -353,10 +353,10 @@ module MilkTea
|
|
|
353
353
|
|
|
354
354
|
def registry_dependency_parent_source_key(parent_manifest:, parent_source:)
|
|
355
355
|
identity = if parent_source
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
356
|
+
parent_source.identity
|
|
357
|
+
else
|
|
358
|
+
source_for_manifest(parent_manifest).identity
|
|
359
|
+
end
|
|
360
360
|
|
|
361
361
|
self.class.source_key_for_identity(identity)
|
|
362
362
|
end
|
|
@@ -366,21 +366,21 @@ module MilkTea
|
|
|
366
366
|
|
|
367
367
|
versions.each_with_object({}) do |(key, version), resolved|
|
|
368
368
|
normalized_key = case key
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
369
|
+
when RegistryDependencyKey
|
|
370
|
+
self.class.registry_dependency_key(
|
|
371
|
+
parent_source_key: key.parent_source_key,
|
|
372
|
+
dependency_name: key.dependency_name,
|
|
373
|
+
)
|
|
374
|
+
when Array
|
|
375
|
+
if key.length != 2
|
|
376
|
+
raise PackageSourceResolverError,
|
|
377
|
+
"registry dependency key must contain parent manifest path and dependency name"
|
|
378
|
+
end
|
|
379
|
+
|
|
380
|
+
self.class.registry_dependency_key(parent_source_key: key[0], dependency_name: key[1])
|
|
381
|
+
else
|
|
382
|
+
key.to_s
|
|
383
|
+
end
|
|
384
384
|
|
|
385
385
|
resolved[normalized_key] = version.to_s
|
|
386
386
|
end
|
|
@@ -63,14 +63,14 @@ module MilkTea
|
|
|
63
63
|
|
|
64
64
|
def to_s
|
|
65
65
|
prefix = case operator
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
66
|
+
when :eq then "="
|
|
67
|
+
when :gt then ">"
|
|
68
|
+
when :gte then ">="
|
|
69
|
+
when :lt then "<"
|
|
70
|
+
when :lte then "<="
|
|
71
|
+
else
|
|
72
|
+
raise PackageVersionError, "unsupported package version operator #{operator.inspect}"
|
|
73
|
+
end
|
|
74
74
|
|
|
75
75
|
"#{prefix}#{version}"
|
|
76
76
|
end
|
|
@@ -120,20 +120,18 @@ module MilkTea
|
|
|
120
120
|
)
|
|
121
121
|
end.freeze
|
|
122
122
|
end
|
|
123
|
-
private_class_method :frontend_modules
|
|
124
123
|
|
|
125
124
|
def self.default_raw_bindings(root: MilkTea.root)
|
|
126
125
|
require_relative "../bindings"
|
|
127
126
|
|
|
128
127
|
RawBindings.default_registry(root:)
|
|
129
128
|
end
|
|
130
|
-
private_class_method :default_raw_bindings
|
|
131
129
|
|
|
132
130
|
def initialize(path, output_path:, cc:, keep_c_path:, raw_bindings:, module_roots: nil, package_graph: nil, frontend: nil, debug: false, profile: nil, platform: nil, bundle: false, archive: false, no_cache: false, sanitize: false, kind: :executable, debug_guards: nil)
|
|
133
131
|
@kind = case kind
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
132
|
+
when :executable, :static, :shared then kind
|
|
133
|
+
else raise BuildError, "unknown build kind #{kind}; expected executable|static|shared"
|
|
134
|
+
end
|
|
137
135
|
@explicit_output_path = !output_path.nil?
|
|
138
136
|
resolved_source = use_package_build_for?(path)
|
|
139
137
|
if resolved_source
|
|
@@ -244,8 +242,6 @@ module MilkTea
|
|
|
244
242
|
end
|
|
245
243
|
end
|
|
246
244
|
|
|
247
|
-
private
|
|
248
|
-
|
|
249
245
|
def build_static_library
|
|
250
246
|
cache = @no_cache ? nil : BuildCache.new(root: MilkTea.root)
|
|
251
247
|
emit_line_directives = line_directives_required?
|