mirror of
https://github.com/danbulant/oxc
synced 2026-05-19 04:08:41 +00:00
feat(semantic): check for initializers in ambient VariableDeclarations (#5463)
This commit is contained in:
parent
62f7fff88f
commit
0f50b1ed6d
3 changed files with 173 additions and 6 deletions
|
|
@ -100,6 +100,7 @@ pub fn check<'a>(node: &AstNode<'a>, ctx: &SemanticBuilder<'a>) {
|
|||
AstKind::ObjectExpression(expr) => js::check_object_expression(expr, ctx),
|
||||
AstKind::UnaryExpression(expr) => js::check_unary_expression(expr, node, ctx),
|
||||
AstKind::YieldExpression(expr) => js::check_yield_expression(expr, node, ctx),
|
||||
AstKind::VariableDeclaration(decl) => ts::check_variable_declaration(decl, ctx),
|
||||
AstKind::VariableDeclarator(decl) => ts::check_variable_declarator(decl, ctx),
|
||||
AstKind::SimpleAssignmentTarget(target) => ts::check_simple_assignment_target(target, ctx),
|
||||
AstKind::TSInterfaceDeclaration(decl) => ts::check_ts_interface_declaration(decl, ctx),
|
||||
|
|
|
|||
|
|
@ -26,9 +26,25 @@ pub fn check_ts_type_parameter_declaration(
|
|||
}
|
||||
}
|
||||
|
||||
/// Initializers are not allowed in ambient contexts. ts(1039)
|
||||
fn initializer_in_ambient_context(init_span: Span) -> OxcDiagnostic {
|
||||
ts_error("1039", "Initializers are not allowed in ambient contexts.").with_label(init_span)
|
||||
}
|
||||
|
||||
pub fn check_variable_declaration(decl: &VariableDeclaration, ctx: &SemanticBuilder<'_>) {
|
||||
if decl.declare {
|
||||
for var in &decl.declarations {
|
||||
if let Some(init) = &var.init {
|
||||
ctx.error(initializer_in_ambient_context(init.span()));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fn unexpected_optional(span0: Span) -> OxcDiagnostic {
|
||||
OxcDiagnostic::error("Unexpected `?` operator").with_label(span0)
|
||||
}
|
||||
|
||||
#[allow(clippy::cast_possible_truncation)]
|
||||
pub fn check_variable_declarator(decl: &VariableDeclarator, ctx: &SemanticBuilder<'_>) {
|
||||
if decl.id.optional {
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@ commit: a709f989
|
|||
parser_typescript Summary:
|
||||
AST Parsed : 6470/6479 (99.86%)
|
||||
Positive Passed: 6445/6479 (99.48%)
|
||||
Negative Passed: 1203/5715 (21.05%)
|
||||
Negative Passed: 1208/5715 (21.14%)
|
||||
Expect Syntax Error: tasks/coverage/typescript/tests/cases/compiler/ClassDeclaration10.ts
|
||||
Expect Syntax Error: tasks/coverage/typescript/tests/cases/compiler/ClassDeclaration11.ts
|
||||
Expect Syntax Error: tasks/coverage/typescript/tests/cases/compiler/ClassDeclaration13.ts
|
||||
|
|
@ -55,7 +55,6 @@ Expect Syntax Error: tasks/coverage/typescript/tests/cases/compiler/alwaysStrict
|
|||
Expect Syntax Error: tasks/coverage/typescript/tests/cases/compiler/alwaysStrictModule.ts
|
||||
Expect Syntax Error: tasks/coverage/typescript/tests/cases/compiler/alwaysStrictNoImplicitUseStrict.ts
|
||||
Expect Syntax Error: tasks/coverage/typescript/tests/cases/compiler/ambientEnum1.ts
|
||||
Expect Syntax Error: tasks/coverage/typescript/tests/cases/compiler/ambientErrors1.ts
|
||||
Expect Syntax Error: tasks/coverage/typescript/tests/cases/compiler/ambientExportDefaultErrors.ts
|
||||
Expect Syntax Error: tasks/coverage/typescript/tests/cases/compiler/ambientExternalModuleInAnotherExternalModule.ts
|
||||
Expect Syntax Error: tasks/coverage/typescript/tests/cases/compiler/ambientExternalModuleWithRelativeExternalImportDeclaration.ts
|
||||
|
|
@ -415,7 +414,6 @@ Expect Syntax Error: tasks/coverage/typescript/tests/cases/compiler/constDeclara
|
|||
Expect Syntax Error: tasks/coverage/typescript/tests/cases/compiler/constDeclarations-access3.ts
|
||||
Expect Syntax Error: tasks/coverage/typescript/tests/cases/compiler/constDeclarations-access4.ts
|
||||
Expect Syntax Error: tasks/coverage/typescript/tests/cases/compiler/constDeclarations-access5.ts
|
||||
Expect Syntax Error: tasks/coverage/typescript/tests/cases/compiler/constDeclarations-ambient-errors.ts
|
||||
Expect Syntax Error: tasks/coverage/typescript/tests/cases/compiler/constDeclarations-useBeforeDefinition.ts
|
||||
Expect Syntax Error: tasks/coverage/typescript/tests/cases/compiler/constDeclarations-useBeforeDefinition2.ts
|
||||
Expect Syntax Error: tasks/coverage/typescript/tests/cases/compiler/constEnumBadPropertyNames.ts
|
||||
|
|
@ -850,7 +848,6 @@ Expect Syntax Error: tasks/coverage/typescript/tests/cases/compiler/extendPrivat
|
|||
Expect Syntax Error: tasks/coverage/typescript/tests/cases/compiler/extendedInterfacesWithDuplicateTypeParameters.ts
|
||||
Expect Syntax Error: tasks/coverage/typescript/tests/cases/compiler/extendsClauseAlreadySeen.ts
|
||||
Expect Syntax Error: tasks/coverage/typescript/tests/cases/compiler/extendsClauseAlreadySeen2.ts
|
||||
Expect Syntax Error: tasks/coverage/typescript/tests/cases/compiler/externSemantics.ts
|
||||
Expect Syntax Error: tasks/coverage/typescript/tests/cases/compiler/externSyntax.ts
|
||||
Expect Syntax Error: tasks/coverage/typescript/tests/cases/compiler/externalModuleExportingGenericClass.ts
|
||||
Expect Syntax Error: tasks/coverage/typescript/tests/cases/compiler/externalModuleImmutableBindings.ts
|
||||
|
|
@ -2301,7 +2298,6 @@ Expect Syntax Error: tasks/coverage/typescript/tests/cases/conformance/ambient/a
|
|||
Expect Syntax Error: tasks/coverage/typescript/tests/cases/conformance/ambient/ambientDeclarationsPatterns_merging2.ts
|
||||
Expect Syntax Error: tasks/coverage/typescript/tests/cases/conformance/ambient/ambientDeclarationsPatterns_merging3.ts
|
||||
Expect Syntax Error: tasks/coverage/typescript/tests/cases/conformance/ambient/ambientDeclarationsPatterns_tooManyAsterisks.ts
|
||||
Expect Syntax Error: tasks/coverage/typescript/tests/cases/conformance/ambient/ambientErrors.ts
|
||||
Expect Syntax Error: tasks/coverage/typescript/tests/cases/conformance/ambient/ambientExternalModuleInsideNonAmbient.ts
|
||||
Expect Syntax Error: tasks/coverage/typescript/tests/cases/conformance/ambient/ambientExternalModuleInsideNonAmbientExternalModule.ts
|
||||
Expect Syntax Error: tasks/coverage/typescript/tests/cases/conformance/async/asyncFunctionDeclarationParameterEvaluation.ts
|
||||
|
|
@ -3765,7 +3761,6 @@ Expect Syntax Error: tasks/coverage/typescript/tests/cases/conformance/parser/ec
|
|||
Expect Syntax Error: tasks/coverage/typescript/tests/cases/conformance/parser/ecmascript5/ErrorRecovery/parserCommaInTypeMemberList2.ts
|
||||
Expect Syntax Error: tasks/coverage/typescript/tests/cases/conformance/parser/ecmascript5/ErrorRecovery/parserModifierOnPropertySignature1.ts
|
||||
Expect Syntax Error: tasks/coverage/typescript/tests/cases/conformance/parser/ecmascript5/ErrorRecovery/parserModifierOnStatementInBlock1.ts
|
||||
Expect Syntax Error: tasks/coverage/typescript/tests/cases/conformance/parser/ecmascript5/ErrorRecovery/parserModifierOnStatementInBlock2.ts
|
||||
Expect Syntax Error: tasks/coverage/typescript/tests/cases/conformance/parser/ecmascript5/ErrorRecovery/parserModifierOnStatementInBlock3.ts
|
||||
Expect Syntax Error: tasks/coverage/typescript/tests/cases/conformance/parser/ecmascript5/ErrorRecovery/parserModifierOnStatementInBlock4.ts
|
||||
Expect Syntax Error: tasks/coverage/typescript/tests/cases/conformance/parser/ecmascript5/ExportAssignments/parserExportAssignment1.ts
|
||||
|
|
@ -5103,6 +5098,12 @@ Expect to Parse: tasks/coverage/typescript/tests/cases/conformance/salsa/typeFro
|
|||
4 │ }
|
||||
╰────
|
||||
|
||||
× TS(1039): Initializers are not allowed in ambient contexts.
|
||||
╭─[typescript/tests/cases/compiler/ambientErrors1.ts:1:17]
|
||||
1 │ declare var x = 4;
|
||||
· ─
|
||||
╰────
|
||||
|
||||
× Expected a semicolon or an implicit semicolon after a statement, but found none
|
||||
╭─[typescript/tests/cases/compiler/ambientPropertyDeclarationInJs.ts:6:17]
|
||||
5 │
|
||||
|
|
@ -6485,6 +6486,46 @@ Expect to Parse: tasks/coverage/typescript/tests/cases/conformance/salsa/typeFro
|
|||
22 │ }
|
||||
╰────
|
||||
|
||||
× TS(1039): Initializers are not allowed in ambient contexts.
|
||||
╭─[typescript/tests/cases/compiler/constDeclarations-ambient-errors.ts:2:29]
|
||||
1 │ // error: no intialization expected in ambient declarations
|
||||
2 │ declare const c1: boolean = true;
|
||||
· ────
|
||||
3 │ declare const c2: number = 0;
|
||||
╰────
|
||||
|
||||
× TS(1039): Initializers are not allowed in ambient contexts.
|
||||
╭─[typescript/tests/cases/compiler/constDeclarations-ambient-errors.ts:3:28]
|
||||
2 │ declare const c1: boolean = true;
|
||||
3 │ declare const c2: number = 0;
|
||||
· ─
|
||||
4 │ declare const c3 = null, c4 :string = "", c5: any = 0;
|
||||
╰────
|
||||
|
||||
× TS(1039): Initializers are not allowed in ambient contexts.
|
||||
╭─[typescript/tests/cases/compiler/constDeclarations-ambient-errors.ts:4:20]
|
||||
3 │ declare const c2: number = 0;
|
||||
4 │ declare const c3 = null, c4 :string = "", c5: any = 0;
|
||||
· ────
|
||||
5 │
|
||||
╰────
|
||||
|
||||
× TS(1039): Initializers are not allowed in ambient contexts.
|
||||
╭─[typescript/tests/cases/compiler/constDeclarations-ambient-errors.ts:4:39]
|
||||
3 │ declare const c2: number = 0;
|
||||
4 │ declare const c3 = null, c4 :string = "", c5: any = 0;
|
||||
· ──
|
||||
5 │
|
||||
╰────
|
||||
|
||||
× TS(1039): Initializers are not allowed in ambient contexts.
|
||||
╭─[typescript/tests/cases/compiler/constDeclarations-ambient-errors.ts:4:53]
|
||||
3 │ declare const c2: number = 0;
|
||||
4 │ declare const c3 = null, c4 :string = "", c5: any = 0;
|
||||
· ─
|
||||
5 │
|
||||
╰────
|
||||
|
||||
× Missing initializer in const declaration
|
||||
╭─[typescript/tests/cases/compiler/constDeclarations-errors.ts:2:7]
|
||||
1 │ // error, missing intialicer
|
||||
|
|
@ -7826,6 +7867,20 @@ Expect to Parse: tasks/coverage/typescript/tests/cases/conformance/salsa/typeFro
|
|||
╰────
|
||||
help: Try insert a semicolon here
|
||||
|
||||
× TS(1039): Initializers are not allowed in ambient contexts.
|
||||
╭─[typescript/tests/cases/compiler/externSemantics.ts:1:15]
|
||||
1 │ declare var x=10;
|
||||
· ──
|
||||
2 │ declare var v;
|
||||
╰────
|
||||
|
||||
× TS(1039): Initializers are not allowed in ambient contexts.
|
||||
╭─[typescript/tests/cases/compiler/externSemantics.ts:3:22]
|
||||
2 │ declare var v;
|
||||
3 │ declare var y:number=3;
|
||||
· ─
|
||||
╰────
|
||||
|
||||
× Expected `,` but found `=>`
|
||||
╭─[typescript/tests/cases/compiler/fatarrowfunctionsErrors.ts:2:8]
|
||||
1 │ foo((...Far:any[])=>{return 0;})
|
||||
|
|
@ -12672,6 +12727,85 @@ Expect to Parse: tasks/coverage/typescript/tests/cases/conformance/salsa/typeFro
|
|||
12 │ }
|
||||
╰────
|
||||
|
||||
× TS(1039): Initializers are not allowed in ambient contexts.
|
||||
╭─[typescript/tests/cases/compiler/varBlock.ts:15:17]
|
||||
14 │
|
||||
15 │ declare var b = 10;
|
||||
· ──
|
||||
16 │
|
||||
╰────
|
||||
|
||||
× TS(1039): Initializers are not allowed in ambient contexts.
|
||||
╭─[typescript/tests/cases/compiler/varBlock.ts:21:18]
|
||||
20 │
|
||||
21 │ declare var da = 10;
|
||||
· ──
|
||||
22 │ declare var d3, d4 = 10;
|
||||
╰────
|
||||
|
||||
× TS(1039): Initializers are not allowed in ambient contexts.
|
||||
╭─[typescript/tests/cases/compiler/varBlock.ts:22:22]
|
||||
21 │ declare var da = 10;
|
||||
22 │ declare var d3, d4 = 10;
|
||||
· ──
|
||||
23 │
|
||||
╰────
|
||||
|
||||
× TS(1039): Initializers are not allowed in ambient contexts.
|
||||
╭─[typescript/tests/cases/compiler/varBlock.ts:25:21]
|
||||
24 │ module m3 {
|
||||
25 │ declare var d = 10;
|
||||
· ──
|
||||
26 │ declare var d2, d3 = 10, d4 = 10;
|
||||
╰────
|
||||
|
||||
× TS(1039): Initializers are not allowed in ambient contexts.
|
||||
╭─[typescript/tests/cases/compiler/varBlock.ts:26:26]
|
||||
25 │ declare var d = 10;
|
||||
26 │ declare var d2, d3 = 10, d4 = 10;
|
||||
· ──
|
||||
27 │ export declare var dE = 10;
|
||||
╰────
|
||||
|
||||
× TS(1039): Initializers are not allowed in ambient contexts.
|
||||
╭─[typescript/tests/cases/compiler/varBlock.ts:26:35]
|
||||
25 │ declare var d = 10;
|
||||
26 │ declare var d2, d3 = 10, d4 = 10;
|
||||
· ──
|
||||
27 │ export declare var dE = 10;
|
||||
╰────
|
||||
|
||||
× TS(1039): Initializers are not allowed in ambient contexts.
|
||||
╭─[typescript/tests/cases/compiler/varBlock.ts:27:29]
|
||||
26 │ declare var d2, d3 = 10, d4 = 10;
|
||||
27 │ export declare var dE = 10;
|
||||
· ──
|
||||
28 │ export declare var d2E, d3E = 10, d4E = 10;
|
||||
╰────
|
||||
|
||||
× TS(1039): Initializers are not allowed in ambient contexts.
|
||||
╭─[typescript/tests/cases/compiler/varBlock.ts:28:35]
|
||||
27 │ export declare var dE = 10;
|
||||
28 │ export declare var d2E, d3E = 10, d4E = 10;
|
||||
· ──
|
||||
29 │ }
|
||||
╰────
|
||||
|
||||
× TS(1039): Initializers are not allowed in ambient contexts.
|
||||
╭─[typescript/tests/cases/compiler/varBlock.ts:28:45]
|
||||
27 │ export declare var dE = 10;
|
||||
28 │ export declare var d2E, d3E = 10, d4E = 10;
|
||||
· ──
|
||||
29 │ }
|
||||
╰────
|
||||
|
||||
× TS(1039): Initializers are not allowed in ambient contexts.
|
||||
╭─[typescript/tests/cases/compiler/varBlock.ts:39:17]
|
||||
38 │ declare var c;
|
||||
39 │ declare var c = 10;
|
||||
· ──
|
||||
╰────
|
||||
|
||||
× Cannot assign to 'eval' in strict mode
|
||||
╭─[typescript/tests/cases/compiler/variableDeclarationInStrictMode1.ts:2:5]
|
||||
1 │ "use strict";
|
||||
|
|
@ -12727,6 +12861,14 @@ Expect to Parse: tasks/coverage/typescript/tests/cases/conformance/salsa/typeFro
|
|||
3 │ }
|
||||
╰────
|
||||
|
||||
× TS(1039): Initializers are not allowed in ambient contexts.
|
||||
╭─[typescript/tests/cases/conformance/ambient/ambientErrors.ts:2:17]
|
||||
1 │ // Ambient variable with an initializer
|
||||
2 │ declare var x = 4;
|
||||
· ─
|
||||
3 │
|
||||
╰────
|
||||
|
||||
× Expected a semicolon or an implicit semicolon after a statement, but found none
|
||||
╭─[typescript/tests/cases/conformance/ambient/ambientModuleDeclarationWithReservedIdentifierInDottedPath.ts:11:8]
|
||||
10 │
|
||||
|
|
@ -19968,6 +20110,14 @@ Expect to Parse: tasks/coverage/typescript/tests/cases/conformance/salsa/typeFro
|
|||
5 │ return this.doWhile((item, i) => filter(item, i) ? test(item, index++) : true);
|
||||
╰────
|
||||
|
||||
× TS(1039): Initializers are not allowed in ambient contexts.
|
||||
╭─[typescript/tests/cases/conformance/parser/ecmascript5/ErrorRecovery/parserModifierOnStatementInBlock2.ts:2:20]
|
||||
1 │ {
|
||||
2 │ declare var x = this;
|
||||
· ────
|
||||
3 │ }
|
||||
╰────
|
||||
|
||||
× Expected a semicolon or an implicit semicolon after a statement, but found none
|
||||
╭─[typescript/tests/cases/conformance/parser/ecmascript5/ErrorRecovery/parserPublicBreak1.ts:1:7]
|
||||
1 │ public break;
|
||||
|
|
|
|||
Loading…
Reference in a new issue