diff --git a/internal/parser/parser.go b/internal/parser/parser.go index 2a4328863f..4f2ea48ffb 100644 --- a/internal/parser/parser.go +++ b/internal/parser/parser.go @@ -358,7 +358,7 @@ func (p *Parser) parseSourceFileWorker() *ast.SourceFile { } collectExternalModuleReferences(result) if ast.IsInJSFile(node) { - result.SetJSDiagnostics(getJSSyntacticDiagnosticsForFile(result)) + result.SetJSDiagnostics(attachFileToDiagnostics(p.jsDiagnostics, result)) } return result } @@ -1407,6 +1407,7 @@ func (p *Parser) parseVariableStatement(pos int, hasJSDoc bool, modifiers *ast.M p.parseSemicolon() result := p.finishNode(p.factory.NewVariableStatement(modifiers, declarationList), pos) p.withJSDoc(result, hasJSDoc) + p.checkJSSyntax(result) return result } @@ -1484,6 +1485,7 @@ func (p *Parser) parseVariableDeclarationWorker(allowExclamation bool) *ast.Node } result := p.finishNode(p.factory.NewVariableDeclaration(name, exclamationToken, typeNode, initializer), pos) p.withJSDoc(result, hasJSDoc) + p.checkJSSyntax(result) return result } @@ -1588,6 +1590,7 @@ func (p *Parser) parseFunctionDeclaration(pos int, hasJSDoc bool, modifiers *ast p.contextFlags = saveContextFlags result := p.finishNode(p.factory.NewFunctionDeclaration(modifiers, asteriskToken, name, typeParameters, parameters, returnType, nil /*fullSignature*/, body), pos) p.withJSDoc(result, hasJSDoc) + p.checkJSSyntax(result) return result } @@ -1631,6 +1634,18 @@ func (p *Parser) parseClassDeclarationOrExpression(pos int, hasJSDoc bool, modif } p.finishNode(result, pos) p.withJSDoc(result, hasJSDoc) + if result.Flags&ast.NodeFlagsJavaScriptFile != 0 { + p.checkJSSyntax(result) + if heritageClauses != nil { + for _, clause := range heritageClauses.Nodes { + if clause.AsHeritageClause().Token == ast.KindExtendsKeyword { + for _, expr := range clause.AsHeritageClause().Types.Nodes { + p.checkJSSyntax(expr) + } + } + } + } + } return result } @@ -1675,7 +1690,7 @@ func (p *Parser) parseHeritageClause() *ast.Node { kind := p.token p.nextToken() types := p.parseDelimitedList(PCHeritageClauseElement, (*Parser).parseExpressionWithTypeArguments) - return p.finishNode(p.factory.NewHeritageClause(kind, types), pos) + return p.checkJSSyntax(p.finishNode(p.factory.NewHeritageClause(kind, types), pos)) } func (p *Parser) parseExpressionWithTypeArguments() *ast.Node { @@ -1714,7 +1729,7 @@ func (p *Parser) parseClassElement() *ast.Node { } } if p.isIndexSignature() { - return p.parseIndexSignatureDeclaration(pos, hasJSDoc, modifiers) + return p.checkJSSyntax(p.parseIndexSignatureDeclaration(pos, hasJSDoc, modifiers)) } // It is very important that we check this *after* checking indexers because // the [ token can start an index signature or a computed property name @@ -1770,6 +1785,7 @@ func (p *Parser) tryParseConstructorDeclaration(pos int, hasJSDoc bool, modifier body := p.parseFunctionBlockOrSemicolon(ParseFlagsNone, diagnostics.X_or_expected) result := p.finishNode(p.factory.NewConstructorDeclaration(modifiers, typeParameters, parameters, returnType, nil /*fullSignature*/, body), pos) p.withJSDoc(result, hasJSDoc) + p.checkJSSyntax(result) return result } p.rewind(state) @@ -1800,6 +1816,7 @@ func (p *Parser) parseMethodDeclaration(pos int, hasJSDoc bool, modifiers *ast.M body := p.parseFunctionBlockOrSemicolon(signatureFlags, diagnosticMessage) result := p.finishNode(p.factory.NewMethodDeclaration(modifiers, asteriskToken, name, questionToken, typeParameters, parameters, typeNode, nil /*fullSignature*/, body), pos) p.withJSDoc(result, hasJSDoc) + p.checkJSSyntax(result) return result } @@ -1817,6 +1834,7 @@ func (p *Parser) parsePropertyDeclaration(pos int, hasJSDoc bool, modifiers *ast p.parseSemicolonAfterPropertyName(name, typeNode, initializer) result := p.finishNode(p.factory.NewPropertyDeclaration(modifiers, name, postfixToken, typeNode, initializer), pos) p.withJSDoc(result, hasJSDoc) + p.checkJSSyntax(result) return result } @@ -1929,6 +1947,7 @@ func (p *Parser) parseInterfaceDeclaration(pos int, hasJSDoc bool, modifiers *as members := p.parseObjectTypeMembers() result := p.finishNode(p.factory.NewInterfaceDeclaration(modifiers, name, typeParameters, heritageClauses, members), pos) p.withJSDoc(result, hasJSDoc) + p.checkJSSyntax(result) return result } @@ -1949,6 +1968,7 @@ func (p *Parser) parseTypeAliasDeclaration(pos int, hasJSDoc bool, modifiers *as p.parseSemicolon() result := p.finishNode(p.factory.NewTypeAliasDeclaration(modifiers, name, typeParameters, typeNode), pos) p.withJSDoc(result, hasJSDoc) + p.checkJSSyntax(result) return result } @@ -1986,6 +2006,7 @@ func (p *Parser) parseEnumDeclaration(pos int, hasJSDoc bool, modifiers *ast.Mod } result := p.finishNode(p.factory.NewEnumDeclaration(modifiers, name, members), pos) p.withJSDoc(result, hasJSDoc) + p.checkJSSyntax(result) p.statementHasAwaitIdentifier = saveHasAwaitIdentifier return result } @@ -2062,6 +2083,7 @@ func (p *Parser) parseModuleOrNamespaceDeclaration(pos int, hasJSDoc bool, modif } result := p.finishNode(p.factory.NewModuleDeclaration(modifiers, keyword, name, body), pos) p.withJSDoc(result, hasJSDoc) + p.checkJSSyntax(result) p.statementHasAwaitIdentifier = saveHasAwaitIdentifier return result } @@ -2086,7 +2108,7 @@ func (p *Parser) parseImportDeclarationOrImportEqualsDeclaration(pos int, hasJSD } } if identifier != nil && !p.tokenAfterImportedIdentifierDefinitelyProducesImportDeclaration() { - importEquals := p.parseImportEqualsDeclaration(pos, hasJSDoc, modifiers, identifier, isTypeOnly) + importEquals := p.checkJSSyntax(p.parseImportEqualsDeclaration(pos, hasJSDoc, modifiers, identifier, isTypeOnly)) p.statementHasAwaitIdentifier = saveHasAwaitIdentifier // Import= declaration is always parsed in an Await context, no need to reparse return importEquals } @@ -2097,6 +2119,7 @@ func (p *Parser) parseImportDeclarationOrImportEqualsDeclaration(pos int, hasJSD p.parseSemicolon() result := p.finishNode(p.factory.NewImportDeclaration(modifiers, importClause, moduleSpecifier, attributes), pos) p.withJSDoc(result, hasJSDoc) + p.checkJSSyntax(result) return result } @@ -2226,7 +2249,8 @@ func (p *Parser) parseImportSpecifier() *ast.Node { identifierName = p.newIdentifier("") p.finishNode(identifierName, name.Pos()) } - return p.finishNode(p.factory.NewImportSpecifier(isTypeOnly, propertyName, identifierName), pos) + result := p.checkJSSyntax(p.finishNode(p.factory.NewImportSpecifier(isTypeOnly, propertyName, identifierName), pos)) + return result } func (p *Parser) parseImportOrExportSpecifier(kind ast.Kind) (isTypeOnly bool, propertyName *ast.Node, name *ast.Node) { @@ -2340,6 +2364,7 @@ func (p *Parser) parseExportAssignment(pos int, hasJSDoc bool, modifiers *ast.Mo p.statementHasAwaitIdentifier = saveHasAwaitIdentifier result := p.finishNode(p.factory.NewExportAssignment(modifiers, isExportEquals, nil /*typeNode*/, expression), pos) p.withJSDoc(result, hasJSDoc) + p.checkJSSyntax(result) return result } @@ -2389,6 +2414,7 @@ func (p *Parser) parseExportDeclaration(pos int, hasJSDoc bool, modifiers *ast.M p.statementHasAwaitIdentifier = saveHasAwaitIdentifier result := p.finishNode(p.factory.NewExportDeclaration(modifiers, isTypeOnly, exportClause, moduleSpecifier, attributes), pos) p.withJSDoc(result, hasJSDoc) + p.checkJSSyntax(result) return result } @@ -2413,6 +2439,7 @@ func (p *Parser) parseExportSpecifier() *ast.Node { isTypeOnly, propertyName, name := p.parseImportOrExportSpecifier(ast.KindExportSpecifier) result := p.finishNode(p.factory.NewExportSpecifier(isTypeOnly, propertyName, name), pos) p.withJSDoc(result, hasJSDoc) + p.checkJSSyntax(result) return result } @@ -3110,7 +3137,11 @@ func (p *Parser) parseParametersWorker(flags ParseFlags, allowAmbiguity bool) *a p.setContextFlags(ast.NodeFlagsYieldContext, flags&ParseFlagsYield != 0) p.setContextFlags(ast.NodeFlagsAwaitContext, flags&ParseFlagsAwait != 0) parameters := p.parseDelimitedList(PCParameters, func(p *Parser) *ast.Node { - return p.parseParameterEx(inAwaitContext, allowAmbiguity) + parameter := p.parseParameterEx(inAwaitContext, allowAmbiguity) + if parameter != nil && flags&ParseFlagsType == 0 { + p.checkJSSyntax(parameter) + } + return parameter }) p.contextFlags = saveContextFlags return parameters @@ -3244,6 +3275,9 @@ func (p *Parser) parseAccessorDeclaration(pos int, hasJSDoc bool, modifiers *ast result = p.factory.NewSetAccessorDeclaration(modifiers, name, typeParameters, parameters, returnType, nil /*fullSignature*/, body) } p.withJSDoc(p.finishNode(result, pos), hasJSDoc) + if flags&ParseFlagsType == 0 { + p.checkJSSyntax(result) + } return result } @@ -4235,6 +4269,7 @@ func (p *Parser) parseParenthesizedArrowFunctionExpression(allowAmbiguity bool, } result := p.finishNode(p.factory.NewArrowFunction(modifiers, typeParameters, parameters, returnType, nil /*fullSignature*/, equalsGreaterThanToken, body), pos) p.withJSDoc(result, hasJSDoc) + p.checkJSSyntax(result) return result } @@ -4442,11 +4477,11 @@ func (p *Parser) parseBinaryExpressionRest(precedence ast.OperatorPrecedence, le } func (p *Parser) makeSatisfiesExpression(expression *ast.Expression, typeNode *ast.TypeNode) *ast.Node { - return p.finishNode(p.factory.NewSatisfiesExpression(expression, typeNode), expression.Pos()) + return p.checkJSSyntax(p.finishNode(p.factory.NewSatisfiesExpression(expression, typeNode), expression.Pos())) } func (p *Parser) makeAsExpression(left *ast.Expression, right *ast.TypeNode) *ast.Node { - return p.finishNode(p.factory.NewAsExpression(left, right), left.Pos()) + return p.checkJSSyntax(p.finishNode(p.factory.NewAsExpression(left, right), left.Pos())) } func (p *Parser) makeBinaryExpression(left *ast.Expression, operatorToken *ast.Node, right *ast.Expression, pos int) *ast.Node { @@ -5148,7 +5183,7 @@ func (p *Parser) parseMemberExpressionRest(pos int, expression *ast.Expression, if questionDotToken == nil { if p.token == ast.KindExclamationToken && !p.hasPrecedingLineBreak() { p.nextToken() - expression = p.finishNode(p.factory.NewNonNullExpression(expression, ast.NodeFlagsNone), pos) + expression = p.checkJSSyntax(p.finishNode(p.factory.NewNonNullExpression(expression, ast.NodeFlagsNone), pos)) continue } typeArguments := p.tryParseTypeArgumentsInExpression() @@ -5252,7 +5287,7 @@ func (p *Parser) parseCallExpressionRest(pos int, expression *ast.Expression) *a inner := expression argumentList := p.parseArgumentList() isOptionalChain := questionDotToken != nil || p.tryReparseOptionalChain(expression) - expression = p.finishNode(p.factory.NewCallExpression(expression, questionDotToken, typeArguments, argumentList, core.IfElse(isOptionalChain, ast.NodeFlagsOptionalChain, ast.NodeFlagsNone)), pos) + expression = p.checkJSSyntax(p.finishNode(p.factory.NewCallExpression(expression, questionDotToken, typeArguments, argumentList, core.IfElse(isOptionalChain, ast.NodeFlagsOptionalChain, ast.NodeFlagsNone)), pos)) p.unparseExpressionWithTypeArguments(inner, typeArguments, expression) continue } @@ -5304,7 +5339,7 @@ func (p *Parser) parseTaggedTemplateRest(pos int, tag *ast.Expression, questionD template = p.parseTemplateExpression(true /*isTaggedTemplate*/) } isOptionalChain := questionDotToken != nil || tag.Flags&ast.NodeFlagsOptionalChain != 0 - return p.finishNode(p.factory.NewTaggedTemplateExpression(tag, questionDotToken, typeArguments, template, core.IfElse(isOptionalChain, ast.NodeFlagsOptionalChain, ast.NodeFlagsNone)), pos) + return p.checkJSSyntax(p.finishNode(p.factory.NewTaggedTemplateExpression(tag, questionDotToken, typeArguments, template, core.IfElse(isOptionalChain, ast.NodeFlagsOptionalChain, ast.NodeFlagsNone)), pos)) } func (p *Parser) parseTemplateExpression(isTaggedTemplate bool) *ast.Expression { @@ -5495,6 +5530,7 @@ func (p *Parser) parseFunctionExpression() *ast.Expression { result := p.factory.NewFunctionExpression(modifiers, asteriskToken, name, typeParameters, parameters, returnType, nil /*fullSignature*/, body) p.finishNode(result, pos) p.withJSDoc(result, hasJSDoc) + p.checkJSSyntax(result) return result } @@ -5550,7 +5586,7 @@ func (p *Parser) parseNewExpressionOrNewDotTarget() *ast.Node { if p.token == ast.KindOpenParenToken { argumentList = p.parseArgumentList() } - result := p.finishNode(p.factory.NewNewExpression(expression, typeArguments, argumentList), pos) + result := p.checkJSSyntax(p.finishNode(p.factory.NewNewExpression(expression, typeArguments, argumentList), pos)) p.unparseExpressionWithTypeArguments(expression, typeArguments, result) return result } @@ -6437,111 +6473,93 @@ func parseResolutionMode(mode string, pos int, end int /*reportDiagnostic: Pragm // return undefined; } -func getJSSyntacticDiagnosticsForFile(sourceFile *ast.SourceFile) []*ast.Diagnostic { - var diags []*ast.Diagnostic - - errorAtRange := func(loc core.TextRange, message *diagnostics.Message, args ...any) { - diags = append(diags, ast.NewDiagnostic(sourceFile, core.NewTextRange(scanner.SkipTrivia(sourceFile.Text(), loc.Pos()), loc.End()), message, args...)) - } +func (p *Parser) jsErrorAtRange(loc core.TextRange, message *diagnostics.Message, args ...any) { + p.jsDiagnostics = append(p.jsDiagnostics, ast.NewDiagnostic(nil, core.NewTextRange(scanner.SkipTrivia(p.sourceText, loc.Pos()), loc.End()), message, args...)) +} - errorAtNode := func(node *ast.Node, message *diagnostics.Message, args ...any) { - diags = append(diags, ast.NewDiagnostic(sourceFile, scanner.GetErrorRangeForNode(sourceFile, node), message, args...)) +func (p *Parser) checkJSSyntax(node *ast.Node) *ast.Node { + if node.Flags&ast.NodeFlagsJavaScriptFile == 0 || node.Flags&(ast.NodeFlagsJSDoc|ast.NodeFlagsReparsed) != 0 { + return node } - - var visit func(*ast.Node) bool - visit = func(node *ast.Node) bool { - if node.Flags&ast.NodeFlagsReparsed != 0 || ast.IsTypeNode(node) && !ast.IsExpressionWithTypeArguments(node) { - return false + switch node.Kind { + case ast.KindParameter, ast.KindPropertyDeclaration, ast.KindMethodDeclaration: + if token := node.PostfixToken(); token != nil && token.Flags&ast.NodeFlagsReparsed == 0 && ast.IsQuestionToken(token) { + p.jsErrorAtRange(token.Loc, diagnostics.The_0_modifier_can_only_be_used_in_TypeScript_files, "?") } - switch node.Kind { - case ast.KindParameter, ast.KindPropertyDeclaration, ast.KindMethodDeclaration: - if token := node.PostfixToken(); token != nil && token.Flags&ast.NodeFlagsReparsed == 0 && ast.IsQuestionToken(token) { - errorAtNode(node.PostfixToken(), diagnostics.The_0_modifier_can_only_be_used_in_TypeScript_files, "?") - } - fallthrough - case ast.KindMethodSignature, ast.KindConstructor, ast.KindGetAccessor, ast.KindSetAccessor, ast.KindFunctionExpression, - ast.KindFunctionDeclaration, ast.KindArrowFunction, ast.KindVariableDeclaration: - if t := node.Type(); t != nil && t.Flags&ast.NodeFlagsReparsed == 0 { - errorAtNode(node.Type(), diagnostics.Type_annotations_can_only_be_used_in_TypeScript_files) - } else if ast.IsFunctionLike(node) && node.Body() == nil { - errorAtNode(node, diagnostics.Signature_declarations_can_only_be_used_in_TypeScript_files) - } - case ast.KindImportClause: - if node.IsTypeOnly() { - errorAtNode(node.Parent, diagnostics.X_0_declarations_can_only_be_used_in_TypeScript_files, "import type") - } - case ast.KindExportDeclaration: - if node.IsTypeOnly() { - errorAtNode(node, diagnostics.X_0_declarations_can_only_be_used_in_TypeScript_files, "export type") - } - case ast.KindImportSpecifier: - if node.IsTypeOnly() { - errorAtNode(node, diagnostics.X_0_declarations_can_only_be_used_in_TypeScript_files, "import...type") - } - case ast.KindExportSpecifier: - if node.IsTypeOnly() { - errorAtNode(node, diagnostics.X_0_declarations_can_only_be_used_in_TypeScript_files, "export...type") - } - case ast.KindImportEqualsDeclaration: - errorAtNode(node, diagnostics.X_import_can_only_be_used_in_TypeScript_files) - case ast.KindExportAssignment: - if node.AsExportAssignment().IsExportEquals { - errorAtNode(node, diagnostics.X_export_can_only_be_used_in_TypeScript_files) - } - case ast.KindHeritageClause: - if node.AsHeritageClause().Token == ast.KindImplementsKeyword { - errorAtNode(node, diagnostics.X_implements_clauses_can_only_be_used_in_TypeScript_files) - } - case ast.KindInterfaceDeclaration: - errorAtNode(node, diagnostics.X_0_declarations_can_only_be_used_in_TypeScript_files, "interface") - return false - case ast.KindModuleDeclaration: - errorAtNode(node, diagnostics.X_0_declarations_can_only_be_used_in_TypeScript_files, scanner.TokenToString(node.AsModuleDeclaration().Keyword)) - return false - case ast.KindTypeAliasDeclaration: - errorAtNode(node, diagnostics.Type_aliases_can_only_be_used_in_TypeScript_files) - return false - case ast.KindEnumDeclaration: - errorAtNode(node, diagnostics.X_0_declarations_can_only_be_used_in_TypeScript_files, "enum") - return false - case ast.KindNonNullExpression: - errorAtNode(node, diagnostics.Non_null_assertions_can_only_be_used_in_TypeScript_files) - return false - case ast.KindAsExpression: - errorAtNode(node.Type(), diagnostics.Type_assertion_expressions_can_only_be_used_in_TypeScript_files) - return false - case ast.KindSatisfiesExpression: - errorAtNode(node.Type(), diagnostics.Type_satisfaction_expressions_can_only_be_used_in_TypeScript_files) - return false + fallthrough + case ast.KindMethodSignature, ast.KindConstructor, ast.KindGetAccessor, ast.KindSetAccessor, ast.KindFunctionExpression, + ast.KindFunctionDeclaration, ast.KindArrowFunction, ast.KindVariableDeclaration, ast.KindIndexSignature: + if ast.IsFunctionLike(node) && node.Body() == nil { + p.jsErrorAtRange(node.Loc, diagnostics.Signature_declarations_can_only_be_used_in_TypeScript_files) + } else if t := node.Type(); t != nil && t.Flags&ast.NodeFlagsReparsed == 0 { + p.jsErrorAtRange(t.Loc, diagnostics.Type_annotations_can_only_be_used_in_TypeScript_files) + } + case ast.KindImportDeclaration: + if clause := node.AsImportDeclaration().ImportClause; clause != nil && clause.IsTypeOnly() { + p.jsErrorAtRange(node.Loc, diagnostics.X_0_declarations_can_only_be_used_in_TypeScript_files, "import type") + } + case ast.KindExportDeclaration: + if node.IsTypeOnly() { + p.jsErrorAtRange(node.Loc, diagnostics.X_0_declarations_can_only_be_used_in_TypeScript_files, "export type") + } + case ast.KindImportSpecifier: + if node.IsTypeOnly() { + p.jsErrorAtRange(node.Loc, diagnostics.X_0_declarations_can_only_be_used_in_TypeScript_files, "import...type") + } + case ast.KindExportSpecifier: + if node.IsTypeOnly() { + p.jsErrorAtRange(node.Loc, diagnostics.X_0_declarations_can_only_be_used_in_TypeScript_files, "export...type") + } + case ast.KindImportEqualsDeclaration: + p.jsErrorAtRange(node.Loc, diagnostics.X_import_can_only_be_used_in_TypeScript_files) + case ast.KindExportAssignment: + if node.AsExportAssignment().IsExportEquals { + p.jsErrorAtRange(node.Loc, diagnostics.X_export_can_only_be_used_in_TypeScript_files) + } + case ast.KindHeritageClause: + if node.AsHeritageClause().Token == ast.KindImplementsKeyword { + p.jsErrorAtRange(node.Loc, diagnostics.X_implements_clauses_can_only_be_used_in_TypeScript_files) + } + case ast.KindInterfaceDeclaration: + p.jsErrorAtRange(node.Name().Loc, diagnostics.X_0_declarations_can_only_be_used_in_TypeScript_files, "interface") + case ast.KindModuleDeclaration: + p.jsErrorAtRange(node.Name().Loc, diagnostics.X_0_declarations_can_only_be_used_in_TypeScript_files, scanner.TokenToString(node.AsModuleDeclaration().Keyword)) + case ast.KindTypeAliasDeclaration: + p.jsErrorAtRange(node.Name().Loc, diagnostics.Type_aliases_can_only_be_used_in_TypeScript_files) + case ast.KindEnumDeclaration: + p.jsErrorAtRange(node.Name().Loc, diagnostics.X_0_declarations_can_only_be_used_in_TypeScript_files, "enum") + case ast.KindNonNullExpression: + p.jsErrorAtRange(node.Loc, diagnostics.Non_null_assertions_can_only_be_used_in_TypeScript_files) + case ast.KindAsExpression: + p.jsErrorAtRange(node.Type().Loc, diagnostics.Type_assertion_expressions_can_only_be_used_in_TypeScript_files) + case ast.KindSatisfiesExpression: + p.jsErrorAtRange(node.Type().Loc, diagnostics.Type_satisfaction_expressions_can_only_be_used_in_TypeScript_files) + } + // Check absence of type parameters, type arguments and non-JavaScript modifiers + switch node.Kind { + case ast.KindClassDeclaration, ast.KindClassExpression, ast.KindMethodDeclaration, ast.KindConstructor, ast.KindGetAccessor, + ast.KindSetAccessor, ast.KindFunctionExpression, ast.KindFunctionDeclaration, ast.KindArrowFunction: + if list := node.TypeParameterList(); list != nil && core.Some(list.Nodes, func(n *ast.Node) bool { return n.Flags&ast.NodeFlagsReparsed == 0 }) { + p.jsErrorAtRange(list.Loc, diagnostics.Type_parameter_declarations_can_only_be_used_in_TypeScript_files) } - // Check absence of type parameters, type arguments and non-JavaScript modifiers - switch node.Kind { - case ast.KindClassDeclaration, ast.KindClassExpression, ast.KindMethodDeclaration, ast.KindConstructor, ast.KindGetAccessor, - ast.KindSetAccessor, ast.KindFunctionExpression, ast.KindFunctionDeclaration, ast.KindArrowFunction: - if list := node.TypeParameterList(); list != nil && core.Some(list.Nodes, func(n *ast.Node) bool { return n.Flags&ast.NodeFlagsReparsed == 0 }) { - errorAtRange(list.Loc, diagnostics.Type_parameter_declarations_can_only_be_used_in_TypeScript_files) - } - fallthrough - case ast.KindVariableStatement, ast.KindPropertyDeclaration: - if modifiers := node.Modifiers(); modifiers != nil { - for _, modifier := range modifiers.Nodes { - if modifier.Flags&ast.NodeFlagsReparsed == 0 && modifier.Kind != ast.KindDecorator && ast.ModifierToFlag(modifier.Kind)&ast.ModifierFlagsJavaScript == 0 { - errorAtNode(modifier, diagnostics.The_0_modifier_can_only_be_used_in_TypeScript_files, scanner.TokenToString(modifier.Kind)) - } + fallthrough + case ast.KindVariableStatement, ast.KindPropertyDeclaration: + if modifiers := node.Modifiers(); modifiers != nil { + for _, modifier := range modifiers.Nodes { + if modifier.Flags&ast.NodeFlagsReparsed == 0 && modifier.Kind != ast.KindDecorator && ast.ModifierToFlag(modifier.Kind)&ast.ModifierFlagsJavaScript == 0 { + p.jsErrorAtRange(modifier.Loc, diagnostics.The_0_modifier_can_only_be_used_in_TypeScript_files, scanner.TokenToString(modifier.Kind)) } } - case ast.KindParameter: - if core.Some(node.ModifierNodes(), ast.IsModifier) { - errorAtRange(node.Modifiers().Loc, diagnostics.Parameter_modifiers_can_only_be_used_in_TypeScript_files) - } - case ast.KindCallExpression, ast.KindNewExpression, ast.KindExpressionWithTypeArguments, ast.KindJsxSelfClosingElement, - ast.KindJsxOpeningElement, ast.KindTaggedTemplateExpression: - if list := node.TypeArgumentList(); list != nil && core.Some(list.Nodes, func(n *ast.Node) bool { return n.Flags&ast.NodeFlagsReparsed == 0 }) { - errorAtRange(list.Loc, diagnostics.Type_arguments_can_only_be_used_in_TypeScript_files) - } } - return node.ForEachChild(visit) + case ast.KindParameter: + if core.Some(node.ModifierNodes(), ast.IsModifier) { + p.jsErrorAtRange(node.Modifiers().Loc, diagnostics.Parameter_modifiers_can_only_be_used_in_TypeScript_files) + } + case ast.KindCallExpression, ast.KindNewExpression, ast.KindExpressionWithTypeArguments, ast.KindJsxSelfClosingElement, + ast.KindJsxOpeningElement, ast.KindTaggedTemplateExpression: + if list := node.TypeArgumentList(); list != nil && core.Some(list.Nodes, func(n *ast.Node) bool { return n.Flags&ast.NodeFlagsReparsed == 0 }) { + p.jsErrorAtRange(list.Loc, diagnostics.Type_arguments_can_only_be_used_in_TypeScript_files) + } } - sourceFile.ForEachChild(visit) - return diags + return node } diff --git a/testdata/baselines/reference/submodule/compiler/jsFileCompilationConstructorOverloadSyntax.errors.txt b/testdata/baselines/reference/submodule/compiler/jsFileCompilationConstructorOverloadSyntax.errors.txt index c2eefe3d28..0ff11a2b87 100644 --- a/testdata/baselines/reference/submodule/compiler/jsFileCompilationConstructorOverloadSyntax.errors.txt +++ b/testdata/baselines/reference/submodule/compiler/jsFileCompilationConstructorOverloadSyntax.errors.txt @@ -4,7 +4,7 @@ a.js(2,3): error TS8017: Signature declarations can only be used in TypeScript f ==== a.js (1 errors) ==== class A { constructor(); - ~~~~~~~~~~~ + ~~~~~~~~~~~~~~ !!! error TS8017: Signature declarations can only be used in TypeScript files. } \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/compiler/jsFileCompilationFunctionOverloadSyntax.errors.txt b/testdata/baselines/reference/submodule/compiler/jsFileCompilationFunctionOverloadSyntax.errors.txt index 1c10528f03..5af6399a20 100644 --- a/testdata/baselines/reference/submodule/compiler/jsFileCompilationFunctionOverloadSyntax.errors.txt +++ b/testdata/baselines/reference/submodule/compiler/jsFileCompilationFunctionOverloadSyntax.errors.txt @@ -1,8 +1,8 @@ -a.js(1,10): error TS8017: Signature declarations can only be used in TypeScript files. +a.js(1,1): error TS8017: Signature declarations can only be used in TypeScript files. ==== a.js (1 errors) ==== function foo(); - ~~~ + ~~~~~~~~~~~~~~~ !!! error TS8017: Signature declarations can only be used in TypeScript files. \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/compiler/jsFileCompilationMethodOverloadSyntax.errors.txt b/testdata/baselines/reference/submodule/compiler/jsFileCompilationMethodOverloadSyntax.errors.txt index 470da0781c..1d54c0e41e 100644 --- a/testdata/baselines/reference/submodule/compiler/jsFileCompilationMethodOverloadSyntax.errors.txt +++ b/testdata/baselines/reference/submodule/compiler/jsFileCompilationMethodOverloadSyntax.errors.txt @@ -4,7 +4,7 @@ a.js(2,3): error TS8017: Signature declarations can only be used in TypeScript f ==== a.js (1 errors) ==== class A { foo(); - ~~~ + ~~~~~~ !!! error TS8017: Signature declarations can only be used in TypeScript files. } \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/conformance/jsDeclarationsClassesErr.errors.txt b/testdata/baselines/reference/submodule/conformance/jsDeclarationsClassesErr.errors.txt index 548135e903..835d95bb5e 100644 --- a/testdata/baselines/reference/submodule/conformance/jsDeclarationsClassesErr.errors.txt +++ b/testdata/baselines/reference/submodule/conformance/jsDeclarationsClassesErr.errors.txt @@ -3,22 +3,22 @@ index.js(5,12): error TS8010: Type annotations can only be used in TypeScript fi index.js(8,16): error TS8004: Type parameter declarations can only be used in TypeScript files. index.js(8,29): error TS8011: Type arguments can only be used in TypeScript files. index.js(9,12): error TS8010: Type annotations can only be used in TypeScript files. -index.js(13,11): error TS8010: Type annotations can only be used in TypeScript files. -index.js(19,11): error TS8010: Type annotations can only be used in TypeScript files. -index.js(23,11): error TS8010: Type annotations can only be used in TypeScript files. -index.js(27,11): error TS8010: Type annotations can only be used in TypeScript files. -index.js(28,11): error TS8010: Type annotations can only be used in TypeScript files. -index.js(32,11): error TS8010: Type annotations can only be used in TypeScript files. -index.js(39,11): error TS8010: Type annotations can only be used in TypeScript files. -index.js(43,11): error TS8010: Type annotations can only be used in TypeScript files. -index.js(47,11): error TS8010: Type annotations can only be used in TypeScript files. -index.js(48,11): error TS8010: Type annotations can only be used in TypeScript files. -index.js(52,11): error TS8010: Type annotations can only be used in TypeScript files. -index.js(53,11): error TS8010: Type annotations can only be used in TypeScript files. -index.js(59,11): error TS8010: Type annotations can only be used in TypeScript files. -index.js(63,11): error TS8010: Type annotations can only be used in TypeScript files. -index.js(67,11): error TS8010: Type annotations can only be used in TypeScript files. -index.js(68,11): error TS8010: Type annotations can only be used in TypeScript files. +index.js(13,5): error TS8017: Signature declarations can only be used in TypeScript files. +index.js(19,5): error TS8017: Signature declarations can only be used in TypeScript files. +index.js(23,5): error TS8017: Signature declarations can only be used in TypeScript files. +index.js(27,5): error TS8017: Signature declarations can only be used in TypeScript files. +index.js(28,5): error TS8017: Signature declarations can only be used in TypeScript files. +index.js(32,5): error TS8017: Signature declarations can only be used in TypeScript files. +index.js(39,5): error TS8017: Signature declarations can only be used in TypeScript files. +index.js(43,5): error TS8017: Signature declarations can only be used in TypeScript files. +index.js(47,5): error TS8017: Signature declarations can only be used in TypeScript files. +index.js(48,5): error TS8017: Signature declarations can only be used in TypeScript files. +index.js(52,5): error TS8017: Signature declarations can only be used in TypeScript files. +index.js(53,5): error TS8017: Signature declarations can only be used in TypeScript files. +index.js(59,5): error TS8017: Signature declarations can only be used in TypeScript files. +index.js(63,5): error TS8017: Signature declarations can only be used in TypeScript files. +index.js(67,5): error TS8017: Signature declarations can only be used in TypeScript files. +index.js(68,5): error TS8017: Signature declarations can only be used in TypeScript files. ==== index.js (21 errors) ==== @@ -45,37 +45,37 @@ index.js(68,11): error TS8010: Type annotations can only be used in TypeScript f export class O { [idx: string]: string; - ~~~~~~ -!!! error TS8010: Type annotations can only be used in TypeScript files. + ~~~~~~~~~~~~~~~~~~~~~~ +!!! error TS8017: Signature declarations can only be used in TypeScript files. } export class P extends O {} export class Q extends O { [idx: string]: "ok"; - ~~~~~~ -!!! error TS8010: Type annotations can only be used in TypeScript files. + ~~~~~~~~~~~~~~~~~~~~ +!!! error TS8017: Signature declarations can only be used in TypeScript files. } export class R extends O { [idx: number]: "ok"; - ~~~~~~ -!!! error TS8010: Type annotations can only be used in TypeScript files. + ~~~~~~~~~~~~~~~~~~~~ +!!! error TS8017: Signature declarations can only be used in TypeScript files. } export class S extends O { [idx: string]: "ok"; - ~~~~~~ -!!! error TS8010: Type annotations can only be used in TypeScript files. + ~~~~~~~~~~~~~~~~~~~~ +!!! error TS8017: Signature declarations can only be used in TypeScript files. [idx: number]: never; - ~~~~~~ -!!! error TS8010: Type annotations can only be used in TypeScript files. + ~~~~~~~~~~~~~~~~~~~~~ +!!! error TS8017: Signature declarations can only be used in TypeScript files. } export class T { [idx: number]: string; - ~~~~~~ -!!! error TS8010: Type annotations can only be used in TypeScript files. + ~~~~~~~~~~~~~~~~~~~~~~ +!!! error TS8017: Signature declarations can only be used in TypeScript files. } export class U extends T {} @@ -83,54 +83,54 @@ index.js(68,11): error TS8010: Type annotations can only be used in TypeScript f export class V extends T { [idx: string]: string; - ~~~~~~ -!!! error TS8010: Type annotations can only be used in TypeScript files. + ~~~~~~~~~~~~~~~~~~~~~~ +!!! error TS8017: Signature declarations can only be used in TypeScript files. } export class W extends T { [idx: number]: "ok"; - ~~~~~~ -!!! error TS8010: Type annotations can only be used in TypeScript files. + ~~~~~~~~~~~~~~~~~~~~ +!!! error TS8017: Signature declarations can only be used in TypeScript files. } export class X extends T { [idx: string]: string; - ~~~~~~ -!!! error TS8010: Type annotations can only be used in TypeScript files. + ~~~~~~~~~~~~~~~~~~~~~~ +!!! error TS8017: Signature declarations can only be used in TypeScript files. [idx: number]: "ok"; - ~~~~~~ -!!! error TS8010: Type annotations can only be used in TypeScript files. + ~~~~~~~~~~~~~~~~~~~~ +!!! error TS8017: Signature declarations can only be used in TypeScript files. } export class Y { [idx: string]: {x: number}; - ~~~~~~ -!!! error TS8010: Type annotations can only be used in TypeScript files. + ~~~~~~~~~~~~~~~~~~~~~~~~~~~ +!!! error TS8017: Signature declarations can only be used in TypeScript files. [idx: number]: {x: number, y: number}; - ~~~~~~ -!!! error TS8010: Type annotations can only be used in TypeScript files. + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +!!! error TS8017: Signature declarations can only be used in TypeScript files. } export class Z extends Y {} export class AA extends Y { [idx: string]: {x: number, y: number}; - ~~~~~~ -!!! error TS8010: Type annotations can only be used in TypeScript files. + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +!!! error TS8017: Signature declarations can only be used in TypeScript files. } export class BB extends Y { [idx: number]: {x: 0, y: 0}; - ~~~~~~ -!!! error TS8010: Type annotations can only be used in TypeScript files. + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +!!! error TS8017: Signature declarations can only be used in TypeScript files. } export class CC extends Y { [idx: string]: {x: number, y: number}; - ~~~~~~ -!!! error TS8010: Type annotations can only be used in TypeScript files. + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +!!! error TS8017: Signature declarations can only be used in TypeScript files. [idx: number]: {x: 0, y: 0}; - ~~~~~~ -!!! error TS8010: Type annotations can only be used in TypeScript files. + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +!!! error TS8017: Signature declarations can only be used in TypeScript files. } \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/conformance/jsDeclarationsTypeReferences4.errors.txt b/testdata/baselines/reference/submodule/conformance/jsDeclarationsTypeReferences4.errors.txt index 146844daa3..e04e27110e 100644 --- a/testdata/baselines/reference/submodule/conformance/jsDeclarationsTypeReferences4.errors.txt +++ b/testdata/baselines/reference/submodule/conformance/jsDeclarationsTypeReferences4.errors.txt @@ -1,7 +1,8 @@ index.js(4,18): error TS8006: 'namespace' declarations can only be used in TypeScript files. +index.js(6,22): error TS8006: 'namespace' declarations can only be used in TypeScript files. -==== index.js (1 errors) ==== +==== index.js (2 errors) ==== /// export const Something = 2; // to show conflict that can occur // @ts-ignore @@ -10,6 +11,8 @@ index.js(4,18): error TS8006: 'namespace' declarations can only be used in TypeS !!! error TS8006: 'namespace' declarations can only be used in TypeScript files. // @ts-ignore export namespace B { + ~ +!!! error TS8006: 'namespace' declarations can only be used in TypeScript files. const Something = require("fs").Something; const thing = new Something(); // @ts-ignore diff --git a/testdata/baselines/reference/submodule/conformance/plainJSGrammarErrors.errors.txt b/testdata/baselines/reference/submodule/conformance/plainJSGrammarErrors.errors.txt index b59b8e7543..40731faa29 100644 --- a/testdata/baselines/reference/submodule/conformance/plainJSGrammarErrors.errors.txt +++ b/testdata/baselines/reference/submodule/conformance/plainJSGrammarErrors.errors.txt @@ -13,7 +13,7 @@ plainJSGrammarErrors.js(26,11): error TS1030: 'async' modifier already seen. plainJSGrammarErrors.js(28,11): error TS1029: 'static' modifier must precede 'async' modifier. plainJSGrammarErrors.js(29,5): error TS1031: 'export' modifier cannot appear on class elements of this kind. plainJSGrammarErrors.js(30,5): error TS1031: 'export' modifier cannot appear on class elements of this kind. -plainJSGrammarErrors.js(34,9): error TS8017: Signature declarations can only be used in TypeScript files. +plainJSGrammarErrors.js(34,5): error TS8017: Signature declarations can only be used in TypeScript files. plainJSGrammarErrors.js(34,22): error TS1005: '{' expected. plainJSGrammarErrors.js(35,9): error TS1054: A 'get' accessor cannot have parameters. plainJSGrammarErrors.js(36,9): error TS1049: A 'set' accessor must have exactly one parameter. @@ -166,7 +166,7 @@ plainJSGrammarErrors.js(205,36): error TS1325: Argument of dynamic import cannot // accessor mistakes get incorporeal(); - ~~~~~~~~~~~ + ~~~~~~~~~~~~~~~~~~ !!! error TS8017: Signature declarations can only be used in TypeScript files. ~ !!! error TS1005: '{' expected. diff --git a/testdata/baselines/reference/submoduleAccepted/compiler/jsFileCompilationConstructorOverloadSyntax.errors.txt.diff b/testdata/baselines/reference/submoduleAccepted/compiler/jsFileCompilationConstructorOverloadSyntax.errors.txt.diff new file mode 100644 index 0000000000..794ce9898b --- /dev/null +++ b/testdata/baselines/reference/submoduleAccepted/compiler/jsFileCompilationConstructorOverloadSyntax.errors.txt.diff @@ -0,0 +1,11 @@ +--- old.jsFileCompilationConstructorOverloadSyntax.errors.txt ++++ new.jsFileCompilationConstructorOverloadSyntax.errors.txt +@@= skipped -3, +3 lines =@@ + ==== a.js (1 errors) ==== + class A { + constructor(); +- ~~~~~~~~~~~ ++ ~~~~~~~~~~~~~~ + !!! error TS8017: Signature declarations can only be used in TypeScript files. + } + \ No newline at end of file diff --git a/testdata/baselines/reference/submoduleAccepted/compiler/jsFileCompilationFunctionOverloadSyntax.errors.txt.diff b/testdata/baselines/reference/submoduleAccepted/compiler/jsFileCompilationFunctionOverloadSyntax.errors.txt.diff new file mode 100644 index 0000000000..cdef364579 --- /dev/null +++ b/testdata/baselines/reference/submoduleAccepted/compiler/jsFileCompilationFunctionOverloadSyntax.errors.txt.diff @@ -0,0 +1,13 @@ +--- old.jsFileCompilationFunctionOverloadSyntax.errors.txt ++++ new.jsFileCompilationFunctionOverloadSyntax.errors.txt +@@= skipped -0, +0 lines =@@ +-a.js(1,10): error TS8017: Signature declarations can only be used in TypeScript files. ++a.js(1,1): error TS8017: Signature declarations can only be used in TypeScript files. + + + ==== a.js (1 errors) ==== + function foo(); +- ~~~ ++ ~~~~~~~~~~~~~~~ + !!! error TS8017: Signature declarations can only be used in TypeScript files. + \ No newline at end of file diff --git a/testdata/baselines/reference/submoduleAccepted/compiler/jsFileCompilationMethodOverloadSyntax.errors.txt.diff b/testdata/baselines/reference/submoduleAccepted/compiler/jsFileCompilationMethodOverloadSyntax.errors.txt.diff new file mode 100644 index 0000000000..e8fe861040 --- /dev/null +++ b/testdata/baselines/reference/submoduleAccepted/compiler/jsFileCompilationMethodOverloadSyntax.errors.txt.diff @@ -0,0 +1,11 @@ +--- old.jsFileCompilationMethodOverloadSyntax.errors.txt ++++ new.jsFileCompilationMethodOverloadSyntax.errors.txt +@@= skipped -3, +3 lines =@@ + ==== a.js (1 errors) ==== + class A { + foo(); +- ~~~ ++ ~~~~~~ + !!! error TS8017: Signature declarations can only be used in TypeScript files. + } + \ No newline at end of file diff --git a/testdata/baselines/reference/submoduleAccepted/conformance/jsDeclarationsClassesErr.errors.txt.diff b/testdata/baselines/reference/submoduleAccepted/conformance/jsDeclarationsClassesErr.errors.txt.diff new file mode 100644 index 0000000000..eade1a0230 --- /dev/null +++ b/testdata/baselines/reference/submoduleAccepted/conformance/jsDeclarationsClassesErr.errors.txt.diff @@ -0,0 +1,166 @@ +--- old.jsDeclarationsClassesErr.errors.txt ++++ new.jsDeclarationsClassesErr.errors.txt +@@= skipped -2, +2 lines =@@ + index.js(8,16): error TS8004: Type parameter declarations can only be used in TypeScript files. + index.js(8,29): error TS8011: Type arguments can only be used in TypeScript files. + index.js(9,12): error TS8010: Type annotations can only be used in TypeScript files. +-index.js(13,11): error TS8010: Type annotations can only be used in TypeScript files. +-index.js(19,11): error TS8010: Type annotations can only be used in TypeScript files. +-index.js(23,11): error TS8010: Type annotations can only be used in TypeScript files. +-index.js(27,11): error TS8010: Type annotations can only be used in TypeScript files. +-index.js(28,11): error TS8010: Type annotations can only be used in TypeScript files. +-index.js(32,11): error TS8010: Type annotations can only be used in TypeScript files. +-index.js(39,11): error TS8010: Type annotations can only be used in TypeScript files. +-index.js(43,11): error TS8010: Type annotations can only be used in TypeScript files. +-index.js(47,11): error TS8010: Type annotations can only be used in TypeScript files. +-index.js(48,11): error TS8010: Type annotations can only be used in TypeScript files. +-index.js(52,11): error TS8010: Type annotations can only be used in TypeScript files. +-index.js(53,11): error TS8010: Type annotations can only be used in TypeScript files. +-index.js(59,11): error TS8010: Type annotations can only be used in TypeScript files. +-index.js(63,11): error TS8010: Type annotations can only be used in TypeScript files. +-index.js(67,11): error TS8010: Type annotations can only be used in TypeScript files. +-index.js(68,11): error TS8010: Type annotations can only be used in TypeScript files. ++index.js(13,5): error TS8017: Signature declarations can only be used in TypeScript files. ++index.js(19,5): error TS8017: Signature declarations can only be used in TypeScript files. ++index.js(23,5): error TS8017: Signature declarations can only be used in TypeScript files. ++index.js(27,5): error TS8017: Signature declarations can only be used in TypeScript files. ++index.js(28,5): error TS8017: Signature declarations can only be used in TypeScript files. ++index.js(32,5): error TS8017: Signature declarations can only be used in TypeScript files. ++index.js(39,5): error TS8017: Signature declarations can only be used in TypeScript files. ++index.js(43,5): error TS8017: Signature declarations can only be used in TypeScript files. ++index.js(47,5): error TS8017: Signature declarations can only be used in TypeScript files. ++index.js(48,5): error TS8017: Signature declarations can only be used in TypeScript files. ++index.js(52,5): error TS8017: Signature declarations can only be used in TypeScript files. ++index.js(53,5): error TS8017: Signature declarations can only be used in TypeScript files. ++index.js(59,5): error TS8017: Signature declarations can only be used in TypeScript files. ++index.js(63,5): error TS8017: Signature declarations can only be used in TypeScript files. ++index.js(67,5): error TS8017: Signature declarations can only be used in TypeScript files. ++index.js(68,5): error TS8017: Signature declarations can only be used in TypeScript files. + + + ==== index.js (21 errors) ==== +@@= skipped -42, +42 lines =@@ + + export class O { + [idx: string]: string; +- ~~~~~~ +-!!! error TS8010: Type annotations can only be used in TypeScript files. ++ ~~~~~~~~~~~~~~~~~~~~~~ ++!!! error TS8017: Signature declarations can only be used in TypeScript files. + } + + export class P extends O {} + + export class Q extends O { + [idx: string]: "ok"; +- ~~~~~~ +-!!! error TS8010: Type annotations can only be used in TypeScript files. ++ ~~~~~~~~~~~~~~~~~~~~ ++!!! error TS8017: Signature declarations can only be used in TypeScript files. + } + + export class R extends O { + [idx: number]: "ok"; +- ~~~~~~ +-!!! error TS8010: Type annotations can only be used in TypeScript files. ++ ~~~~~~~~~~~~~~~~~~~~ ++!!! error TS8017: Signature declarations can only be used in TypeScript files. + } + + export class S extends O { + [idx: string]: "ok"; +- ~~~~~~ +-!!! error TS8010: Type annotations can only be used in TypeScript files. ++ ~~~~~~~~~~~~~~~~~~~~ ++!!! error TS8017: Signature declarations can only be used in TypeScript files. + [idx: number]: never; +- ~~~~~~ +-!!! error TS8010: Type annotations can only be used in TypeScript files. ++ ~~~~~~~~~~~~~~~~~~~~~ ++!!! error TS8017: Signature declarations can only be used in TypeScript files. + } + + export class T { + [idx: number]: string; +- ~~~~~~ +-!!! error TS8010: Type annotations can only be used in TypeScript files. ++ ~~~~~~~~~~~~~~~~~~~~~~ ++!!! error TS8017: Signature declarations can only be used in TypeScript files. + } + + export class U extends T {} +@@= skipped -38, +38 lines =@@ + + export class V extends T { + [idx: string]: string; +- ~~~~~~ +-!!! error TS8010: Type annotations can only be used in TypeScript files. ++ ~~~~~~~~~~~~~~~~~~~~~~ ++!!! error TS8017: Signature declarations can only be used in TypeScript files. + } + + export class W extends T { + [idx: number]: "ok"; +- ~~~~~~ +-!!! error TS8010: Type annotations can only be used in TypeScript files. ++ ~~~~~~~~~~~~~~~~~~~~ ++!!! error TS8017: Signature declarations can only be used in TypeScript files. + } + + export class X extends T { + [idx: string]: string; +- ~~~~~~ +-!!! error TS8010: Type annotations can only be used in TypeScript files. ++ ~~~~~~~~~~~~~~~~~~~~~~ ++!!! error TS8017: Signature declarations can only be used in TypeScript files. + [idx: number]: "ok"; +- ~~~~~~ +-!!! error TS8010: Type annotations can only be used in TypeScript files. ++ ~~~~~~~~~~~~~~~~~~~~ ++!!! error TS8017: Signature declarations can only be used in TypeScript files. + } + + export class Y { + [idx: string]: {x: number}; +- ~~~~~~ +-!!! error TS8010: Type annotations can only be used in TypeScript files. ++ ~~~~~~~~~~~~~~~~~~~~~~~~~~~ ++!!! error TS8017: Signature declarations can only be used in TypeScript files. + [idx: number]: {x: number, y: number}; +- ~~~~~~ +-!!! error TS8010: Type annotations can only be used in TypeScript files. ++ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ++!!! error TS8017: Signature declarations can only be used in TypeScript files. + } + + export class Z extends Y {} + + export class AA extends Y { + [idx: string]: {x: number, y: number}; +- ~~~~~~ +-!!! error TS8010: Type annotations can only be used in TypeScript files. ++ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ++!!! error TS8017: Signature declarations can only be used in TypeScript files. + } + + export class BB extends Y { + [idx: number]: {x: 0, y: 0}; +- ~~~~~~ +-!!! error TS8010: Type annotations can only be used in TypeScript files. ++ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ++!!! error TS8017: Signature declarations can only be used in TypeScript files. + } + + export class CC extends Y { + [idx: string]: {x: number, y: number}; +- ~~~~~~ +-!!! error TS8010: Type annotations can only be used in TypeScript files. ++ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ++!!! error TS8017: Signature declarations can only be used in TypeScript files. + [idx: number]: {x: 0, y: 0}; +- ~~~~~~ +-!!! error TS8010: Type annotations can only be used in TypeScript files. ++ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ++!!! error TS8017: Signature declarations can only be used in TypeScript files. + } + \ No newline at end of file diff --git a/testdata/baselines/reference/submoduleAccepted/conformance/jsDeclarationsTypeReferences4.errors.txt.diff b/testdata/baselines/reference/submoduleAccepted/conformance/jsDeclarationsTypeReferences4.errors.txt.diff new file mode 100644 index 0000000000..90a2e6f285 --- /dev/null +++ b/testdata/baselines/reference/submoduleAccepted/conformance/jsDeclarationsTypeReferences4.errors.txt.diff @@ -0,0 +1,23 @@ +--- old.jsDeclarationsTypeReferences4.errors.txt ++++ new.jsDeclarationsTypeReferences4.errors.txt +@@= skipped -0, +0 lines =@@ + index.js(4,18): error TS8006: 'namespace' declarations can only be used in TypeScript files. +- +- +-==== index.js (1 errors) ==== ++index.js(6,22): error TS8006: 'namespace' declarations can only be used in TypeScript files. ++ ++ ++==== index.js (2 errors) ==== + /// + export const Something = 2; // to show conflict that can occur + // @ts-ignore +@@= skipped -9, +10 lines =@@ + !!! error TS8006: 'namespace' declarations can only be used in TypeScript files. + // @ts-ignore + export namespace B { ++ ~ ++!!! error TS8006: 'namespace' declarations can only be used in TypeScript files. + const Something = require("fs").Something; + const thing = new Something(); + // @ts-ignore \ No newline at end of file diff --git a/testdata/baselines/reference/submoduleAccepted/conformance/plainJSGrammarErrors.errors.txt.diff b/testdata/baselines/reference/submoduleAccepted/conformance/plainJSGrammarErrors.errors.txt.diff index 1274e947de..249a843d77 100644 --- a/testdata/baselines/reference/submoduleAccepted/conformance/plainJSGrammarErrors.errors.txt.diff +++ b/testdata/baselines/reference/submoduleAccepted/conformance/plainJSGrammarErrors.errors.txt.diff @@ -6,7 +6,7 @@ plainJSGrammarErrors.js(29,5): error TS1031: 'export' modifier cannot appear on class elements of this kind. -plainJSGrammarErrors.js(29,5): error TS8009: The 'export' modifier can only be used in TypeScript files. plainJSGrammarErrors.js(30,5): error TS1031: 'export' modifier cannot appear on class elements of this kind. -+plainJSGrammarErrors.js(34,9): error TS8017: Signature declarations can only be used in TypeScript files. ++plainJSGrammarErrors.js(34,5): error TS8017: Signature declarations can only be used in TypeScript files. plainJSGrammarErrors.js(34,22): error TS1005: '{' expected. plainJSGrammarErrors.js(35,9): error TS1054: A 'get' accessor cannot have parameters. plainJSGrammarErrors.js(36,9): error TS1049: A 'set' accessor must have exactly one parameter. @@ -40,7 +40,7 @@ // accessor mistakes get incorporeal(); -+ ~~~~~~~~~~~ ++ ~~~~~~~~~~~~~~~~~~ +!!! error TS8017: Signature declarations can only be used in TypeScript files. ~ !!! error TS1005: '{' expected.