mt-lang 0.3.9 → 0.3.11

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.
Files changed (204) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +2 -0
  3. data/docs/language-design.md +1 -2
  4. data/docs/language-manual.md +12 -1
  5. data/lib/milk_tea/base.rb +1 -2
  6. data/lib/milk_tea/bindings/bindgen/ast_parser.rb +0 -2
  7. data/lib/milk_tea/bindings/bindgen/declaration.rb +0 -2
  8. data/lib/milk_tea/bindings/bindgen/emitter.rb +0 -2
  9. data/lib/milk_tea/bindings/bindgen/overrides.rb +0 -2
  10. data/lib/milk_tea/bindings/bindgen/type_mapper.rb +51 -53
  11. data/lib/milk_tea/bindings/imported_bindings/generator.rb +7 -9
  12. data/lib/milk_tea/bindings/imported_bindings/method_source.rb +0 -2
  13. data/lib/milk_tea/bindings/imported_bindings/naming.rb +6 -8
  14. data/lib/milk_tea/bindings/imported_bindings.rb +0 -2
  15. data/lib/milk_tea/bindings/opengl_registry.rb +3 -7
  16. data/lib/milk_tea/bindings/steamworks.rb +12 -16
  17. data/lib/milk_tea/bindings/upstream_sources.rb +10 -14
  18. data/lib/milk_tea/bindings/vendored_box2d.rb +10 -12
  19. data/lib/milk_tea/bindings/vendored_cjson.rb +6 -8
  20. data/lib/milk_tea/bindings/vendored_flecs.rb +10 -12
  21. data/lib/milk_tea/bindings/vendored_glfw.rb +11 -13
  22. data/lib/milk_tea/bindings/vendored_libuv.rb +11 -13
  23. data/lib/milk_tea/bindings/vendored_pcre2.rb +11 -13
  24. data/lib/milk_tea/bindings/vendored_raylib.rb +6 -10
  25. data/lib/milk_tea/bindings/vendored_sdl3.rb +11 -13
  26. data/lib/milk_tea/bindings/vendored_steamworks.rb +1 -5
  27. data/lib/milk_tea/core/ast.rb +109 -51
  28. data/lib/milk_tea/core/async_runtime_installer.rb +0 -2
  29. data/lib/milk_tea/core/bindings/attribute_binding.rb +1 -3
  30. data/lib/milk_tea/core/c_backend/aggregate_utils.rb +147 -84
  31. data/lib/milk_tea/core/c_backend/control_flow_emission.rb +394 -396
  32. data/lib/milk_tea/core/c_backend/expressions.rb +489 -476
  33. data/lib/milk_tea/core/c_backend/feature_detection.rb +446 -437
  34. data/lib/milk_tea/core/c_backend/format_helpers.rb +0 -2
  35. data/lib/milk_tea/core/c_backend/reachability.rb +339 -341
  36. data/lib/milk_tea/core/c_backend/reinterpret.rb +231 -217
  37. data/lib/milk_tea/core/c_backend/runtime_helpers.rb +531 -526
  38. data/lib/milk_tea/core/c_backend/statements.rb +528 -530
  39. data/lib/milk_tea/core/c_backend/type_collectors.rb +1344 -1346
  40. data/lib/milk_tea/core/c_backend/type_declaration.rb +215 -213
  41. data/lib/milk_tea/core/c_backend/type_system.rb +347 -349
  42. data/lib/milk_tea/core/c_backend.rb +17 -9
  43. data/lib/milk_tea/core/compatibility_helpers.rb +0 -2
  44. data/lib/milk_tea/core/compile_time/const_eval.rb +7 -12
  45. data/lib/milk_tea/core/compile_time.rb +32 -38
  46. data/lib/milk_tea/core/control_flow/builder.rb +3 -5
  47. data/lib/milk_tea/core/control_flow/constant_propagation.rb +14 -17
  48. data/lib/milk_tea/core/control_flow/definite_assignment.rb +0 -1
  49. data/lib/milk_tea/core/ir.rb +10 -10
  50. data/lib/milk_tea/core/lexer/character_classes.rb +5 -7
  51. data/lib/milk_tea/core/lexer/format_strings.rb +7 -9
  52. data/lib/milk_tea/core/lexer/heredocs.rb +22 -22
  53. data/lib/milk_tea/core/lexer/indentation.rb +0 -2
  54. data/lib/milk_tea/core/lexer/numbers.rb +0 -2
  55. data/lib/milk_tea/core/lexer/recovery.rb +0 -2
  56. data/lib/milk_tea/core/lexer/strings.rb +0 -2
  57. data/lib/milk_tea/core/lexer/symbols.rb +0 -2
  58. data/lib/milk_tea/core/lexer/trivia.rb +0 -2
  59. data/lib/milk_tea/core/lexer.rb +0 -2
  60. data/lib/milk_tea/core/lowering/async/analysis.rb +0 -2
  61. data/lib/milk_tea/core/lowering/async/lowering.rb +1264 -1265
  62. data/lib/milk_tea/core/lowering/async/normalization.rb +5 -3
  63. data/lib/milk_tea/core/lowering/async.rb +627 -630
  64. data/lib/milk_tea/core/lowering/block.rb +413 -416
  65. data/lib/milk_tea/core/lowering/calls.rb +1381 -1384
  66. data/lib/milk_tea/core/lowering/declarations.rb +180 -183
  67. data/lib/milk_tea/core/lowering/dyn.rb +48 -50
  68. data/lib/milk_tea/core/lowering/events.rb +983 -985
  69. data/lib/milk_tea/core/lowering/expressions.rb +1513 -1518
  70. data/lib/milk_tea/core/lowering/foreign_cstr.rb +181 -184
  71. data/lib/milk_tea/core/lowering/functions.rb +185 -188
  72. data/lib/milk_tea/core/lowering/loops.rb +1028 -1031
  73. data/lib/milk_tea/core/lowering/proc.rb +363 -366
  74. data/lib/milk_tea/core/lowering/resolve.rb +2133 -2135
  75. data/lib/milk_tea/core/lowering/scans.rb +179 -181
  76. data/lib/milk_tea/core/lowering/str_buffer.rb +102 -105
  77. data/lib/milk_tea/core/lowering/utils.rb +1040 -1044
  78. data/lib/milk_tea/core/lowering.rb +5 -7
  79. data/lib/milk_tea/core/module_binder.rb +0 -2
  80. data/lib/milk_tea/core/module_loader/errors.rb +4 -2
  81. data/lib/milk_tea/core/module_loader.rb +113 -20
  82. data/lib/milk_tea/core/module_path_resolver.rb +0 -2
  83. data/lib/milk_tea/core/module_roots.rb +6 -8
  84. data/lib/milk_tea/core/parser/attributes.rb +0 -2
  85. data/lib/milk_tea/core/parser/blocks.rb +0 -2
  86. data/lib/milk_tea/core/parser/declarations.rb +7 -9
  87. data/lib/milk_tea/core/parser/expressions.rb +15 -10
  88. data/lib/milk_tea/core/parser/recovery.rb +0 -2
  89. data/lib/milk_tea/core/parser/statements.rb +8 -2
  90. data/lib/milk_tea/core/parser/types.rb +12 -14
  91. data/lib/milk_tea/core/parser.rb +0 -2
  92. data/lib/milk_tea/core/pretty_printer/ast_formatter.rb +31 -33
  93. data/lib/milk_tea/core/pretty_printer/base_formatter.rb +0 -2
  94. data/lib/milk_tea/core/pretty_printer/ir_formatter.rb +0 -2
  95. data/lib/milk_tea/core/semantic_analyzer/analysis_context.rb +0 -2
  96. data/lib/milk_tea/core/semantic_analyzer/attributes.rb +14 -16
  97. data/lib/milk_tea/core/semantic_analyzer/calls.rb +0 -2
  98. data/lib/milk_tea/core/semantic_analyzer/expressions.rb +1 -14
  99. data/lib/milk_tea/core/semantic_analyzer/flow_refinement.rb +18 -21
  100. data/lib/milk_tea/core/semantic_analyzer/foreign_functions.rb +0 -3
  101. data/lib/milk_tea/core/semantic_analyzer/function_binding.rb +14 -17
  102. data/lib/milk_tea/core/semantic_analyzer/generics.rb +57 -59
  103. data/lib/milk_tea/core/semantic_analyzer/interface_conformance.rb +0 -2
  104. data/lib/milk_tea/core/semantic_analyzer/name_resolution.rb +5 -9
  105. data/lib/milk_tea/core/semantic_analyzer/nullability.rb +0 -3
  106. data/lib/milk_tea/core/semantic_analyzer/statements.rb +35 -40
  107. data/lib/milk_tea/core/semantic_analyzer/top_level.rb +10 -12
  108. data/lib/milk_tea/core/semantic_analyzer/type_compatibility.rb +0 -6
  109. data/lib/milk_tea/core/semantic_analyzer/type_declaration.rb +106 -109
  110. data/lib/milk_tea/core/semantic_analyzer.rb +17 -8
  111. data/lib/milk_tea/core/types/layout.rb +21 -22
  112. data/lib/milk_tea/core/types/predicates.rb +0 -2
  113. data/lib/milk_tea/core/types/registry.rb +16 -18
  114. data/lib/milk_tea/core/types/visitor.rb +0 -4
  115. data/lib/milk_tea/dap/backends/lldb_dap.rb +0 -2
  116. data/lib/milk_tea/dap/protocol.rb +1 -1
  117. data/lib/milk_tea/dap/server/breakpoints.rb +0 -2
  118. data/lib/milk_tea/dap/server/debug_map.rb +0 -2
  119. data/lib/milk_tea/dap/server/handlers.rb +0 -2
  120. data/lib/milk_tea/dap/server/launch.rb +0 -2
  121. data/lib/milk_tea/dap/server/lldb_backend.rb +8 -10
  122. data/lib/milk_tea/dap/server/pause_diagnostics.rb +14 -16
  123. data/lib/milk_tea/dap/server/utilities.rb +0 -2
  124. data/lib/milk_tea/dap/server/wire.rb +0 -2
  125. data/lib/milk_tea/dap/server.rb +0 -2
  126. data/lib/milk_tea/lsp/diagnostics.rb +16 -16
  127. data/lib/milk_tea/lsp/server/call_hierarchy.rb +11 -12
  128. data/lib/milk_tea/lsp/server/code_actions.rb +355 -357
  129. data/lib/milk_tea/lsp/server/code_lens.rb +23 -25
  130. data/lib/milk_tea/lsp/server/completion.rb +873 -875
  131. data/lib/milk_tea/lsp/server/configuration.rb +129 -131
  132. data/lib/milk_tea/lsp/server/debug_info.rb +0 -2
  133. data/lib/milk_tea/lsp/server/definition.rb +564 -565
  134. data/lib/milk_tea/lsp/server/diagnostics_scheduling.rb +191 -193
  135. data/lib/milk_tea/lsp/server/execute_command.rb +0 -2
  136. data/lib/milk_tea/lsp/server/folding_range.rb +0 -4
  137. data/lib/milk_tea/lsp/server/formatting.rb +478 -480
  138. data/lib/milk_tea/lsp/server/hover.rb +1282 -1284
  139. data/lib/milk_tea/lsp/server/inlay_hints.rb +179 -181
  140. data/lib/milk_tea/lsp/server/lifecycle.rb +192 -194
  141. data/lib/milk_tea/lsp/server/linked_editing_range.rb +0 -2
  142. data/lib/milk_tea/lsp/server/on_type_formatting.rb +0 -2
  143. data/lib/milk_tea/lsp/server/progress.rb +0 -2
  144. data/lib/milk_tea/lsp/server/references.rb +316 -318
  145. data/lib/milk_tea/lsp/server/rename.rb +445 -447
  146. data/lib/milk_tea/lsp/server/selection_range.rb +0 -4
  147. data/lib/milk_tea/lsp/server/semantic_tokens.rb +1376 -1314
  148. data/lib/milk_tea/lsp/server/signature_help.rb +146 -148
  149. data/lib/milk_tea/lsp/server/text_documents.rb +99 -101
  150. data/lib/milk_tea/lsp/server/type_hierarchy.rb +2 -4
  151. data/lib/milk_tea/lsp/server/utilities.rb +397 -399
  152. data/lib/milk_tea/lsp/server.rb +0 -3
  153. data/lib/milk_tea/lsp/workspace/analysis.rb +40 -42
  154. data/lib/milk_tea/lsp/workspace/dependency_graph.rb +4 -10
  155. data/lib/milk_tea/lsp/workspace/utilities.rb +19 -19
  156. data/lib/milk_tea/packages/atomic_write.rb +4 -5
  157. data/lib/milk_tea/packages/dependency_solver.rb +15 -15
  158. data/lib/milk_tea/packages/lock.rb +4 -4
  159. data/lib/milk_tea/packages/manager_cli.rb +1 -1
  160. data/lib/milk_tea/packages/manifest.rb +3 -3
  161. data/lib/milk_tea/packages/registry_store.rb +4 -6
  162. data/lib/milk_tea/packages/services.rb +16 -16
  163. data/lib/milk_tea/packages/source_cache.rb +4 -6
  164. data/lib/milk_tea/packages/source_resolver.rb +44 -44
  165. data/lib/milk_tea/packages/version.rb +8 -8
  166. data/lib/milk_tea/tooling/build.rb +3 -7
  167. data/lib/milk_tea/tooling/build_cache.rb +0 -2
  168. data/lib/milk_tea/tooling/cli.rb +10 -4
  169. data/lib/milk_tea/tooling/debug_info_formatter.rb +31 -33
  170. data/lib/milk_tea/tooling/debug_map.rb +8 -10
  171. data/lib/milk_tea/tooling/docs_app.rb +0 -2
  172. data/lib/milk_tea/tooling/linter/doc_tags.rb +25 -27
  173. data/lib/milk_tea/tooling/linter/fix_engine.rb +87 -24
  174. data/lib/milk_tea/tooling/linter/flow_rules.rb +44 -46
  175. data/lib/milk_tea/tooling/linter/imports_platform.rb +14 -16
  176. data/lib/milk_tea/tooling/linter/release_rules.rb +3 -5
  177. data/lib/milk_tea/tooling/linter/reserved_names.rb +23 -25
  178. data/lib/milk_tea/tooling/linter/rules.rb +87 -89
  179. data/lib/milk_tea/tooling/linter/source_helpers.rb +40 -42
  180. data/lib/milk_tea/tooling/linter/trailing_comma.rb +17 -19
  181. data/lib/milk_tea/tooling/linter/visitors.rb +112 -54
  182. data/lib/milk_tea/tooling/linter.rb +0 -2
  183. data/lib/milk_tea/tooling/project_scaffold.rb +0 -2
  184. data/lib/milk_tea/tooling/run.rb +0 -2
  185. data/lib/milk_tea/tooling/toolchain_cli.rb +0 -2
  186. data/std/cli.mt +13 -32
  187. data/std/color.mt +28 -28
  188. data/std/encoding.mt +4 -4
  189. data/std/graph.mt +1 -2
  190. data/std/hash.mt +14 -14
  191. data/std/http/server.mt +3 -3
  192. data/std/input.mt +1 -1
  193. data/std/json.mt +1 -1
  194. data/std/linear_algebra.mt +6 -6
  195. data/std/net/mux.mt +1 -1
  196. data/std/noise.mt +23 -23
  197. data/std/parse.mt +2 -2
  198. data/std/process.mt +3 -4
  199. data/std/sparse_set.mt +1 -1
  200. data/std/steering.mt +5 -5
  201. data/std/str.mt +1 -1
  202. data/std/tween.mt +4 -4
  203. data/std/utility.mt +3 -3
  204. metadata +2 -2
@@ -4,230 +4,228 @@ module MilkTea
4
4
  module LSP
5
5
  class Server
6
6
  module ServerLifecycle
7
- private
8
-
9
- def handle_initialize(params)
10
- @pull_diagnostics_active = true
11
- if @_initialize_called
12
- @_indexing_thread&.join rescue nil
13
- @_indexing_thread = nil
14
- @workspace.reset
15
- @format_mode = :tidy
16
- @dependency_resolution_mode = :auto
17
- @platform_override = nil
18
- @diagnostic_report_cache.clear
19
- @workspace_diagnostic_cache.clear
20
- drain_diagnostics_queue
21
- @diagnostics_pending.clear
22
- @diagnostics_enqueued.clear
23
- @diagnostics_last_scheduled_hash.clear
24
- @diagnostics_generation.clear
25
- @semantic_tokens_cache.clear
26
- @semantic_tokens_delta_cache.clear
27
- @fixall_cache.clear
28
- @definition_file_token_cache.clear
29
- @definition_file_ast_cache.clear
30
- MilkTea::Types::Registry.reset!
31
- end
32
- @_initialize_called = true
33
- @root_uri = params['rootUri']
34
- @client_capabilities = params['capabilities'] || {}
35
- @workspace.workspace_root_path = uri_to_path(@root_uri)
36
- negotiate_position_encoding(params)
37
- apply_configuration_settings(params['initializationOptions'])
38
- apply_configuration_settings(params['settings'])
39
- {
40
- capabilities: {
41
- positionEncoding: @position_encoding,
42
- textDocumentSync: {
43
- openClose: true,
44
- change: 2,
45
- save: { includeText: true },
46
- willSaveWaitUntil: true
47
- },
48
- hoverProvider: true,
49
- definitionProvider: true,
50
- declarationProvider: true,
51
- typeDefinitionProvider: true,
52
- implementationProvider: true,
53
- referencesProvider: true,
54
- documentLinkProvider: {
55
- resolveProvider: true
56
- },
57
- documentHighlightProvider: true,
58
- documentSymbolProvider: true,
59
- documentFormattingProvider: true,
60
- documentRangeFormattingProvider: true,
61
- foldingRangeProvider: true,
62
- callHierarchyProvider: true,
63
- typeHierarchyProvider: true,
64
- selectionRangeProvider: true,
65
- linkedEditingRangeProvider: true,
66
- executeCommandProvider: {
67
- commands: ['mtc.restartServer']
68
- },
69
- documentOnTypeFormattingProvider: {
70
- firstTriggerCharacter: "\n",
71
- moreTriggerCharacter: []
72
- },
73
- signatureHelpProvider: {
74
- triggerCharacters: ['(', ','],
75
- retriggerCharacters: [',']
76
- },
77
- codeActionProvider: {
78
- codeActionKinds: ['quickFix', 'source.fixAll']
79
- },
80
- codeLensProvider: {
81
- resolveProvider: true
82
- },
83
- inlayHintProvider: true,
84
- semanticTokensProvider: {
85
- legend: {
86
- tokenTypes: SEMANTIC_TOKEN_TYPES,
87
- tokenModifiers: SEMANTIC_TOKEN_MODIFIERS
7
+ def handle_initialize(params)
8
+ @pull_diagnostics_active = true
9
+ if @_initialize_called
10
+ @_indexing_thread&.join rescue nil
11
+ @_indexing_thread = nil
12
+ @workspace.reset
13
+ @format_mode = :tidy
14
+ @dependency_resolution_mode = :auto
15
+ @platform_override = nil
16
+ @diagnostic_report_cache.clear
17
+ @workspace_diagnostic_cache.clear
18
+ drain_diagnostics_queue
19
+ @diagnostics_pending.clear
20
+ @diagnostics_enqueued.clear
21
+ @diagnostics_last_scheduled_hash.clear
22
+ @diagnostics_generation.clear
23
+ @semantic_tokens_cache.clear
24
+ @semantic_tokens_delta_cache.clear
25
+ @fixall_cache.clear
26
+ @definition_file_token_cache.clear
27
+ @definition_file_ast_cache.clear
28
+ MilkTea::Types::Registry.reset!
29
+ end
30
+ @_initialize_called = true
31
+ @root_uri = params['rootUri']
32
+ @client_capabilities = params['capabilities'] || {}
33
+ @workspace.workspace_root_path = uri_to_path(@root_uri)
34
+ negotiate_position_encoding(params)
35
+ apply_configuration_settings(params['initializationOptions'])
36
+ apply_configuration_settings(params['settings'])
37
+ {
38
+ capabilities: {
39
+ positionEncoding: @position_encoding,
40
+ textDocumentSync: {
41
+ openClose: true,
42
+ change: 2,
43
+ save: { includeText: true },
44
+ willSaveWaitUntil: true
88
45
  },
89
- full: { delta: true },
90
- range: true
91
- },
92
- completionProvider: {
93
- triggerCharacters: ['.', '(', ' '],
94
- resolveProvider: true
95
- },
96
- renameProvider: { prepareProvider: true },
97
- workspaceSymbolProvider: true,
98
- diagnosticProvider: {
99
- interFileDependencies: true,
100
- workspaceDiagnostics: true
101
- },
102
- workspace: {
103
- workspaceFolders: {
104
- supported: true,
105
- changeNotifications: true,
46
+ hoverProvider: true,
47
+ definitionProvider: true,
48
+ declarationProvider: true,
49
+ typeDefinitionProvider: true,
50
+ implementationProvider: true,
51
+ referencesProvider: true,
52
+ documentLinkProvider: {
53
+ resolveProvider: true
106
54
  },
107
- fileOperations: {
108
- willRename: {
109
- filters: [{ pattern: { glob: '**/*.mt' }, scheme: 'file' }]
110
- }
55
+ documentHighlightProvider: true,
56
+ documentSymbolProvider: true,
57
+ documentFormattingProvider: true,
58
+ documentRangeFormattingProvider: true,
59
+ foldingRangeProvider: true,
60
+ callHierarchyProvider: true,
61
+ typeHierarchyProvider: true,
62
+ selectionRangeProvider: true,
63
+ linkedEditingRangeProvider: true,
64
+ executeCommandProvider: {
65
+ commands: ['mtc.restartServer']
66
+ },
67
+ documentOnTypeFormattingProvider: {
68
+ firstTriggerCharacter: "\n",
69
+ moreTriggerCharacter: []
70
+ },
71
+ signatureHelpProvider: {
72
+ triggerCharacters: ['(', ','],
73
+ retriggerCharacters: [',']
74
+ },
75
+ codeActionProvider: {
76
+ codeActionKinds: ['quickFix', 'source.fixAll']
77
+ },
78
+ codeLensProvider: {
79
+ resolveProvider: true
80
+ },
81
+ inlayHintProvider: true,
82
+ semanticTokensProvider: {
83
+ legend: {
84
+ tokenTypes: SEMANTIC_TOKEN_TYPES,
85
+ tokenModifiers: SEMANTIC_TOKEN_MODIFIERS
86
+ },
87
+ full: { delta: true },
88
+ range: true
111
89
  },
112
- didChangeWatchedFiles: {
113
- dynamicRegistration: true
90
+ completionProvider: {
91
+ triggerCharacters: ['.', '(', ' '],
92
+ resolveProvider: true
93
+ },
94
+ renameProvider: { prepareProvider: true },
95
+ workspaceSymbolProvider: true,
96
+ diagnosticProvider: {
97
+ interFileDependencies: true,
98
+ workspaceDiagnostics: true
99
+ },
100
+ workspace: {
101
+ workspaceFolders: {
102
+ supported: true,
103
+ changeNotifications: true,
104
+ },
105
+ fileOperations: {
106
+ willRename: {
107
+ filters: [{ pattern: { glob: '**/*.mt' }, scheme: 'file' }]
108
+ }
109
+ },
110
+ didChangeWatchedFiles: {
111
+ dynamicRegistration: true
112
+ }
114
113
  }
115
114
  }
116
115
  }
117
- }
118
- end
116
+ end
119
117
 
120
- def negotiate_position_encoding(params)
121
- client_encodings = params.dig('capabilities', 'general', 'positionEncodings')
122
- if client_encodings.is_a?(Array)
123
- @position_encoding = if client_encodings.include?('utf-8')
124
- 'utf-8'
125
- elsif client_encodings.include?('utf-32')
126
- 'utf-32'
127
- else
128
- 'utf-16'
129
- end
130
- else
131
- @position_encoding = 'utf-16'
118
+ def negotiate_position_encoding(params)
119
+ client_encodings = params.dig('capabilities', 'general', 'positionEncodings')
120
+ if client_encodings.is_a?(Array)
121
+ @position_encoding = if client_encodings.include?('utf-8')
122
+ 'utf-8'
123
+ elsif client_encodings.include?('utf-32')
124
+ 'utf-32'
125
+ else
126
+ 'utf-16'
127
+ end
128
+ else
129
+ @position_encoding = 'utf-16'
130
+ end
131
+ Diagnostics.position_encoding = @position_encoding
132
132
  end
133
- Diagnostics.position_encoding = @position_encoding
134
- end
135
133
 
136
- def handle_initialized(_params)
137
- pull_client_configuration if @client_capabilities&.dig('workspace', 'configuration')
138
- return nil unless @root_uri
139
-
140
- @_indexing_thread = Thread.new do
141
- progress = create_progress(title: 'Milk Tea LSP: Indexing workspace', message: 'Scanning source files...')
142
- @workspace.index_workspace(@root_uri) { |pct, msg| progress.report(percentage: pct, message: msg) }
143
- document_count = @workspace.all_documents.length
144
- progress.done(message: "#{document_count} document#{document_count == 1 ? '' : 's'} indexed")
145
- log_message(:info, "Milk Tea LSP ready — #{document_count} document#{document_count == 1 ? '' : 's'} indexed")
146
- refresh_client_semantic_tokens if document_count > 0
134
+ def handle_initialized(_params)
135
+ pull_client_configuration if @client_capabilities&.dig('workspace', 'configuration')
136
+ return nil unless @root_uri
137
+
138
+ @_indexing_thread = Thread.new do
139
+ progress = create_progress(title: 'Milk Tea LSP: Indexing workspace', message: 'Scanning source files...')
140
+ @workspace.index_workspace(@root_uri) { |pct, msg| progress.report(percentage: pct, message: msg) }
141
+ document_count = @workspace.all_documents.length
142
+ progress.done(message: "#{document_count} document#{document_count == 1 ? '' : 's'} indexed")
143
+ log_message(:info, "Milk Tea LSP ready — #{document_count} document#{document_count == 1 ? '' : 's'} indexed")
144
+ refresh_client_semantic_tokens if document_count > 0
145
+ end
146
+ nil
147
147
  end
148
- nil
149
- end
150
148
 
151
- def handle_did_change_configuration(params)
152
- apply_configuration_settings(params['settings'])
153
- nil
154
- end
149
+ def handle_did_change_configuration(params)
150
+ apply_configuration_settings(params['settings'])
151
+ nil
152
+ end
155
153
 
156
- def handle_cancel_request(params)
157
- request_id = params.is_a?(Hash) ? (params['id'] || params[:id]) : nil
158
- return nil if request_id.nil?
154
+ def handle_cancel_request(params)
155
+ request_id = params.is_a?(Hash) ? (params['id'] || params[:id]) : nil
156
+ return nil if request_id.nil?
159
157
 
160
- @cancelled_requests_mutex.synchronize do
161
- @cancelled_request_ids << request_id
158
+ @cancelled_requests_mutex.synchronize do
159
+ @cancelled_request_ids << request_id
160
+ end
161
+ nil
162
162
  end
163
- nil
164
- end
165
163
 
166
- def handle_did_change_workspace_folders(params)
167
- event = params['event'] || {}
168
- added = event['added'] || []
169
- removed = event['removed'] || []
164
+ def handle_did_change_workspace_folders(params)
165
+ event = params['event'] || {}
166
+ added = event['added'] || []
167
+ removed = event['removed'] || []
170
168
 
171
- removed_uris = removed.filter_map { |folder| folder.is_a?(Hash) ? folder['uri'] : nil }
172
- added_uris = added.filter_map { |folder| folder.is_a?(Hash) ? folder['uri'] : nil }
169
+ removed_uris = removed.filter_map { |folder| folder.is_a?(Hash) ? folder['uri'] : nil }
170
+ added_uris = added.filter_map { |folder| folder.is_a?(Hash) ? folder['uri'] : nil }
173
171
 
174
- if removed_uris.include?(@root_uri)
175
- @root_uri = added_uris.first
176
- elsif @root_uri.nil?
177
- @root_uri = added_uris.first
178
- end
172
+ if removed_uris.include?(@root_uri)
173
+ @root_uri = added_uris.first
174
+ elsif @root_uri.nil?
175
+ @root_uri = added_uris.first
176
+ end
179
177
 
180
- @workspace.workspace_root_path = uri_to_path(@root_uri)
181
- return nil unless @root_uri
178
+ @workspace.workspace_root_path = uri_to_path(@root_uri)
179
+ return nil unless @root_uri
182
180
 
183
- uris = @workspace.open_document_uris.dup
184
- Thread.new do
185
- progress = create_progress(title: 'Milk Tea LSP: Reindexing workspace', message: 'Scanning source files...')
186
- @workspace.index_workspace(@root_uri) { |pct, msg| progress.report(percentage: pct, message: msg) }
187
- doc_count = @workspace.all_documents.length
188
- progress.done(message: "#{doc_count} document#{doc_count == 1 ? '' : 's'} indexed")
181
+ uris = @workspace.open_document_uris.dup
182
+ Thread.new do
183
+ progress = create_progress(title: 'Milk Tea LSP: Reindexing workspace', message: 'Scanning source files...')
184
+ @workspace.index_workspace(@root_uri) { |pct, msg| progress.report(percentage: pct, message: msg) }
185
+ doc_count = @workspace.all_documents.length
186
+ progress.done(message: "#{doc_count} document#{doc_count == 1 ? '' : 's'} indexed")
189
187
 
190
- uris.each do |uri|
191
- schedule_diagnostics(uri, force: true, lint_tier: :full) unless @workspace.background_document?(uri)
188
+ uris.each do |uri|
189
+ schedule_diagnostics(uri, force: true, lint_tier: :full) unless @workspace.background_document?(uri)
190
+ end
192
191
  end
192
+ nil
193
193
  end
194
- nil
195
- end
196
194
 
197
- def handle_will_rename_files(params)
198
- files = params['files'] || []
199
- files.each do |file|
200
- old_uri = file['oldUri']
201
- new_uri = file['newUri']
202
- next unless old_uri && new_uri
195
+ def handle_will_rename_files(params)
196
+ files = params['files'] || []
197
+ files.each do |file|
198
+ old_uri = file['oldUri']
199
+ new_uri = file['newUri']
200
+ next unless old_uri && new_uri
203
201
 
204
- @workspace.rename_indexed_file(old_uri, new_uri)
202
+ @workspace.rename_indexed_file(old_uri, new_uri)
203
+ end
204
+ nil
205
205
  end
206
- nil
207
- end
208
206
 
209
- def handle_shutdown(_params)
210
- stop_diagnostics_workers
211
- @workspace.shutdown
212
- nil
213
- end
207
+ def handle_shutdown(_params)
208
+ stop_diagnostics_workers
209
+ @workspace.shutdown
210
+ nil
211
+ end
214
212
 
215
- def handle_exit(_params)
216
- stop_diagnostics_workers
217
- @workspace.shutdown
218
- exit(0)
219
- end
213
+ def handle_exit(_params)
214
+ stop_diagnostics_workers
215
+ @workspace.shutdown
216
+ exit(0)
217
+ end
220
218
 
221
- SEMANTIC_TOKENS_REFRESH_THROTTLE_MS = 500
219
+ SEMANTIC_TOKENS_REFRESH_THROTTLE_MS = 500
222
220
 
223
- def refresh_client_semantic_tokens
224
- now = Process.clock_gettime(Process::CLOCK_MONOTONIC)
225
- @semantic_tokens_last_refresh ||= 0.0
226
- return if (now - @semantic_tokens_last_refresh) * 1000 < SEMANTIC_TOKENS_REFRESH_THROTTLE_MS
221
+ def refresh_client_semantic_tokens
222
+ now = Process.clock_gettime(Process::CLOCK_MONOTONIC)
223
+ @semantic_tokens_last_refresh ||= 0.0
224
+ return if (now - @semantic_tokens_last_refresh) * 1000 < SEMANTIC_TOKENS_REFRESH_THROTTLE_MS
227
225
 
228
- @semantic_tokens_last_refresh = now
229
- @protocol.write_notification('workspace/semanticTokens/refresh', nil)
230
- end
226
+ @semantic_tokens_last_refresh = now
227
+ @protocol.write_notification('workspace/semanticTokens/refresh', nil)
228
+ end
231
229
  end
232
230
  end
233
231
  end
@@ -4,8 +4,6 @@ module MilkTea
4
4
  module LSP
5
5
  class Server
6
6
  module ServerLinkedEditingRange
7
- private
8
-
9
7
  def handle_linked_editing_range(params)
10
8
  uri = params.dig("textDocument", "uri")
11
9
  lsp_line = params.dig("position", "line")
@@ -4,8 +4,6 @@ module MilkTea
4
4
  module LSP
5
5
  class Server
6
6
  module ServerOnTypeFormatting
7
- private
8
-
9
7
  BLOCK_INTRODUCING_KEYWORDS = %w[function async editable const public
10
8
  struct enum flags variant union
11
9
  interface if elif else while for match unsafe extending defer when].freeze
@@ -4,8 +4,6 @@ module MilkTea
4
4
  module LSP
5
5
  class Server
6
6
  module ServerProgress
7
- private
8
-
9
7
  PROGRESS_TOKEN_PREFIX = "mt-lsp-progress"
10
8
 
11
9
  def create_progress(title:, message: nil, cancellable: false)