mirror of
https://github.com/pjh456/OxideJS.git
synced 2026-10-25 11:11:11 +08:00
fix: 语义重名诊断引擎侧复核,放行跨语句列的函数名合并
供应商语义检查器把"同语句列"近似为"声明域非 Top/Function 且前一项是函数声明",for-in/for-of 域用空 ScopeFlags 因而漏掉 Top|Function 守卫,误拒跨语句列的函数名与 var 头合法合并。 引擎侧在归一化前按 AST 复核:仅当函数非任一 block/case 列表 直接成员、或其外层链不含该列表时剔除该重名诊断,复核后无 剩余错误则落回解析成功。
This commit is contained in:
@@ -2,6 +2,7 @@
|
||||
|
||||
mod error;
|
||||
mod parser_log;
|
||||
mod redeclaration_filter;
|
||||
|
||||
/// 解析错误:消息 + 源文件字节区间(起始,结束)。
|
||||
pub use error::OxideError;
|
||||
@@ -46,7 +47,13 @@ fn parse_with_source_type<'a>(
|
||||
.with_check_syntax_error(true)
|
||||
.build(&ret.program);
|
||||
if !semantic_ret.errors.is_empty() {
|
||||
return Err(semantic_ret.errors.into_iter().map(OxideError::from).collect());
|
||||
// 重名诊断先经 AST 复核剔除跨语句列合法合并的误报(须在归一化前,
|
||||
// 归一化只留首标签会丢失复核所需的新声明 span);复核后无剩余
|
||||
// 错误时按解析成功落回。
|
||||
let filtered = redeclaration_filter::filter_semantic_diagnostics(semantic_ret.errors, &ret.program);
|
||||
if !filtered.is_empty() {
|
||||
return Err(filtered.into_iter().map(OxideError::from).collect());
|
||||
}
|
||||
}
|
||||
|
||||
Ok(ret.program)
|
||||
|
||||
Reference in New Issue
Block a user