mirror of
https://github.com/danbulant/oxc
synced 2026-05-19 04:08:41 +00:00
fix(semantic): fix error message for duplicated label (#5071)
This commit is contained in:
parent
efbdced597
commit
6d87b0f1f2
4 changed files with 17 additions and 10 deletions
|
|
@ -638,13 +638,20 @@ pub fn check_continue_statement<'a>(
|
|||
}
|
||||
}
|
||||
|
||||
fn label_redeclaration(x0: &str, span1: Span, span2: Span) -> OxcDiagnostic {
|
||||
OxcDiagnostic::error(format!("Label `{x0}` has already been declared")).with_labels([
|
||||
span1.label(format!("`{x0}` has already been declared here")),
|
||||
span2.label("It can not be redeclared here"),
|
||||
])
|
||||
}
|
||||
|
||||
#[allow(clippy::option_if_let_else)]
|
||||
pub fn check_labeled_statement(ctx: &SemanticBuilder) {
|
||||
ctx.label_builder.labels.iter().for_each(|labels| {
|
||||
let mut defined = FxHashMap::default();
|
||||
for labeled in labels {
|
||||
if let Some(span) = defined.get(labeled.name) {
|
||||
ctx.error(redeclaration(labeled.name, *span, labeled.span));
|
||||
ctx.error(label_redeclaration(labeled.name, *span, labeled.span));
|
||||
} else {
|
||||
defined.insert(labeled.name, labeled.span);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1887,7 +1887,7 @@ Expect to Parse: tasks/coverage/babel/packages/babel-parser/test/fixtures/typesc
|
|||
╰────
|
||||
help: A `continue` statement can only be used within an enclosing `for`, `while` or `do while`
|
||||
|
||||
× Identifier `x` has already been declared
|
||||
× Label `x` has already been declared
|
||||
╭─[babel/packages/babel-parser/test/fixtures/core/uncategorised/465/input.js:1:1]
|
||||
1 │ x: while (true) { x: while (true) { } }
|
||||
· ┬ ┬
|
||||
|
|
@ -9131,7 +9131,7 @@ Expect to Parse: tasks/coverage/babel/packages/babel-parser/test/fixtures/typesc
|
|||
╰────
|
||||
help: A `continue` statement can only be used within an enclosing `for`, `while` or `do while`
|
||||
|
||||
× Identifier `x` has already been declared
|
||||
× Label `x` has already been declared
|
||||
╭─[babel/packages/babel-parser/test/fixtures/esprima/invalid-syntax/migrated_0182/input.js:1:1]
|
||||
1 │ x: while (true) { x: while (true) { } }
|
||||
· ┬ ┬
|
||||
|
|
@ -9540,7 +9540,7 @@ Expect to Parse: tasks/coverage/babel/packages/babel-parser/test/fixtures/typesc
|
|||
· ───────
|
||||
╰────
|
||||
|
||||
× Identifier `__proto__` has already been declared
|
||||
× Label `__proto__` has already been declared
|
||||
╭─[babel/packages/babel-parser/test/fixtures/esprima/invalid-syntax/migrated_0248/input.js:1:1]
|
||||
1 │ __proto__: __proto__: 42;
|
||||
· ────┬──── ────┬────
|
||||
|
|
|
|||
|
|
@ -21564,7 +21564,7 @@ Negative Passed: 4220/4220 (100.00%)
|
|||
· ╰── It cannot be redeclared here
|
||||
╰────
|
||||
|
||||
× Identifier `label` has already been declared
|
||||
× Label `label` has already been declared
|
||||
╭─[test262/test/language/module-code/early-dup-lables.js:16:1]
|
||||
15 │
|
||||
16 │ label: {
|
||||
|
|
@ -30302,7 +30302,7 @@ Negative Passed: 4220/4220 (100.00%)
|
|||
31 │ }
|
||||
╰────
|
||||
|
||||
× Identifier `x` has already been declared
|
||||
× Label `x` has already been declared
|
||||
╭─[test262/test/language/statements/class/static-init-invalid-label-dup.js:21:5]
|
||||
20 │ static {
|
||||
21 │ x: x: 0;
|
||||
|
|
|
|||
|
|
@ -7269,7 +7269,7 @@ Expect to Parse: tasks/coverage/typescript/tests/cases/conformance/salsa/typeFro
|
|||
20 │ return 0;
|
||||
╰────
|
||||
|
||||
× Identifier `target` has already been declared
|
||||
× Label `target` has already been declared
|
||||
╭─[typescript/tests/cases/compiler/duplicateLabel1.ts:1:1]
|
||||
1 │ target:
|
||||
· ───┬──
|
||||
|
|
@ -7280,7 +7280,7 @@ Expect to Parse: tasks/coverage/typescript/tests/cases/conformance/salsa/typeFro
|
|||
3 │ while (true) {
|
||||
╰────
|
||||
|
||||
× Identifier `target` has already been declared
|
||||
× Label `target` has already been declared
|
||||
╭─[typescript/tests/cases/compiler/duplicateLabel2.ts:1:1]
|
||||
1 │ target:
|
||||
· ───┬──
|
||||
|
|
@ -20674,7 +20674,7 @@ Expect to Parse: tasks/coverage/typescript/tests/cases/conformance/salsa/typeFro
|
|||
3 │ }
|
||||
╰────
|
||||
|
||||
× Identifier `target` has already been declared
|
||||
× Label `target` has already been declared
|
||||
╭─[typescript/tests/cases/conformance/parser/ecmascript5/Statements/LabeledStatements/parser_duplicateLabel1.ts:1:1]
|
||||
1 │ target:
|
||||
· ───┬──
|
||||
|
|
@ -20685,7 +20685,7 @@ Expect to Parse: tasks/coverage/typescript/tests/cases/conformance/salsa/typeFro
|
|||
3 │ while (true) {
|
||||
╰────
|
||||
|
||||
× Identifier `target` has already been declared
|
||||
× Label `target` has already been declared
|
||||
╭─[typescript/tests/cases/conformance/parser/ecmascript5/Statements/LabeledStatements/parser_duplicateLabel2.ts:1:1]
|
||||
1 │ target:
|
||||
· ───┬──
|
||||
|
|
|
|||
Loading…
Reference in a new issue