From 5c6ce3a7ae5538879e8d9302a810383003792789 Mon Sep 17 00:00:00 2001 From: Sijawusz Pur Rahnama Date: Sat, 9 May 2026 19:53:26 +0200 Subject: [PATCH 1/5] Simplify statements --- src/compiler.cr | 7 +++---- src/compilers/access.cr | 7 +++---- src/formatters/statement.cr | 9 ++++----- 3 files changed, 10 insertions(+), 13 deletions(-) diff --git a/src/compiler.cr b/src/compiler.cr index 91309fa70..26d27955b 100644 --- a/src/compiler.cr +++ b/src/compiler.cr @@ -502,8 +502,9 @@ module Mint id = type.name + type.parameters.size.to_s - case tag = @tags[id]? - when Nil + if tag = @tags[id]? + artifacts.references.replace(node, tag.node) + else tag = Tag.new(id, node) @@ -527,8 +528,6 @@ module Mint add(node, tag, js.call(Builtin::Variant, args)) @tags[id] = tag - else - artifacts.references.replace(node, tag.node) end [@tags[id]] of Item diff --git a/src/compilers/access.cr b/src/compilers/access.cr index 000208b85..4b9145e8e 100644 --- a/src/compilers/access.cr +++ b/src/compilers/access.cr @@ -5,15 +5,14 @@ module Mint if items = variables[node]? case item = items[0] when Ast::TypeVariant - case type = cache[node]? - when nil - [] of Item - else + if type = cache[node]? if type.name == "Function" js.call(Builtin::NewVariant, [tag(item, cache[item])] of Compiled) else js.new(tag(item, cache[item]), [] of Compiled) end + else + [] of Item end else # `subscriptions` is a special case: both the parent and the entity diff --git a/src/formatters/statement.cr b/src/formatters/statement.cr index 5a8cdc15f..1f53eb00e 100644 --- a/src/formatters/statement.cr +++ b/src/formatters/statement.cr @@ -9,18 +9,17 @@ module Mint [" or return "] + format(item) end - case node.target - when Nil - expression + return_call - else + if target = node.target target = - format node.target + format target if newline ["let "] + target + [" =", Nest.new([Line.new(1)] + expression)] + return_call else ["let "] + target + [" = "] + expression + return_call end + else + expression + return_call end end end From b03401a634660fa109208093d0a8f10999189a89 Mon Sep 17 00:00:00 2001 From: Sijawusz Pur Rahnama Date: Sat, 9 May 2026 19:56:14 +0200 Subject: [PATCH 2/5] Extract code into `compile_access_item` private helper method --- src/compilers/access.cr | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/src/compilers/access.cr b/src/compilers/access.cr index 4b9145e8e..621ea544b 100644 --- a/src/compilers/access.cr +++ b/src/compilers/access.cr @@ -1,5 +1,16 @@ module Mint class Compiler + private def compile_access_item(item) + case item + when Ast::Get + js.call(item, [] of Compiled) + when Ast::State, Ast::Signal + [Signal.new(item)] of Item + else + [item] of Item + end + end + def compile(node : Ast::Access) : Compiled compile node do if items = variables[node]? @@ -25,14 +36,7 @@ module Mint end end - case item = items[0] - when Ast::Get - js.call(item, [] of Compiled) - when Ast::State, Ast::Signal - [Signal.new(item)] of Item - else - [item] of Item - end + compile_access_item(items[0]) end elsif record_field_lookup[node.field]? compile(node.expression) + ["."] + [node.field.value] of Item @@ -44,12 +48,8 @@ module Mint case field = lookup[0] when Ast::Variable [Signal.new(lookup[0])] of Item - when Ast::Get - js.call(field, [] of Compiled) - when Ast::State, Ast::Signal - [Signal.new(field)] of Item else - [field] of Item + compile_access_item(field) end compile(node.expression) + ["."] + item From 51d4a9239f07396ddb3190d05af5118049b8c638 Mon Sep 17 00:00:00 2001 From: Sijawusz Pur Rahnama Date: Sat, 9 May 2026 19:56:54 +0200 Subject: [PATCH 3/5] Use the `field` variable --- src/compilers/access.cr | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/compilers/access.cr b/src/compilers/access.cr index 621ea544b..7c7af8891 100644 --- a/src/compilers/access.cr +++ b/src/compilers/access.cr @@ -47,7 +47,7 @@ module Mint item = case field = lookup[0] when Ast::Variable - [Signal.new(lookup[0])] of Item + [Signal.new(field)] of Item else compile_access_item(field) end From 945ab6fd029ef8ba38c1ec8cd7331c560438d918 Mon Sep 17 00:00:00 2001 From: Sijawusz Pur Rahnama Date: Sat, 9 May 2026 20:00:52 +0200 Subject: [PATCH 4/5] Fix missing backtick in comment --- src/ls/definitions/variable.cr | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/ls/definitions/variable.cr b/src/ls/definitions/variable.cr index b2984f4a1..212ebf8b3 100644 --- a/src/ls/definitions/variable.cr +++ b/src/ls/definitions/variable.cr @@ -37,7 +37,7 @@ module Mint end def variable_lookup_parent(node : Ast::Variable, variable : Ast::Variable) - # For some variables in the .variables` cache, we only have access to the + # For some variables in the `.variables` cache, we only have access to the # target Ast::Variable and not its containing node, so we must search for it return unless parent = @type_checker.artifacts.ast.nodes From c0553e039a56d685ccaaf49b6c705973607e5bc2 Mon Sep 17 00:00:00 2001 From: Sijawusz Pur Rahnama Date: Sat, 9 May 2026 20:08:36 +0200 Subject: [PATCH 5/5] Cleanup unused variable --- src/ls/definitions/variable.cr | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/src/ls/definitions/variable.cr b/src/ls/definitions/variable.cr index 212ebf8b3..82e5259e6 100644 --- a/src/ls/definitions/variable.cr +++ b/src/ls/definitions/variable.cr @@ -3,17 +3,15 @@ module Mint class Definitions def definition(node : Ast::Variable) if lookup = @type_checker.variables[node]? - entity, parent = lookup - - case {entity, parent} - when {Ast::TypeDefinition, _} + case entity = lookup[0] + when Ast::TypeDefinition location_link node, entity.name, entity - when {Ast::TypeVariant, _} + when Ast::TypeVariant location_link node, entity.value, entity - when {Ast::Component, _}, - {Ast::Store, _} + when Ast::Component, + Ast::Store location_link node, entity.name, entity - when {Ast::Module, _} + when Ast::Module links = @type_checker.artifacts.ast.modules .select(&.name.value.==(node.value)) @@ -25,7 +23,7 @@ module Mint return links.first if links.size == 1 links unless links.empty? - when {Ast::Variable, _} + when Ast::Variable variable_lookup_parent(node, entity) else variable_lookup(node, entity)