已开启
feat: extensionAbility文件受限api报错,增加import节点回调 #873
feat: extensionAbility文件受限api报错,增加import节点回调 #873
已开启
schnappi创建于 16 天前
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 import34642 // 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 
4781export interface TypeChecker {4782export 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,