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
|
# File 'lib/jade/frontend/forward_declaration/module.rb', line 14
def deep(node, entry, registry)
node => AST::Module(exposing:, body:)
case exposing
in AST::ExposeList(items:)
items
.reduce(Result[entry, []]) do |acc, exposed|
case exposed
in AST::ExposeValue(name:, range:)
lookup_and_expose_value(acc.entry, name, range)
in AST::ExposeType(name:, range:)
lookup_and_expose_type(acc.entry, name, range)
in AST::ExposeTypeExpand(name:, range:)
lookup_and_expose_type_with_variants(acc.entry, name, range)
end
.add_errors(acc.errors)
end
in AST::ExposeAll
entry
.values
.merge(entry.types)
.reduce(entry) { |acc, (name, sym)| acc.expose(sym.to_ref) }
.then { Result[it, []] }
in AST::ExposeNone
Result[entry, []]
end
.then { deep_declare_node(body, it.entry, registry).add_errors(it.errors) }
end
|