From 39fc87709f6a9e882638fd731d9063ba69fd2d14 Mon Sep 17 00:00:00 2001 From: anjiaqi Date: Thu, 26 Jun 2025 20:34:52 +0800 Subject: [PATCH] Modify logDiagnosticWithSuggestion API Issue: https://gitee.com/openharmony/arkcompiler_ets_frontend/issues/ICHWZ1 Reason: Currently, the source range of diagnostic and suggestion share the same source range, but in some cases, they should be different. Description: Delete the range param in logDiagnosticWithSuggestion API, add range field into es2panda_SuggestionInfo and add pos field into es2panda_DiagnosticInfo. Test: pass Signed-off-by: anjiaqi --- .../ui-syntax-plugins/processor/index.ts | 12 +++++---- koala-wrapper/native/src/bridges.cc | 25 +++++++++++-------- koala-wrapper/src/Es2pandaNativeModule.ts | 11 ++++---- .../src/arkts-api/peers/Diagnostic.ts | 5 ++-- .../src/arkts-api/peers/DiagnosticInfo.ts | 5 ++-- .../src/arkts-api/peers/SuggestionInfo.ts | 5 ++-- 6 files changed, 35 insertions(+), 28 deletions(-) diff --git a/arkui-plugins/ui-syntax-plugins/processor/index.ts b/arkui-plugins/ui-syntax-plugins/processor/index.ts index 44a83e261..5c3c24409 100644 --- a/arkui-plugins/ui-syntax-plugins/processor/index.ts +++ b/arkui-plugins/ui-syntax-plugins/processor/index.ts @@ -70,19 +70,21 @@ class ConcreteUISyntaxRuleContext implements UISyntaxRuleContext { : arkts.PluginDiagnosticType.ES2PANDA_PLUGIN_WARNING ); if (options.fix) { - const diagnosticInfo: arkts.DiagnosticInfo = arkts.DiagnosticInfo.create(diagnosticKind); + const diagnosticInfo: arkts.DiagnosticInfo = arkts.DiagnosticInfo.create(diagnosticKind, + arkts.getStartPosition(options.node)); const fixSuggestion = options.fix(options.node); const suggestionKind: arkts.DiagnosticKind = arkts.DiagnosticKind.create( message, arkts.PluginDiagnosticType.ES2PANDA_PLUGIN_SUGGESTION ); + const [startPosition, endPosition] = fixSuggestion.range; + const sourceRange: arkts.SourceRange = arkts.SourceRange.create(startPosition, endPosition); const suggestionInfo: arkts.SuggestionInfo = arkts.SuggestionInfo.create( suggestionKind, - fixSuggestion.code + fixSuggestion.code, + sourceRange ); - const [startPosition, endPosition] = fixSuggestion.range; - const sourceRange: arkts.SourceRange = arkts.SourceRange.create(startPosition, endPosition); - arkts.Diagnostic.logDiagnosticWithSuggestion(diagnosticInfo, suggestionInfo, sourceRange); + arkts.Diagnostic.logDiagnosticWithSuggestion(diagnosticInfo, suggestionInfo); } else { arkts.Diagnostic.logDiagnostic(diagnosticKind, arkts.getStartPosition(options.node)); } diff --git a/koala-wrapper/native/src/bridges.cc b/koala-wrapper/native/src/bridges.cc index 3cc1282ac..d608c7ee9 100644 --- a/koala-wrapper/native/src/bridges.cc +++ b/koala-wrapper/native/src/bridges.cc @@ -613,10 +613,12 @@ inline KUInt unpackUInt(const KByte* bytes) ); } -KNativePointer impl_CreateDiagnosticInfo(KNativePointer context, KNativePointer kind, KStringArray argsPtr, KInt argc) +KNativePointer impl_CreateDiagnosticInfo(KNativePointer context, KNativePointer kind, KStringArray argsPtr, + KInt argc, KNativePointer pos) { const auto _context = reinterpret_cast(context); const auto _kind = reinterpret_cast(kind); + const auto _pos = reinterpret_cast(pos); const std::size_t headerLen = 4; const char** _args = new const char*[argc]; std::size_t position = headerLen; @@ -627,15 +629,17 @@ KNativePointer impl_CreateDiagnosticInfo(KNativePointer context, KNativePointer _args[i] = strdup(std::string(reinterpret_cast(argsPtr + position), strLen).c_str()); position += strLen; } - return GetImpl()->CreateDiagnosticInfo(_context, _kind, _args, argc); + return GetImpl()->CreateDiagnosticInfo(_context, _kind, _args, argc, _pos); } -KOALA_INTEROP_4(CreateDiagnosticInfo, KNativePointer, KNativePointer, KNativePointer, KStringArray, KInt); +KOALA_INTEROP_5(CreateDiagnosticInfo, KNativePointer, KNativePointer, KNativePointer, + KStringArray, KInt, KNativePointer); KNativePointer impl_CreateSuggestionInfo(KNativePointer context, KNativePointer kind, KStringArray argsPtr, - KInt argc, KStringPtr& substitutionCode) + KInt argc, KStringPtr& substitutionCode, KNativePointer range) { const auto _context = reinterpret_cast(context); const auto _kind = reinterpret_cast(kind); + const auto _range = reinterpret_cast(range); const std::size_t headerLen = 4; const char** _args = new const char*[argc]; std::size_t position = headerLen; @@ -647,10 +651,10 @@ KNativePointer impl_CreateSuggestionInfo(KNativePointer context, KNativePointer position += strLen; } const auto _substitutionCode = getStringCopy(substitutionCode); - return GetImpl()->CreateSuggestionInfo(_context, _kind, _args, argc, _substitutionCode); + return GetImpl()->CreateSuggestionInfo(_context, _kind, _args, argc, _substitutionCode, _range); } -KOALA_INTEROP_5(CreateSuggestionInfo, KNativePointer, KNativePointer, KNativePointer, - KStringArray, KInt, KStringPtr); +KOALA_INTEROP_6(CreateSuggestionInfo, KNativePointer, KNativePointer, KNativePointer, + KStringArray, KInt, KStringPtr, KNativePointer); void impl_LogDiagnostic(KNativePointer context, KNativePointer kind, KStringArray argvPtr, KInt argc, KNativePointer pos) @@ -673,15 +677,14 @@ void impl_LogDiagnostic(KNativePointer context, KNativePointer kind, KStringArra KOALA_INTEROP_V5(LogDiagnostic, KNativePointer, KNativePointer, KStringArray, KInt, KNativePointer); void impl_LogDiagnosticWithSuggestion(KNativePointer context, KNativePointer diagnosticInfo, - KNativePointer suggestionInfo, KNativePointer range) + KNativePointer suggestionInfo) { const auto _context = reinterpret_cast(context); const auto _diagnosticInfo = reinterpret_cast(diagnosticInfo); const auto _suggestionInfo = reinterpret_cast(suggestionInfo); - const auto _range = reinterpret_cast(range); - GetImpl()->LogDiagnosticWithSuggestion(_context, _diagnosticInfo, _suggestionInfo, _range); + GetImpl()->LogDiagnosticWithSuggestion(_context, _diagnosticInfo, _suggestionInfo); } -KOALA_INTEROP_V4(LogDiagnosticWithSuggestion, KNativePointer, KNativePointer, KNativePointer, KNativePointer); +KOALA_INTEROP_V3(LogDiagnosticWithSuggestion, KNativePointer, KNativePointer, KNativePointer); KBoolean impl_CallExpressionIsTrailingCallConst(KNativePointer context, KNativePointer receiver) { diff --git a/koala-wrapper/src/Es2pandaNativeModule.ts b/koala-wrapper/src/Es2pandaNativeModule.ts index 1fcdcdd4f..e4b2d3f04 100644 --- a/koala-wrapper/src/Es2pandaNativeModule.ts +++ b/koala-wrapper/src/Es2pandaNativeModule.ts @@ -890,7 +890,7 @@ export class Es2pandaNativeModule { _IsArrayExpression(node: KPtr): KBoolean { throw new Error('IsArrayExpression was not overloaded by native module initialization'); } - + _MemInitialize(): void { throw new Error('MemInitialize was not overloaded by native module initialization'); } @@ -899,7 +899,7 @@ export class Es2pandaNativeModule { throw new Error('MemFinalize was not overloaded by native module initialization'); } - _CreateGlobalContext(configPtr: KNativePointer, externalFileList: KStringArrayPtr, fileNum: KInt, + _CreateGlobalContext(configPtr: KNativePointer, externalFileList: KStringArrayPtr, fileNum: KInt, lspUsage: boolean): KNativePointer { throw new Error('CreateGlobalContext was not overloaded by native module initialization'); } @@ -917,12 +917,13 @@ export class Es2pandaNativeModule { throw new Error('Not implemented'); } - _CreateDiagnosticInfo(context: KNativePointer, kind: KNativePointer, args: string[], argc: number): KNativePointer { + _CreateDiagnosticInfo(context: KNativePointer, kind: KNativePointer, args: string[], + argc: number, pos: KNativePointer): KNativePointer { throw new Error('Not implemented'); } _CreateSuggestionInfo(context: KNativePointer, kind: KNativePointer, args: string[], - argc: number, substitutionCode: string): KNativePointer { + argc: number, substitutionCode: string, range?: KNativePointer): KNativePointer { throw new Error('Not implemented'); } @@ -931,7 +932,7 @@ export class Es2pandaNativeModule { } _LogDiagnosticWithSuggestion(context: KNativePointer, diagnosticInfo: KNativePointer, - suggestionInfo?: KNativePointer, range?: KNativePointer): void { + suggestionInfo?: KNativePointer): void { throw new Error('Not implemented'); } diff --git a/koala-wrapper/src/arkts-api/peers/Diagnostic.ts b/koala-wrapper/src/arkts-api/peers/Diagnostic.ts index 79f24ec0b..08882031a 100644 --- a/koala-wrapper/src/arkts-api/peers/Diagnostic.ts +++ b/koala-wrapper/src/arkts-api/peers/Diagnostic.ts @@ -31,9 +31,8 @@ export class Diagnostic extends ArktsObject { global.es2panda._LogDiagnostic(global.context, kind.peer, passStringArray(args), args.length, pos.peer); } - static logDiagnosticWithSuggestion(diagnosticInfo: DiagnosticInfo, suggestionInfo: SuggestionInfo, - range: SourceRange): void { - global.es2panda._LogDiagnosticWithSuggestion(global.context, diagnosticInfo.peer, suggestionInfo.peer, range.peer); + static logDiagnosticWithSuggestion(diagnosticInfo: DiagnosticInfo, suggestionInfo: SuggestionInfo): void { + global.es2panda._LogDiagnosticWithSuggestion(global.context, diagnosticInfo.peer, suggestionInfo.peer); } } \ No newline at end of file diff --git a/koala-wrapper/src/arkts-api/peers/DiagnosticInfo.ts b/koala-wrapper/src/arkts-api/peers/DiagnosticInfo.ts index d67f7e839..de35eed7c 100644 --- a/koala-wrapper/src/arkts-api/peers/DiagnosticInfo.ts +++ b/koala-wrapper/src/arkts-api/peers/DiagnosticInfo.ts @@ -17,6 +17,7 @@ import { ArktsObject } from './ArktsObject'; import { global } from '../static/global'; import { KNativePointer } from '@koalaui/interop'; import { DiagnosticKind } from './DiagnosticKind'; +import { SourcePosition } from './SourcePosition'; import { passStringArray } from '../utilities/private'; export class DiagnosticInfo extends ArktsObject { @@ -24,9 +25,9 @@ export class DiagnosticInfo extends ArktsObject { super(peer); } - static create(kind: DiagnosticKind, ...args: string[]): DiagnosticInfo { + static create(kind: DiagnosticKind, pos: SourcePosition, ...args: string[]): DiagnosticInfo { return new DiagnosticInfo( - global.es2panda._CreateDiagnosticInfo(global.context, kind.peer, passStringArray(args), args.length) + global.es2panda._CreateDiagnosticInfo(global.context, kind.peer, passStringArray(args), args.length, pos.peer) ); } diff --git a/koala-wrapper/src/arkts-api/peers/SuggestionInfo.ts b/koala-wrapper/src/arkts-api/peers/SuggestionInfo.ts index cb43685c9..df8fe6754 100644 --- a/koala-wrapper/src/arkts-api/peers/SuggestionInfo.ts +++ b/koala-wrapper/src/arkts-api/peers/SuggestionInfo.ts @@ -17,6 +17,7 @@ import { ArktsObject } from './ArktsObject'; import { global } from '../static/global'; import { KNativePointer } from '@koalaui/interop'; import { DiagnosticKind } from './DiagnosticKind'; +import { SourceRange } from './SourceRange'; import { passStringArray } from '../utilities/private'; export class SuggestionInfo extends ArktsObject { @@ -24,9 +25,9 @@ export class SuggestionInfo extends ArktsObject { super(peer); } - static create(kind: DiagnosticKind, substitutionCode: string, ...args: string[]): SuggestionInfo { + static create(kind: DiagnosticKind, substitutionCode: string, range: SourceRange, ...args: string[]): SuggestionInfo { return new SuggestionInfo( - global.es2panda._CreateSuggestionInfo(global.context, kind.peer, passStringArray(args), args.length, substitutionCode) + global.es2panda._CreateSuggestionInfo(global.context, kind.peer, passStringArray(args), args.length, substitutionCode, range.peer) ); } -- Gitee