phlex 2.3.1 → 2.4.0.beta2
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/phlex/compiler/class_compiler.rb +47 -0
- data/lib/phlex/compiler/compactor.rb +74 -0
- data/lib/phlex/compiler/file_compiler.rb +52 -0
- data/lib/phlex/compiler/method_compiler.rb +579 -0
- data/lib/phlex/compiler.rb +59 -0
- data/lib/phlex/html.rb +3 -3
- data/lib/phlex/sgml/attributes.rb +280 -0
- data/lib/phlex/sgml/elements.rb +8 -8
- data/lib/phlex/sgml.rb +22 -257
- data/lib/phlex/svg.rb +2 -2
- data/lib/phlex/version.rb +1 -1
- data/lib/phlex.rb +2 -0
- metadata +23 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 01002f30f11a82c8fce49ec63ce50cd3947c40a50d66c9fd02123c87a89f434c
|
4
|
+
data.tar.gz: 0b40acfa20d82bf9c7e6bb68c8aeca447731d56436b2876750bfc669e9ba52a4
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 68d5a712386d7da44bb013ee956dde702d6e9f68e1cc237aac8a706a27cbff312dfd81a03405c9330f3109b87e7ff312711cf07a2e022ae1a256d984d60062cb
|
7
|
+
data.tar.gz: 9dd429c7d0a3d0b962ca1d6b653abd79260134c743f6322e87e90d3af200b188695cf8a2e3a6588ba2d731f6227f0c1ef1bb45b1bfd37f9ae2d6b02764a93d3a
|
@@ -0,0 +1,47 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
class Phlex::Compiler::ClassCompiler < Refract::Visitor
|
4
|
+
def initialize(component, path)
|
5
|
+
super()
|
6
|
+
@component = component
|
7
|
+
@path = path
|
8
|
+
@compiled_snippets = []
|
9
|
+
end
|
10
|
+
|
11
|
+
def compile(node)
|
12
|
+
visit(node.body)
|
13
|
+
@compiled_snippets.compact.freeze
|
14
|
+
end
|
15
|
+
|
16
|
+
visit Refract::DefNode do |node|
|
17
|
+
return if node.name == :initialize
|
18
|
+
return if node.receiver
|
19
|
+
|
20
|
+
method = begin
|
21
|
+
Phlex::UNBOUND_INSTANCE_METHOD_METHOD.bind_call(@component, node.name)
|
22
|
+
rescue NameError
|
23
|
+
nil
|
24
|
+
end
|
25
|
+
|
26
|
+
return unless method
|
27
|
+
path, lineno = method.source_location
|
28
|
+
return unless @path == path
|
29
|
+
return unless node.start_line == lineno
|
30
|
+
|
31
|
+
@compiled_snippets << Phlex::Compiler::MethodCompiler.new(
|
32
|
+
@component
|
33
|
+
).compile(node)
|
34
|
+
end
|
35
|
+
|
36
|
+
visit Refract::ClassNode do |node|
|
37
|
+
nil
|
38
|
+
end
|
39
|
+
|
40
|
+
visit Refract::ModuleNode do |node|
|
41
|
+
nil
|
42
|
+
end
|
43
|
+
|
44
|
+
visit Refract::BlockNode do |node|
|
45
|
+
nil
|
46
|
+
end
|
47
|
+
end
|
@@ -0,0 +1,74 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
class Phlex::Compiler::Compactor < Refract::MutationVisitor
|
4
|
+
visit Refract::StatementsNode do |node|
|
5
|
+
queue = []
|
6
|
+
results = []
|
7
|
+
current_buffer = nil
|
8
|
+
nil_context = false
|
9
|
+
|
10
|
+
node.body.reverse_each { |n| queue << n }
|
11
|
+
|
12
|
+
while (child_node = queue.pop)
|
13
|
+
case child_node
|
14
|
+
when Refract::StatementsNode
|
15
|
+
child_node.body.reverse_each { |n| queue << n }
|
16
|
+
when Phlex::Compiler::Concat
|
17
|
+
if current_buffer
|
18
|
+
current_buffer << child_node.node
|
19
|
+
unless nil_context
|
20
|
+
results << Refract::NilNode.new
|
21
|
+
nil_context = true
|
22
|
+
end
|
23
|
+
else
|
24
|
+
current_buffer = [child_node.node]
|
25
|
+
results << Refract::ParenthesesNode.new(
|
26
|
+
body: Refract::StatementsNode.new(
|
27
|
+
body: [
|
28
|
+
Refract::IfNode.new(
|
29
|
+
inline: false,
|
30
|
+
predicate: Refract::LocalVariableReadNode.new(
|
31
|
+
name: :__phlex_should_render__
|
32
|
+
),
|
33
|
+
statements: Refract::StatementsNode.new(
|
34
|
+
body: [
|
35
|
+
Refract::CallNode.new(
|
36
|
+
receiver: Refract::CallNode.new(
|
37
|
+
name: :__phlex_buffer__,
|
38
|
+
),
|
39
|
+
name: :<<,
|
40
|
+
arguments: Refract::ArgumentsNode.new(
|
41
|
+
arguments: [
|
42
|
+
Refract::InterpolatedStringNode.new(
|
43
|
+
parts: current_buffer
|
44
|
+
),
|
45
|
+
]
|
46
|
+
)
|
47
|
+
),
|
48
|
+
]
|
49
|
+
)
|
50
|
+
),
|
51
|
+
Refract::NilNode.new,
|
52
|
+
]
|
53
|
+
)
|
54
|
+
)
|
55
|
+
nil_context = true
|
56
|
+
end
|
57
|
+
else
|
58
|
+
resolved = visit(child_node)
|
59
|
+
case resolved
|
60
|
+
when Refract::StatementsNode
|
61
|
+
resolved.body.reverse_each { |n| queue << n }
|
62
|
+
else
|
63
|
+
current_buffer = nil
|
64
|
+
results << resolved
|
65
|
+
nil_context = false
|
66
|
+
end
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
70
|
+
node.copy(
|
71
|
+
body: results
|
72
|
+
)
|
73
|
+
end
|
74
|
+
end
|
@@ -0,0 +1,52 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
class Phlex::Compiler::FileCompiler < Refract::Visitor
|
4
|
+
Result = Data.define(:namespace, :compiled_snippets)
|
5
|
+
|
6
|
+
def initialize(path)
|
7
|
+
super()
|
8
|
+
@path = path
|
9
|
+
@current_namespace = []
|
10
|
+
@results = []
|
11
|
+
end
|
12
|
+
|
13
|
+
def compile(node)
|
14
|
+
visit(node)
|
15
|
+
@results.freeze
|
16
|
+
end
|
17
|
+
|
18
|
+
visit Refract::ModuleNode do |node|
|
19
|
+
@current_namespace.push(node)
|
20
|
+
super(node)
|
21
|
+
@current_namespace.pop
|
22
|
+
end
|
23
|
+
|
24
|
+
visit Refract::ClassNode do |node|
|
25
|
+
@current_namespace.push(node)
|
26
|
+
|
27
|
+
namespace = @current_namespace.map do |node|
|
28
|
+
Refract::Formatter.new.format_node(node.constant_path).source
|
29
|
+
end.join("::")
|
30
|
+
|
31
|
+
const = eval(namespace, TOPLEVEL_BINDING)
|
32
|
+
|
33
|
+
if Class === const && Phlex::SGML > const
|
34
|
+
@results << Result.new(
|
35
|
+
namespace: @current_namespace.dup.freeze,
|
36
|
+
compiled_snippets: Phlex::Compiler::ClassCompiler.new(const, @path).compile(node)
|
37
|
+
)
|
38
|
+
else
|
39
|
+
super(node)
|
40
|
+
end
|
41
|
+
|
42
|
+
@current_namespace.pop
|
43
|
+
end
|
44
|
+
|
45
|
+
visit Refract::DefNode do |node|
|
46
|
+
nil
|
47
|
+
end
|
48
|
+
|
49
|
+
visit Refract::BlockNode do |node|
|
50
|
+
nil
|
51
|
+
end
|
52
|
+
end
|