parsanol 1.3.126 → 1.3.127
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/Cargo.lock +4 -4
- data/lib/parsanol/parg/bindings.rb +16 -17
- data/lib/parsanol/version.rb +1 -1
- metadata +1 -1
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 546957659860d8cd0f8303884dab80d9b5eda15e7c88a1640af61abb649cbf26
|
|
4
|
+
data.tar.gz: 31b2b2f388f0909aaabcfbedaa1bb28e15c1a361bc1d8191642d7c4d0cbe7941
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: c6241ab7dfabaab19533b55a34e959e01e6492d186aeb456618ed15dea5ac4d17d263c3adfef2cee36190d4511e788be5e89147770c19f53d66bfb024a2eb730
|
|
7
|
+
data.tar.gz: 92827122ae0fa4149ad9df3353e5bce8d5d30a015049a2ebef91b0ba17a2290fba27649c1284a53637c65e18952777e3524ac8edd502959efae5a58abef360e1
|
data/Cargo.lock
CHANGED
|
@@ -307,9 +307,9 @@ checksum = "9f7c3e4beb33f85d45ae3e3a1792185706c8e16d043238c593331cc7cd313b50"
|
|
|
307
307
|
|
|
308
308
|
[[package]]
|
|
309
309
|
name = "parsanol"
|
|
310
|
-
version = "0.19.
|
|
310
|
+
version = "0.19.20"
|
|
311
311
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
312
|
-
checksum = "
|
|
312
|
+
checksum = "a46c6589eedd0fe3d0defd2511a38eed85fd066ffc9a566c87bfc2c0d4247d16"
|
|
313
313
|
dependencies = [
|
|
314
314
|
"ahash",
|
|
315
315
|
"getrandom 0.3.4",
|
|
@@ -326,9 +326,9 @@ dependencies = [
|
|
|
326
326
|
|
|
327
327
|
[[package]]
|
|
328
328
|
name = "parsanol-derive"
|
|
329
|
-
version = "0.19.
|
|
329
|
+
version = "0.19.20"
|
|
330
330
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
331
|
-
checksum = "
|
|
331
|
+
checksum = "0a4e3935f53a2b90189756055eb8e9ceef14fb42f62c7a419dce385db57652a7"
|
|
332
332
|
dependencies = [
|
|
333
333
|
"proc-macro2",
|
|
334
334
|
"quote",
|
|
@@ -36,10 +36,24 @@ module Parsanol
|
|
|
36
36
|
# bound map (parsanol-ruby#413): a capture present in the parse
|
|
37
37
|
# but bound nowhere is silent data loss, the one case the
|
|
38
38
|
# binding layer's other checks miss. Absence in the TREE is
|
|
39
|
-
# legitimate optionality and never raises.
|
|
39
|
+
# legitimate optionality and never raises. Coverage is checked
|
|
40
|
+
# against every hash key anywhere in the bound map, not just the
|
|
41
|
+
# binding's own leaf: a `(raw)` binding carries its entire
|
|
42
|
+
# subtree, so captures nested inside a raw-bound ancestor are
|
|
43
|
+
# delivered through it (parsanol-ruby#427 — BS 9113 bundled_list).
|
|
44
|
+
bound_keys = {}
|
|
45
|
+
walk_keys = lambda do |node|
|
|
46
|
+
case node
|
|
47
|
+
when Hash
|
|
48
|
+
node.each_key { |key| bound_keys[key.to_sym] = true }
|
|
49
|
+
node.each_value { |value| walk_keys.call(value) }
|
|
50
|
+
when Array then node.each(&walk_keys)
|
|
51
|
+
end
|
|
52
|
+
end
|
|
53
|
+
walk_keys.call(out)
|
|
40
54
|
lost = bindings.select do |binding|
|
|
41
55
|
capture = binding["capture"].to_sym
|
|
42
|
-
present.include?(capture) && !
|
|
56
|
+
present.include?(capture) && !bound_keys.key?(capture)
|
|
43
57
|
end
|
|
44
58
|
unless lost.empty?
|
|
45
59
|
raise BindError,
|
|
@@ -49,21 +63,6 @@ module Parsanol
|
|
|
49
63
|
out
|
|
50
64
|
end
|
|
51
65
|
|
|
52
|
-
# Did this binding contribute anything to the bound map? Scalars
|
|
53
|
-
# bind under their leaf key; array groups bind under their prefix.
|
|
54
|
-
def bound?(out, binding)
|
|
55
|
-
path = binding["path"].to_s
|
|
56
|
-
if path.include?("[]")
|
|
57
|
-
prefix = path.split("[]").first.to_sym
|
|
58
|
-
rows = out[prefix]
|
|
59
|
-
rows.is_a?(Array) && rows.any? do |row|
|
|
60
|
-
row.is_a?(Hash) && row.key?(leaf_key(binding))
|
|
61
|
-
end
|
|
62
|
-
else
|
|
63
|
-
out.key?(leaf_key(binding))
|
|
64
|
-
end
|
|
65
|
-
end
|
|
66
|
-
|
|
67
66
|
# Canonical test-value form: one equality surface for capture and
|
|
68
67
|
# example expectations on both sides of the comparison (Slice vs
|
|
69
68
|
# source literal was comparing heterogeneous types). Terminals
|
data/lib/parsanol/version.rb
CHANGED