Module: MilkTea

Defined in:
lib/milk_tea/lsp.rb,
lib/milk_tea/base.rb,
lib/milk_tea/core/ir.rb,
lib/milk_tea/core/ast.rb,
lib/milk_tea/core/cst.rb,
lib/milk_tea/core/lexer.rb,
lib/milk_tea/core/token.rb,
lib/milk_tea/dap/server.rb,
lib/milk_tea/lsp/server.rb,
lib/milk_tea/core/parser.rb,
lib/milk_tea/dap/session.rb,
lib/milk_tea/tooling/cli.rb,
lib/milk_tea/tooling/run.rb,
lib/milk_tea/bindings/cli.rb,
lib/milk_tea/dap/protocol.rb,
lib/milk_tea/lsp/protocol.rb,
lib/milk_tea/core/keywords.rb,
lib/milk_tea/core/lowering.rb,
lib/milk_tea/lsp/workspace.rb,
lib/milk_tea/packages/lock.rb,
lib/milk_tea/tooling/build.rb,
lib/milk_tea/core/c_backend.rb,
lib/milk_tea/packages/graph.rb,
lib/milk_tea/tooling/linter.rb,
lib/milk_tea/dap/server/wire.rb,
lib/milk_tea/lsp/diagnostics.rb,
lib/milk_tea/bindings/bindgen.rb,
lib/milk_tea/core/cst_builder.rb,
lib/milk_tea/core/types/types.rb,
lib/milk_tea/lsp/server/hover.rb,
lib/milk_tea/packages/version.rb,
lib/milk_tea/tooling/docs_app.rb,
lib/milk_tea/core/compile_time.rb,
lib/milk_tea/core/control_flow.rb,
lib/milk_tea/core/lexer/trivia.rb,
lib/milk_tea/core/lowering/dyn.rb,
lib/milk_tea/core/module_roots.rb,
lib/milk_tea/core/parser/types.rb,
lib/milk_tea/core/token_stream.rb,
lib/milk_tea/core/types/layout.rb,
lib/milk_tea/dap/server/launch.rb,
lib/milk_tea/lsp/server/rename.rb,
lib/milk_tea/packages/manifest.rb,
lib/milk_tea/packages/services.rb,
lib/milk_tea/tooling/debug_map.rb,
lib/milk_tea/tooling/formatter.rb,
lib/milk_tea/core/binding_types.rb,
lib/milk_tea/core/lexer/numbers.rb,
lib/milk_tea/core/lexer/strings.rb,
lib/milk_tea/core/lexer/symbols.rb,
lib/milk_tea/core/lowering/proc.rb,
lib/milk_tea/core/module_binder.rb,
lib/milk_tea/core/module_loader.rb,
lib/milk_tea/core/parser/blocks.rb,
lib/milk_tea/core/types/visitor.rb,
lib/milk_tea/tooling/asset_pack.rb,
lib/milk_tea/bindings/steamworks.rb,
lib/milk_tea/core/lexer/heredocs.rb,
lib/milk_tea/core/lexer/recovery.rb,
lib/milk_tea/core/lowering/async.rb,
lib/milk_tea/core/lowering/block.rb,
lib/milk_tea/core/lowering/calls.rb,
lib/milk_tea/core/lowering/loops.rb,
lib/milk_tea/core/lowering/scans.rb,
lib/milk_tea/core/lowering/utils.rb,
lib/milk_tea/core/pretty_printer.rb,
lib/milk_tea/core/types/registry.rb,
lib/milk_tea/dap/server/handlers.rb,
lib/milk_tea/lsp/server/progress.rb,
lib/milk_tea/lsp/workspace/store.rb,
lib/milk_tea/tooling/build_cache.rb,
lib/milk_tea/core/lowering/events.rb,
lib/milk_tea/core/parser/recovery.rb,
lib/milk_tea/dap/server/debug_map.rb,
lib/milk_tea/dap/server/utilities.rb,
lib/milk_tea/lsp/server/code_lens.rb,
lib/milk_tea/lsp/server/lifecycle.rb,
lib/milk_tea/lsp/server/utilities.rb,
lib/milk_tea/lsp/workspace/caches.rb,
lib/milk_tea/packages/manager_cli.rb,
lib/milk_tea/tooling/linter/rules.rb,
lib/milk_tea/bindings/raw_bindings.rb,
lib/milk_tea/core/lowering/resolve.rb,
lib/milk_tea/core/types/predicates.rb,
lib/milk_tea/dap/backends/lldb_dap.rb,
lib/milk_tea/lsp/server/completion.rb,
lib/milk_tea/lsp/server/debug_info.rb,
lib/milk_tea/lsp/server/definition.rb,
lib/milk_tea/lsp/server/formatting.rb,
lib/milk_tea/lsp/server/references.rb,
lib/milk_tea/packages/atomic_write.rb,
lib/milk_tea/packages/source_cache.rb,
lib/milk_tea/tooling/cst_formatter.rb,
lib/milk_tea/tooling/toolchain_cli.rb,
lib/milk_tea/bindings/vendored_glfw.rb,
lib/milk_tea/bindings/vendored_sdl3.rb,
lib/milk_tea/bindings/vendored_tool.rb,
lib/milk_tea/core/lexer/indentation.rb,
lib/milk_tea/core/parser/attributes.rb,
lib/milk_tea/core/parser/statements.rb,
lib/milk_tea/core/prelude_installer.rb,
lib/milk_tea/core/semantic_analyzer.rb,
lib/milk_tea/dap/server/breakpoints.rb,
lib/milk_tea/lsp/server/inlay_hints.rb,
lib/milk_tea/lsp/workspace/analysis.rb,
lib/milk_tea/bindings/vendored_box2d.rb,
lib/milk_tea/bindings/vendored_cjson.rb,
lib/milk_tea/bindings/vendored_flecs.rb,
lib/milk_tea/bindings/vendored_libuv.rb,
lib/milk_tea/bindings/vendored_pcre2.rb,
lib/milk_tea/bindings/vendored_tools.rb,
lib/milk_tea/bindings/vendored_tracy.rb,
lib/milk_tea/core/control_flow/graph.rb,
lib/milk_tea/core/lowering/artifacts.rb,
lib/milk_tea/core/lowering/functions.rb,
lib/milk_tea/core/parser/expressions.rb,
lib/milk_tea/dap/server/lldb_backend.rb,
lib/milk_tea/lsp/server/code_actions.rb,
lib/milk_tea/lsp/workspace/utilities.rb,
lib/milk_tea/packages/registry_store.rb,
lib/milk_tea/packages/source_fetcher.rb,
lib/milk_tea/tooling/error_formatter.rb,
lib/milk_tea/tooling/linter/doc_tags.rb,
lib/milk_tea/tooling/linter/visitors.rb,
lib/milk_tea/bindings/bindgen/emitter.rb,
lib/milk_tea/bindings/opengl_registry.rb,
lib/milk_tea/bindings/vendored_raylib.rb,
lib/milk_tea/core/lowering/str_buffer.rb,
lib/milk_tea/core/parser/declarations.rb,
lib/milk_tea/lsp/server/configuration.rb,
lib/milk_tea/lsp/server/folding_range.rb,
lib/milk_tea/lsp/workspace/collection.rb,
lib/milk_tea/packages/manifest_editor.rb,
lib/milk_tea/packages/source_resolver.rb,
lib/milk_tea/tooling/project_scaffold.rb,
lib/milk_tea/bindings/upstream_sources.rb,
lib/milk_tea/core/c_backend/statements.rb,
lib/milk_tea/core/control_flow/builder.rb,
lib/milk_tea/core/lexer/format_strings.rb,
lib/milk_tea/core/lowering/expressions.rb,
lib/milk_tea/core/module_loader/errors.rb,
lib/milk_tea/core/module_path_resolver.rb,
lib/milk_tea/lsp/dependency_resolution.rb,
lib/milk_tea/lsp/server/call_hierarchy.rb,
lib/milk_tea/lsp/server/signature_help.rb,
lib/milk_tea/lsp/server/text_documents.rb,
lib/milk_tea/lsp/server/type_hierarchy.rb,
lib/milk_tea/tooling/linter/fix_engine.rb,
lib/milk_tea/tooling/linter/flow_rules.rb,
lib/milk_tea/bindings/bindgen/overrides.rb,
lib/milk_tea/bindings/imported_bindings.rb,
lib/milk_tea/core/c_backend/expressions.rb,
lib/milk_tea/core/c_backend/reinterpret.rb,
lib/milk_tea/core/c_backend/type_system.rb,
lib/milk_tea/core/compatibility_helpers.rb,
lib/milk_tea/core/control_flow/dataflow.rb,
lib/milk_tea/core/control_flow/liveness.rb,
lib/milk_tea/core/lowering/declarations.rb,
lib/milk_tea/core/lowering/foreign_cstr.rb,
lib/milk_tea/lsp/server/execute_command.rb,
lib/milk_tea/lsp/server/selection_range.rb,
lib/milk_tea/lsp/server/semantic_tokens.rb,
lib/milk_tea/packages/dependency_solver.rb,
lib/milk_tea/bindings/bindgen/ast_parser.rb,
lib/milk_tea/bindings/vendored_c_library.rb,
lib/milk_tea/core/bindings/value_binding.rb,
lib/milk_tea/core/c_backend/reachability.rb,
lib/milk_tea/bindings/bindgen/declaration.rb,
lib/milk_tea/bindings/bindgen/type_mapper.rb,
lib/milk_tea/bindings/vendored_steamworks.rb,
lib/milk_tea/core/async_runtime_installer.rb,
lib/milk_tea/core/bindings/module_binding.rb,
lib/milk_tea/core/compile_time/const_eval.rb,
lib/milk_tea/core/lexer/character_classes.rb,
lib/milk_tea/core/lowering/async/analysis.rb,
lib/milk_tea/core/lowering/async/lowering.rb,
lib/milk_tea/core/semantic_analyzer/calls.rb,
lib/milk_tea/dap/server/pause_diagnostics.rb,
lib/milk_tea/tooling/debug_info_formatter.rb,
lib/milk_tea/tooling/linter/release_rules.rb,
lib/milk_tea/core/control_flow/termination.rb,
lib/milk_tea/lsp/server/on_type_formatting.rb,
lib/milk_tea/tooling/linter/reserved_names.rb,
lib/milk_tea/tooling/linter/source_helpers.rb,
lib/milk_tea/tooling/linter/trailing_comma.rb,
lib/milk_tea/bindings/raw_bindings/defaults.rb,
lib/milk_tea/core/bindings/function_binding.rb,
lib/milk_tea/core/c_backend/aggregate_utils.rb,
lib/milk_tea/core/c_backend/runtime_helpers.rb,
lib/milk_tea/core/c_backend/type_collectors.rb,
lib/milk_tea/core/control_flow/reachability.rb,
lib/milk_tea/core/lowering/lowering_context.rb,
lib/milk_tea/lsp/workspace/definition_index.rb,
lib/milk_tea/lsp/workspace/dependency_graph.rb,
lib/milk_tea/core/bindings/attribute_binding.rb,
lib/milk_tea/core/c_backend/type_declaration.rb,
lib/milk_tea/core/semantic_analyzer/generics.rb,
lib/milk_tea/lsp/server/linked_editing_range.rb,
lib/milk_tea/tooling/linter/imports_platform.rb,
lib/milk_tea/core/c_backend/feature_detection.rb,
lib/milk_tea/core/pretty_printer/ir_formatter.rb,
lib/milk_tea/core/semantic_analyzer/top_level.rb,
lib/milk_tea/bindings/imported_bindings/naming.rb,
lib/milk_tea/core/lowering/async/normalization.rb,
lib/milk_tea/core/pretty_printer/ast_formatter.rb,
lib/milk_tea/core/semantic_analyzer/attributes.rb,
lib/milk_tea/core/semantic_analyzer/statements.rb,
lib/milk_tea/lsp/server/diagnostics_scheduling.rb,
lib/milk_tea/core/control_flow/nullability_flow.rb,
lib/milk_tea/core/pretty_printer/base_formatter.rb,
lib/milk_tea/core/semantic_analyzer/expressions.rb,
lib/milk_tea/core/semantic_analyzer/nullability.rb,
lib/milk_tea/bindings/imported_bindings/defaults.rb,
lib/milk_tea/packages/registry_metadata_provider.rb,
lib/milk_tea/bindings/imported_bindings/generator.rb,
lib/milk_tea/core/c_backend/control_flow_emission.rb,
lib/milk_tea/core/control_flow/definite_assignment.rb,
lib/milk_tea/core/semantic_analyzer/module_context.rb,
lib/milk_tea/core/control_flow/constant_propagation.rb,
lib/milk_tea/core/semantic_analyzer/flow_refinement.rb,
lib/milk_tea/core/semantic_analyzer/name_resolution.rb,
lib/milk_tea/core/semantic_analyzer/analysis_context.rb,
lib/milk_tea/core/semantic_analyzer/function_binding.rb,
lib/milk_tea/core/semantic_analyzer/type_declaration.rb,
lib/milk_tea/bindings/imported_bindings/method_source.rb,
lib/milk_tea/core/semantic_analyzer/foreign_functions.rb,
lib/milk_tea/core/semantic_analyzer/type_compatibility.rb,
lib/milk_tea/core/semantic_analyzer/interface_conformance.rb

Defined Under Namespace

Modules: AST, Bindgen, CST, CompatibilityHelpers, CompileTime, ConstEval, ControlFlow, DAP, DebugInfoFormatter, ErrorFormatter, IR, ImportedBindings, LSP, Layout, LowererAsync, LowererBlock, LowererCalls, LowererDeclarations, LowererDyn, LowererEvents, LowererExpressions, LowererForeignCstr, LowererFunctions, LowererLoops, LowererProc, LowererResolve, LowererScans, LowererStrBuffer, LowererUtils, ModuleRoots, OpenGLRegistry, PackageAtomicWrite, Parse, PrettyPrinter, RawBindings, Steamworks, TypePredicates, Types, UpstreamSources, VendoredBox2D, VendoredCJSON, VendoredCLibrary, VendoredFlecs, VendoredGLFW, VendoredLibUV, VendoredPCRE2, VendoredRaylib, VendoredSDL3, VendoredSteamworks, VendoredTools, VendoredTracy Classes: AssetPack, AssetPackError, AsyncRuntimeInstaller, AttributeBinding, BindgenCLI, BindgenError, Build, BuildCache, BuildError, CBackend, CBackendError, CLI, CSTBuilder, CSTFormatter, ContainsArrayStorageVisitor, ContainsCallableRefTypeVisitor, ContainsProcTypeVisitor, ContainsRefTypeVisitor, ContainsTypeVarVisitor, DebugMap, DefaultResolution, Diagnostic, DocsApp, EqualResolution, ExplicitDefaultBinding, ExplicitEqualBinding, ExplicitFormatBinding, ExplicitHashBinding, ExplicitOrderBinding, FlowScope, Formatter, FormatterError, FunctionBinding, HashResolution, LexError, Lexer, Linter, Lowerer, Lowering, LoweringError, ModuleBinder, ModuleBinding, ModuleLoadError, ModuleLoader, ModulePathResolver, OrderResolution, PackageDependencySolver, PackageDependencySolverError, PackageGraph, PackageGraphError, PackageLock, PackageLockError, PackageManagerCLI, PackageManifest, PackageManifestEditor, PackageManifestEditorError, PackageManifestError, PackageRegistryMetadataProvider, PackageRegistryMetadataProviderError, PackageRegistryStore, PackageRegistryStoreError, PackageServices, PackageSourceCache, PackageSourceCacheError, PackageSourceFetcher, PackageSourceFetcherError, PackageSourceResolver, PackageSourceResolverError, PackageVersion, PackageVersionError, PackageVersionReq, ParseError, Parser, PreludeInstaller, ProcStorageSupportedVisitor, ProjectScaffold, ProjectScaffoldError, Run, RunError, SemanticAnalyzer, SemanticError, SendableCheckVisitor, StoredRefSupportedVisitor, SubstituteTypeVisitor, SyntaxTokenStream, Token, ToolchainCLI, TriviaToken, TriviaTokenStream, TypeVisitor, ValidateSpecializedTypeVisitor, ValueBinding, VendoredTool

Constant Summary collapse

VERSION =
"0.2.22"
KEYWORDS =
{
  "align_of" => :align_of,
  "and" => :and,
  "as" => :as,
  "async" => :async,
  "attribute" => :attribute,
  "attribute_arg" => :attribute_arg,
  "attribute_of" => :attribute_of,
  "attributes_of" => :attributes_of,
  "await" => :await,
  "break" => :break,
  "const" => :const,
  "compiler_flag" => :compiler_flag,
  "gather" => :gather,
  "continue" => :continue,
  "function" => :function,
  "has_attribute" => :has_attribute,
  "defer" => :defer,
  "detach" => :detach,
  "dyn" => :dyn,
  "editable" => :editable,
  "enum" => :enum,
  "else" => :else,
  "emit" => :emit,
  "event" => :event,
  "external" => :external,
  "false" => :false,
  "callable_of" => :callable_of,
  "fields_of" => :fields_of,
  "field_of" => :field_of,
  "flags" => :flags,
  "fn" => :fn,
  "for" => :for,
  "foreign" => :foreign,
  "if" => :if,
  "implements" => :implements,
  "include" => :include,
  "in" => :in,
  "inline" => :inline,
  "inout" => :inout,
  "import" => :import,
  "interface" => :interface,
  "is" => :is,
  "let" => :let,
  "link" => :link,
  "match" => :match,
  "members_of" => :members_of,
  "extending" => :extending,
  "module" => :module,
  "not" => :not,
  "null" => :null,
  "offset_of" => :offset_of,
  "opaque" => :opaque,
  "consuming" => :consuming,
  "or" => :or,
  "out" => :out,
  "parallel" => :parallel,
  "pass" => :pass,
  "proc" => :proc,
  "public" => :public,
  "return" => :return,
  "size_of" => :size_of,
  "static" => :static,
  "static_assert" => :static_assert,
  "struct" => :struct,
  "type" => :type,
  "unsafe" => :unsafe,
  "true" => :true,
  "union" => :union,
  "var" => :var,
  "variant" => :variant,
  "when" => :when,
  "while" => :while,
}.freeze
BUILTIN_PRIMITIVE_NAMES =
%w[
  bool byte ubyte char short ushort int uint long ulong ptr_int ptr_uint float double void str cstr
  vec2 vec3 vec4 ivec2 ivec3 ivec4 mat3 mat4 quat
].freeze
RESERVED_VALUE_TYPE_NAMES =
(BUILTIN_PRIMITIVE_NAMES + %w[
  Option Result
]).freeze
RESERVED_IMPORT_ALIAS_NAMES =
%w[
  Option Result
].freeze
BUILTIN_TYPE_NAMES =
(BUILTIN_PRIMITIVE_NAMES + %w[
  ptr const_ptr own ref span array str_buffer atomic Task Option Result SoA
  struct_handle field_handle callable_handle attribute_handle member_handle type
  EventError Subscription
]).freeze
BUILTIN_ATTRIBUTE_NAMES =
%w[packed align deprecated test expect_fatal].freeze

Class Method Summary collapse

Class Method Details

.builtin_attribute_binding(name, types) ⇒ Object



9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
# File 'lib/milk_tea/core/bindings/attribute_binding.rb', line 9

def builtin_attribute_binding(name, types)
  case name
  when "packed"
    AttributeBinding.new(
      name: "packed",
      targets: [:struct].freeze,
      params: [].freeze,
      module_name: nil,
      builtin: true,
      ast: nil,
    )
  when "align"
    AttributeBinding.new(
      name: "align",
      targets: [:struct].freeze,
      params: [Types::Registry.parameter("bytes", types.fetch("ptr_uint"))].freeze,
      module_name: nil,
      builtin: true,
      ast: nil,
    )
  when "deprecated"
    AttributeBinding.new(
      name: "deprecated",
      targets: %i[callable struct const enum flags union variant event].freeze,
      params: [Types::Registry.parameter("message", types.fetch("str"))].freeze,
      module_name: nil,
      builtin: true,
      ast: nil,
    )
  when "test"
    AttributeBinding.new(
      name: "test",
      targets: [:callable].freeze,
      params: [].freeze,
      module_name: nil,
      builtin: true,
      ast: nil,
    )
  when "expect_fatal"
    AttributeBinding.new(
      name: "expect_fatal",
      targets: [:callable].freeze,
      params: [].freeze,
      module_name: nil,
      builtin: true,
      ast: nil,
    )
  end
end

.data_rootObject



12
13
14
15
16
17
18
19
20
21
# File 'lib/milk_tea/base.rb', line 12

def self.data_root
  @data_root ||= begin
    if !installed_as_gem? && File.writable?(root.to_s)
      root
    else
      xdg_cache = ENV.fetch("XDG_CACHE_HOME", File.join(Dir.home, ".cache"))
      Pathname.new(File.join(xdg_cache, "milk_tea"))
    end
  end
end

.host_platformObject



37
38
39
40
41
42
# File 'lib/milk_tea/base.rb', line 37

def self.host_platform
  return :windows if /mswin|mingw|cygwin/ === RUBY_PLATFORM
  return :darwin if /darwin/ === RUBY_PLATFORM

  :linux
end

.rootObject



8
9
10
# File 'lib/milk_tea/base.rb', line 8

def self.root
  @root ||= Pathname.new(File.expand_path("../..", __dir__))
end

.writable_root_for(root) ⇒ Object



28
29
30
31
32
33
34
35
# File 'lib/milk_tea/base.rb', line 28

def self.writable_root_for(root)
  resolved = Pathname.new(File.expand_path(root.to_s))
  if resolved.to_s == MilkTea.root.to_s
    data_root
  else
    resolved
  end
end