infinity-data 3.2.0__tar.gz → 3.3.0__tar.gz
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.
- {infinity_data-3.2.0/src/infinity_data.egg-info → infinity_data-3.3.0}/PKG-INFO +1 -1
- {infinity_data-3.2.0 → infinity_data-3.3.0}/pyproject.toml +1 -1
- {infinity_data-3.2.0 → infinity_data-3.3.0}/src/infinity_data/semantic/builder/builder.py +11 -1
- {infinity_data-3.2.0 → infinity_data-3.3.0}/src/infinity_data/semantic/diagnostics.py +5 -0
- {infinity_data-3.2.0 → infinity_data-3.3.0}/src/infinity_data/semantic/resolver/resolver.py +6 -3
- {infinity_data-3.2.0 → infinity_data-3.3.0/src/infinity_data.egg-info}/PKG-INFO +1 -1
- {infinity_data-3.2.0 → infinity_data-3.3.0}/LICENSE +0 -0
- {infinity_data-3.2.0 → infinity_data-3.3.0}/README.md +0 -0
- {infinity_data-3.2.0 → infinity_data-3.3.0}/setup.cfg +0 -0
- {infinity_data-3.2.0 → infinity_data-3.3.0}/src/infinity_data/__init__.py +0 -0
- {infinity_data-3.2.0 → infinity_data-3.3.0}/src/infinity_data/emit/__init__.py +0 -0
- {infinity_data-3.2.0 → infinity_data-3.3.0}/src/infinity_data/emit/config.py +0 -0
- {infinity_data-3.2.0 → infinity_data-3.3.0}/src/infinity_data/emit/converter.py +0 -0
- {infinity_data-3.2.0 → infinity_data-3.3.0}/src/infinity_data/emit/plain_yaml.py +0 -0
- {infinity_data-3.2.0 → infinity_data-3.3.0}/src/infinity_data/frontend.py +0 -0
- {infinity_data-3.2.0 → infinity_data-3.3.0}/src/infinity_data/infra/__init__.py +0 -0
- {infinity_data-3.2.0 → infinity_data-3.3.0}/src/infinity_data/infra/diagnostics.py +0 -0
- {infinity_data-3.2.0 → infinity_data-3.3.0}/src/infinity_data/infra/file.py +0 -0
- {infinity_data-3.2.0 → infinity_data-3.3.0}/src/infinity_data/infra/ll1_stream.py +0 -0
- {infinity_data-3.2.0 → infinity_data-3.3.0}/src/infinity_data/infra/location.py +0 -0
- {infinity_data-3.2.0 → infinity_data-3.3.0}/src/infinity_data/infra/path.py +0 -0
- {infinity_data-3.2.0 → infinity_data-3.3.0}/src/infinity_data/parser/__init__.py +0 -0
- {infinity_data-3.2.0 → infinity_data-3.3.0}/src/infinity_data/parser/diagnostics.py +0 -0
- {infinity_data-3.2.0 → infinity_data-3.3.0}/src/infinity_data/parser/models.py +0 -0
- {infinity_data-3.2.0 → infinity_data-3.3.0}/src/infinity_data/parser/parser.py +0 -0
- {infinity_data-3.2.0 → infinity_data-3.3.0}/src/infinity_data/parser/token_stream.py +0 -0
- {infinity_data-3.2.0 → infinity_data-3.3.0}/src/infinity_data/pipeline.py +0 -0
- {infinity_data-3.2.0 → infinity_data-3.3.0}/src/infinity_data/py.typed +0 -0
- {infinity_data-3.2.0 → infinity_data-3.3.0}/src/infinity_data/sandbox/__init__.py +0 -0
- {infinity_data-3.2.0 → infinity_data-3.3.0}/src/infinity_data/sandbox/config.py +0 -0
- {infinity_data-3.2.0 → infinity_data-3.3.0}/src/infinity_data/sandbox/errors.py +0 -0
- {infinity_data-3.2.0 → infinity_data-3.3.0}/src/infinity_data/sandbox/mediator.py +0 -0
- {infinity_data-3.2.0 → infinity_data-3.3.0}/src/infinity_data/sandbox/schema.py +0 -0
- {infinity_data-3.2.0 → infinity_data-3.3.0}/src/infinity_data/semantic/__init__.py +0 -0
- {infinity_data-3.2.0 → infinity_data-3.3.0}/src/infinity_data/semantic/builder/__init__.py +0 -0
- {infinity_data-3.2.0 → infinity_data-3.3.0}/src/infinity_data/semantic/builder/models.py +0 -0
- {infinity_data-3.2.0 → infinity_data-3.3.0}/src/infinity_data/semantic/constraints.py +0 -0
- {infinity_data-3.2.0 → infinity_data-3.3.0}/src/infinity_data/semantic/executor/__init__.py +0 -0
- {infinity_data-3.2.0 → infinity_data-3.3.0}/src/infinity_data/semantic/executor/executor.py +0 -0
- {infinity_data-3.2.0 → infinity_data-3.3.0}/src/infinity_data/semantic/jsonpath.py +0 -0
- {infinity_data-3.2.0 → infinity_data-3.3.0}/src/infinity_data/semantic/registry/__init__.py +0 -0
- {infinity_data-3.2.0 → infinity_data-3.3.0}/src/infinity_data/semantic/registry/_core.py +0 -0
- {infinity_data-3.2.0 → infinity_data-3.3.0}/src/infinity_data/semantic/registry/dict_constraints.py +0 -0
- {infinity_data-3.2.0 → infinity_data-3.3.0}/src/infinity_data/semantic/registry/general.py +0 -0
- {infinity_data-3.2.0 → infinity_data-3.3.0}/src/infinity_data/semantic/registry/logic.py +0 -0
- {infinity_data-3.2.0 → infinity_data-3.3.0}/src/infinity_data/semantic/registry/types.py +0 -0
- {infinity_data-3.2.0 → infinity_data-3.3.0}/src/infinity_data/semantic/resolver/__init__.py +0 -0
- {infinity_data-3.2.0 → infinity_data-3.3.0}/src/infinity_data/semantic/resolver/identity.py +0 -0
- {infinity_data-3.2.0 → infinity_data-3.3.0}/src/infinity_data/semantic/resolver/imports.py +0 -0
- {infinity_data-3.2.0 → infinity_data-3.3.0}/src/infinity_data/semantic/resolver/models.py +0 -0
- {infinity_data-3.2.0 → infinity_data-3.3.0}/src/infinity_data/semantic/std.py +0 -0
- {infinity_data-3.2.0 → infinity_data-3.3.0}/src/infinity_data/tokenizer/__init__.py +0 -0
- {infinity_data-3.2.0 → infinity_data-3.3.0}/src/infinity_data/tokenizer/char_stream.py +0 -0
- {infinity_data-3.2.0 → infinity_data-3.3.0}/src/infinity_data/tokenizer/diagnostics.py +0 -0
- {infinity_data-3.2.0 → infinity_data-3.3.0}/src/infinity_data/tokenizer/finalizer.py +0 -0
- {infinity_data-3.2.0 → infinity_data-3.3.0}/src/infinity_data/tokenizer/models/__init__.py +0 -0
- {infinity_data-3.2.0 → infinity_data-3.3.0}/src/infinity_data/tokenizer/models/raw_tokens.py +0 -0
- {infinity_data-3.2.0 → infinity_data-3.3.0}/src/infinity_data/tokenizer/models/tokens.py +0 -0
- {infinity_data-3.2.0 → infinity_data-3.3.0}/src/infinity_data/tokenizer/tokenizer.py +0 -0
- {infinity_data-3.2.0 → infinity_data-3.3.0}/src/infinity_data/tools/__init__.py +0 -0
- {infinity_data-3.2.0 → infinity_data-3.3.0}/src/infinity_data/tools/cov/__init__.py +0 -0
- {infinity_data-3.2.0 → infinity_data-3.3.0}/src/infinity_data/tools/cov/__main__.py +0 -0
- {infinity_data-3.2.0 → infinity_data-3.3.0}/src/infinity_data/tools/cov/cli.py +0 -0
- {infinity_data-3.2.0 → infinity_data-3.3.0}/src/infinity_data/tools/cov/convert.py +0 -0
- {infinity_data-3.2.0 → infinity_data-3.3.0}/src/infinity_data/tools/lsp/__init__.py +0 -0
- {infinity_data-3.2.0 → infinity_data-3.3.0}/src/infinity_data/tools/lsp/__main__.py +0 -0
- {infinity_data-3.2.0 → infinity_data-3.3.0}/src/infinity_data/tools/lsp/language.py +0 -0
- {infinity_data-3.2.0 → infinity_data-3.3.0}/src/infinity_data/tools/lsp/positions.py +0 -0
- {infinity_data-3.2.0 → infinity_data-3.3.0}/src/infinity_data/tools/lsp/protocol.py +0 -0
- {infinity_data-3.2.0 → infinity_data-3.3.0}/src/infinity_data/tools/lsp/server.py +0 -0
- {infinity_data-3.2.0 → infinity_data-3.3.0}/src/infinity_data.egg-info/SOURCES.txt +0 -0
- {infinity_data-3.2.0 → infinity_data-3.3.0}/src/infinity_data.egg-info/dependency_links.txt +0 -0
- {infinity_data-3.2.0 → infinity_data-3.3.0}/src/infinity_data.egg-info/entry_points.txt +0 -0
- {infinity_data-3.2.0 → infinity_data-3.3.0}/src/infinity_data.egg-info/requires.txt +0 -0
- {infinity_data-3.2.0 → infinity_data-3.3.0}/src/infinity_data.egg-info/top_level.txt +0 -0
|
@@ -541,6 +541,8 @@ class AstBuilder:
|
|
|
541
541
|
|
|
542
542
|
type_cast 为显式 as bool/int/float/str 转换;source 为 ``$name`` 表达式在源码中的位置。
|
|
543
543
|
本文件空间查不到 → ``dollar.undefined`` 警告取 null(不中断编译)。
|
|
544
|
+
非字符串结构化值(list / dict)应用 as → ``dollar.convert_unsupported``
|
|
545
|
+
错误 + 原样返回(容错继续编译,§1.8)。
|
|
544
546
|
"""
|
|
545
547
|
namespace = scope.namespaces if scope is not None else {}
|
|
546
548
|
if name not in namespace:
|
|
@@ -552,7 +554,15 @@ class AstBuilder:
|
|
|
552
554
|
if type_cast is None:
|
|
553
555
|
return raw
|
|
554
556
|
if isinstance(raw, (StdArray, StdObject)):
|
|
555
|
-
|
|
557
|
+
# 结构化值(list / dict)不支持 as 转换:写了 as 就必须转换、不静默忽略——
|
|
558
|
+
# 报错 + 原样返回容错(继续编译)
|
|
559
|
+
self._err(
|
|
560
|
+
'dollar.convert_unsupported',
|
|
561
|
+
{'name': name, 'kind': 'list' if isinstance(raw, StdArray) else 'dict', 'type': type_cast},
|
|
562
|
+
source,
|
|
563
|
+
path,
|
|
564
|
+
)
|
|
565
|
+
return raw
|
|
556
566
|
# 空字面量:as 转换**保持传播**(null → null、noexist → noexist),
|
|
557
567
|
# 不做任何转换、不产生警告——三态可空语义不因显式 as 而丢失
|
|
558
568
|
# (此时 raw 已收窄为 StdLiteral)
|
|
@@ -135,6 +135,11 @@ register_diagnostic_define(
|
|
|
135
135
|
'{path_prefix}无法将 ${name}={raw!r} 转为 {type}',
|
|
136
136
|
en='{path_prefix}cannot convert ${name}={raw!r} to {type}',
|
|
137
137
|
),
|
|
138
|
+
diagnostic_define(
|
|
139
|
+
'dollar.convert_unsupported',
|
|
140
|
+
'{path_prefix}结构化值 ${name}({kind})不支持 as {type} 转换,已原样保留',
|
|
141
|
+
en='{path_prefix}structured value ${name} ({kind}) does not support as {type}; kept as-is',
|
|
142
|
+
),
|
|
138
143
|
diagnostic_define('inft.not_allowed', '{path_prefix}.inft 文件只允许模板定义,发现其他语句'),
|
|
139
144
|
diagnostic_define('error.generic', '{path_prefix}{message}'),
|
|
140
145
|
# ═══════════════════════════════════════════════════════════
|
|
@@ -192,6 +192,7 @@ class TemplateGraphResolver:
|
|
|
192
192
|
"""把 ``!from`` 的导入项映射进目标 scope;冲突一律 ERROR。
|
|
193
193
|
|
|
194
194
|
- 导入文件中不存在该模板 → ERROR
|
|
195
|
+
- 可见名(含 ``as`` 别名)与注册约束同名 → ERROR(模板即约束,内置约束不可被遮蔽)
|
|
195
196
|
- 可见名与文件内定义同名 → ERROR(与文件内定义冲突)
|
|
196
197
|
- 可见名已存在(重复导入)→ ERROR,保留先到者(拒绝隐式覆盖)
|
|
197
198
|
"""
|
|
@@ -203,6 +204,8 @@ class TemplateGraphResolver:
|
|
|
203
204
|
)
|
|
204
205
|
continue
|
|
205
206
|
visible = item.alias or item.name
|
|
207
|
+
if self._check_template_name_conflict(visible, item.source):
|
|
208
|
+
continue
|
|
206
209
|
if visible in scope.visible:
|
|
207
210
|
if visible in local_names:
|
|
208
211
|
self._collector.add(
|
|
@@ -295,9 +298,9 @@ class TemplateGraphResolver:
|
|
|
295
298
|
imported_doc = self._parse_document(file)
|
|
296
299
|
|
|
297
300
|
# 1) 本地模板:先注册(循环导入时依赖文件的本地名部分已可见)
|
|
298
|
-
#
|
|
299
|
-
#
|
|
300
|
-
#
|
|
301
|
+
# 身份初始按来源文件路径区分(收集阶段,避免同名互相覆盖);最终由
|
|
302
|
+
# _remap_content_identities 重算为依赖闭包组合哈希(§2.5)——内容 + 依赖
|
|
303
|
+
# 相同 → 同身份;依赖不同 → 依赖 identity 进 hash → 自然区分
|
|
301
304
|
scope: Scope = Scope()
|
|
302
305
|
local_names: set[str] = set()
|
|
303
306
|
for s in imported_doc.statements:
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{infinity_data-3.2.0 → infinity_data-3.3.0}/src/infinity_data/semantic/registry/dict_constraints.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{infinity_data-3.2.0 → infinity_data-3.3.0}/src/infinity_data/tokenizer/models/raw_tokens.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|