已开启
feat: extensionAbility文件受限api报错,增加import节点回调 #873
schnappi创建于 16 天前
feat: extensionAbility文件受限api报错,增加import节点回调 #873
已开启
共 4 个文件变更+22-0
| @@ -34624,7 +34624,21 @@ export function createTypeChecker(host: TypeCheckerHost, isTypeCheckerForLinter: | |||
| 34624 | return globalESSymbol === resolveName(left, "Symbol" as __String, SymbolFlags.Value, /*nameNotFoundMessage*/ undefined, /*nameArg*/ undefined, /*isUse*/ false); | 34624 | return globalESSymbol === resolveName(left, "Symbol" as __String, SymbolFlags.Value, /*nameNotFoundMessage*/ undefined, /*nameArg*/ undefined, /*isUse*/ false); |
| 34625 | } | 34625 | } |
| 34626 | 34626 | ||
| 34627 | + function reportHostImportExpressionCheck(node: ImportDeclaration | ImportEqualsDeclaration | ExportDeclaration | ImportCall): void { | ||
| 34628 | + if (host.checkImportExpression) { | ||
| 34629 | + const checkResult = host.checkImportExpression(node); | ||
| 34630 | + if (checkResult && !checkResult.valid) { | ||
| 34631 | + const sourceFile = getSourceFileOfNode(node); | ||
| 34632 | + const diagnostic = createDiagnosticForNodeInSourceFile(sourceFile, node, Diagnostics.This_API_has_been_Special_Markings_exercise_caution_when_using_this_API); | ||
| 34633 | + diagnostic.messageText = checkResult.message ? checkResult.message : ''; | ||
| 34634 | + diagnostic.category = checkResult.type ? checkResult.type : DiagnosticCategory.Error; | ||
| 34635 | + diagnostics.add(diagnostic); | ||
| 34636 | + } | ||
| 34637 | + } | ||
| 34638 | + } | ||
| 34639 | + | ||
| 34627 | function checkImportCallExpression(node: ImportCall): Type { | 34640 | function checkImportCallExpression(node: ImportCall): Type { |
| 34641 | + reportHostImportExpressionCheck(node); | ||
| 34628 | // Check grammar of dynamic import | 34642 | // Check grammar of dynamic import |
| 34629 | checkGrammarImportCallExpression(node); | 34643 | checkGrammarImportCallExpression(node); |
| 34630 | 34644 | ||
| @@ -44675,6 +44689,7 @@ export function createTypeChecker(host: TypeCheckerHost, isTypeCheckerForLinter: | |||
| 44675 | } | 44689 | } |
| 44676 | 44690 | ||
| 44677 | function checkImportDeclaration(node: ImportDeclaration) { | 44691 | function checkImportDeclaration(node: ImportDeclaration) { |
| 44692 | + reportHostImportExpressionCheck(node); | ||
| 44678 | if (checkGrammarModuleElementContext(node, isInJSFile(node) ? Diagnostics.An_import_declaration_can_only_be_used_at_the_top_level_of_a_module : Diagnostics.An_import_declaration_can_only_be_used_at_the_top_level_of_a_namespace_or_module)) { | 44693 | if (checkGrammarModuleElementContext(node, isInJSFile(node) ? Diagnostics.An_import_declaration_can_only_be_used_at_the_top_level_of_a_module : Diagnostics.An_import_declaration_can_only_be_used_at_the_top_level_of_a_namespace_or_module)) { |
| 44679 | // If we hit an import declaration in an illegal context, just bail out to avoid cascading errors. | 44694 | // If we hit an import declaration in an illegal context, just bail out to avoid cascading errors. |
| 44680 | return; | 44695 | return; |
| @@ -44709,6 +44724,7 @@ export function createTypeChecker(host: TypeCheckerHost, isTypeCheckerForLinter: | |||
| 44709 | } | 44724 | } |
| 44710 | 44725 | ||
| 44711 | function checkImportEqualsDeclaration(node: ImportEqualsDeclaration) { | 44726 | function checkImportEqualsDeclaration(node: ImportEqualsDeclaration) { |
| 44727 | + reportHostImportExpressionCheck(node); | ||
| 44712 | if (checkGrammarModuleElementContext(node, isInJSFile(node) ? Diagnostics.An_import_declaration_can_only_be_used_at_the_top_level_of_a_module : Diagnostics.An_import_declaration_can_only_be_used_at_the_top_level_of_a_namespace_or_module)) { | 44728 | if (checkGrammarModuleElementContext(node, isInJSFile(node) ? Diagnostics.An_import_declaration_can_only_be_used_at_the_top_level_of_a_module : Diagnostics.An_import_declaration_can_only_be_used_at_the_top_level_of_a_namespace_or_module)) { |
| 44713 | // If we hit an import declaration in an illegal context, just bail out to avoid cascading errors. | 44729 | // If we hit an import declaration in an illegal context, just bail out to avoid cascading errors. |
| 44714 | return; | 44730 | return; |
| @@ -44749,6 +44765,7 @@ export function createTypeChecker(host: TypeCheckerHost, isTypeCheckerForLinter: | |||
| 44749 | } | 44765 | } |
| 44750 | 44766 | ||
| 44751 | function checkExportDeclaration(node: ExportDeclaration) { | 44767 | function checkExportDeclaration(node: ExportDeclaration) { |
| 44768 | + reportHostImportExpressionCheck(node); | ||
| 44752 | if (checkGrammarModuleElementContext(node, isInJSFile(node) ? Diagnostics.An_export_declaration_can_only_be_used_at_the_top_level_of_a_module : Diagnostics.An_export_declaration_can_only_be_used_at_the_top_level_of_a_namespace_or_module)) { | 44769 | if (checkGrammarModuleElementContext(node, isInJSFile(node) ? Diagnostics.An_export_declaration_can_only_be_used_at_the_top_level_of_a_module : Diagnostics.An_export_declaration_can_only_be_used_at_the_top_level_of_a_namespace_or_module)) { |
| 44753 | // If we hit an export in an illegal context, just bail out to avoid cascading errors. | 44770 | // If we hit an export in an illegal context, just bail out to avoid cascading errors. |
| 44754 | return; | 44771 | return; |
| @@ -1700,6 +1700,7 @@ export function createProgram(rootNamesOrOptions: readonly string[] | CreateProg | |||
| 1700 | isSourceRetentionAnnotationContentValid: host.isSourceRetentionAnnotationContentValid, | 1700 | isSourceRetentionAnnotationContentValid: host.isSourceRetentionAnnotationContentValid, |
| 1701 | isSourceRetentionDeclarationValid: host.isSourceRetentionDeclarationValid, | 1701 | isSourceRetentionDeclarationValid: host.isSourceRetentionDeclarationValid, |
| 1702 | isApiAvailableVersionSpecifications: host.isApiAvailableVersionSpecifications, | 1702 | isApiAvailableVersionSpecifications: host.isApiAvailableVersionSpecifications, |
| 1703 | + checkImportExpression: host.checkImportExpression, | ||
| 1703 | getJsDocNodeConditionCheckedResult: host. getJsDocNodeConditionCheckedResult, | 1704 | getJsDocNodeConditionCheckedResult: host. getJsDocNodeConditionCheckedResult, |
| 1704 | getFileCheckedModuleInfo: host.getFileCheckedModuleInfo, | 1705 | getFileCheckedModuleInfo: host.getFileCheckedModuleInfo, |
| 1705 | releaseTypeChecker: () => { typeChecker = undefined; linterTypeChecker = undefined; }, | 1706 | releaseTypeChecker: () => { typeChecker = undefined; linterTypeChecker = undefined; }, |
| @@ -4776,6 +4776,7 @@ export interface TypeCheckerHost extends ModuleSpecifierResolutionHost { | |||
| 4776 | isSourceRetentionDeclarationValid?(annotationNode: AnnotationDeclaration): boolean; | 4776 | isSourceRetentionDeclarationValid?(annotationNode: AnnotationDeclaration): boolean; |
| 4777 | isSourceOrExternalCode?(filePath: string): boolean; | 4777 | isSourceOrExternalCode?(filePath: string): boolean; |
| 4778 | isApiAvailableVersionSpecifications?(apiAvailableNode: Node, typeOfNodeFunc: Function): ConditionCheckResult; | 4778 | isApiAvailableVersionSpecifications?(apiAvailableNode: Node, typeOfNodeFunc: Function): ConditionCheckResult; |
| 4779 | + checkImportExpression?(node: ImportDeclaration | ImportEqualsDeclaration | ExportDeclaration | ImportCall): ConditionCheckResult | undefined; | ||
| 4779 | } | 4780 | } |
| 4780 | 4781 | ||
| 4781 | export interface TypeChecker { | 4782 | export interface TypeChecker { |
| @@ -7414,6 +7415,7 @@ export interface ModuleResolutionHost { | |||
| 7414 | isSourceRetentionAnnotationContentValid?(annotationNode: Annotation): ConditionCheckResult; | 7415 | isSourceRetentionAnnotationContentValid?(annotationNode: Annotation): ConditionCheckResult; |
| 7415 | isSourceRetentionDeclarationValid?(annotationNode: AnnotationDeclaration): boolean; | 7416 | isSourceRetentionDeclarationValid?(annotationNode: AnnotationDeclaration): boolean; |
| 7416 | isApiAvailableVersionSpecifications?(apiAvailableNode: Node, typeOfNodeFunc: Function): ConditionCheckResult; | 7417 | isApiAvailableVersionSpecifications?(apiAvailableNode: Node, typeOfNodeFunc: Function): ConditionCheckResult; |
| 7418 | + checkImportExpression?(node: ImportDeclaration | ImportEqualsDeclaration | ExportDeclaration | ImportCall): ConditionCheckResult | undefined; | ||
| 7417 | } | 7419 | } |
| 7418 | 7420 | ||
| 7419 | /** | 7421 | /** |
| @@ -7645,6 +7647,7 @@ export interface CompilerHost extends ModuleResolutionHost { | |||
| 7645 | isSourceRetentionDeclarationValid?(annotationNode: AnnotationDeclaration): boolean; | 7647 | isSourceRetentionDeclarationValid?(annotationNode: AnnotationDeclaration): boolean; |
| 7646 | isSourceOrExternalCode?(filePath: string): boolean; | 7648 | isSourceOrExternalCode?(filePath: string): boolean; |
| 7647 | isApiAvailableVersionSpecifications?(apiAvailableNode: Node, typeOfNodeFunc: Function): ConditionCheckResult; | 7649 | isApiAvailableVersionSpecifications?(apiAvailableNode: Node, typeOfNodeFunc: Function): ConditionCheckResult; |
| 7650 | + checkImportExpression?(node: ImportDeclaration | ImportEqualsDeclaration | ExportDeclaration | ImportCall): ConditionCheckResult | undefined; | ||
| 7648 | } | 7651 | } |
| 7649 | 7652 | ||
| 7650 | /** | 7653 | /** |
| @@ -1700,6 +1700,7 @@ export function createLanguageService( | |||
| 1700 | isSourceRetentionAnnotationContentValid: maybeBind(host, host.isSourceRetentionAnnotationContentValid), | 1700 | isSourceRetentionAnnotationContentValid: maybeBind(host, host.isSourceRetentionAnnotationContentValid), |
| 1701 | isSourceRetentionDeclarationValid: maybeBind(host, host.isSourceRetentionDeclarationValid), | 1701 | isSourceRetentionDeclarationValid: maybeBind(host, host.isSourceRetentionDeclarationValid), |
| 1702 | isApiAvailableVersionSpecifications: maybeBind(host, host.isApiAvailableVersionSpecifications), | 1702 | isApiAvailableVersionSpecifications: maybeBind(host, host.isApiAvailableVersionSpecifications), |
| 1703 | + checkImportExpression: maybeBind(host, host.checkImportExpression), | ||
| 1703 | getJsDocNodeConditionCheckedResult: maybeBind(host, host.getJsDocNodeConditionCheckedResult), | 1704 | getJsDocNodeConditionCheckedResult: maybeBind(host, host.getJsDocNodeConditionCheckedResult), |
| 1704 | getFileCheckedModuleInfo: maybeBind(host, host.getFileCheckedModuleInfo), | 1705 | getFileCheckedModuleInfo: maybeBind(host, host.getFileCheckedModuleInfo), |
| 1705 | isStaticSourceFile: host.isStaticSourceFile, | 1706 | isStaticSourceFile: host.isStaticSourceFile, |