From cfd9f2a3e06765eba7675e23caa9d81e2b24e1f6 Mon Sep 17 00:00:00 2001 From: houhaoyu Date: Mon, 7 Mar 2022 09:44:33 +0800 Subject: [PATCH] fixed 38752e5 from https://gitee.com/houhaoyu/developtools_ace-ets2bundle/pulls/267 houhaoyu@huawei.com fix debugline Signed-off-by: houhaoyu Change-Id: I3d1af6f4d781199c55c3bdb64a3085f34c48601a --- compiler/server/build_pipe_server.js | 33 ++++++++++++++++++++--- compiler/src/process_component_build.ts | 36 ++++++++++++++++++++++--- 2 files changed, 62 insertions(+), 7 deletions(-) diff --git a/compiler/server/build_pipe_server.js b/compiler/server/build_pipe_server.js index 4d3e8a63b..fbc9c398c 100644 --- a/compiler/server/build_pipe_server.js +++ b/compiler/server/build_pipe_server.js @@ -22,6 +22,12 @@ const WebSocketServer = WebSocket.Server; let pluginSocket = ''; +let supplement = { + isAcceleratePreview: false, + line: 0, + column: 0 +} + const pluginCommandChannelMessageHandlers = { 'compileComponent': handlePluginCompileComponent, 'default': () => {} @@ -50,14 +56,35 @@ function handlePluginCommand(jsonData) { function handlePluginCompileComponent(jsonData) { const receivedMsg = jsonData; - const sourceNode = ts.createSourceFile - ('preview.ts', receivedMsg.data.script, ts.ScriptTarget.Latest, true, ts.ScriptKind.TS); + const sourceNode = ts.createSourceFile('preview.ts', receivedMsg.data.script, + ts.ScriptTarget.Latest, true, ts.ScriptKind.TS); const previewStatements = []; - processComponentChild(sourceNode, previewStatements, []); + const log = []; + supplement = { + isAcceleratePreview: true, + line: parseInt(JSON.parse(receivedMsg.data.offset).line), + column: parseInt(JSON.parse(receivedMsg.data.offset).column) + } + processComponentChild(sourceNode, previewStatements, log, supplement); + supplement.isAcceleratePreview = false; const newSource = ts.factory.updateSourceFile(sourceNode, previewStatements); const printer = ts.createPrinter({ newLine: ts.NewLineKind.LineFeed }); const result = printer.printNode(ts.EmitHint.Unspecified, newSource, newSource); receivedMsg.data.script = ts.transpileModule(result, {}).outputText; + if (receivedMsg.data.offset) { + for (let i = 0; i < log.length; i++) { + let line = parseInt(newSource.getLineAndCharacterOfPosition(log[i].pos).line); + let column = parseInt(newSource.getLineAndCharacterOfPosition(log[i].pos).character); + if (line === 0) { + log[i].line = parseInt(JSON.parse(receivedMsg.data.offset).line); + log[i].column = parseInt(JSON.parse(receivedMsg.data.offset).column) + column; + } else { + log[i].line = parseInt(JSON.parse(receivedMsg.data.offset).line) + line; + log[i].column = column; + } + } + } + receivedMsg.data.log = log; if (pluginSocket.readyState === WebSocket.OPEN){ responseToPlugin(receivedMsg); } diff --git a/compiler/src/process_component_build.ts b/compiler/src/process_component_build.ts index d8db918fd..97e90585a 100644 --- a/compiler/src/process_component_build.ts +++ b/compiler/src/process_component_build.ts @@ -162,8 +162,23 @@ function validateRootNode(node: ts.MethodDeclaration, log: LogInfo[]): boolean { return isValid; } +interface supplementType { + isAcceleratePreview: boolean, + line: number, + column: number +} + +let newsupplement: supplementType = { + isAcceleratePreview: false, + line: 0, + column: 0 +}; + export function processComponentChild(node: ts.Block | ts.SourceFile, newStatements: ts.Statement[], - log: LogInfo[]): void { + log: LogInfo[], supplement: supplementType = {isAcceleratePreview: false, line: 0, column: 0}): void { + if (supplement.isAcceleratePreview) { + newsupplement = supplement; + } if (node.statements.length) { node.statements.forEach((item, index, array) => { if (ts.isExpressionStatement(item)) { @@ -256,9 +271,22 @@ function processInnerComponent(node: ts.ExpressionStatement, index: number, arr: transformLog.sourceFile.getLineAndCharacterOfPosition(getRealNodePos(node)); const projectPath: string = projectConfig.projectPath; const curFileName: string = transformLog.sourceFile.fileName.replace(/.ts$/, ''); + let line: number = 1; + let col: number = 1; + if (newsupplement.isAcceleratePreview) { + if (posOfNode.line === 0) { + col = newsupplement.column; + } + line = newsupplement.line; + } + newsupplement = { + isAcceleratePreview: false, + line: 0, + column: 0 + }; const debugInfo: string = `${path.relative(projectPath, curFileName).replace(/\\+/g, '/')}` + - `(${posOfNode.line + 1}:${posOfNode.character + 1})`; + `(${posOfNode.line + line}:${posOfNode.character + col})`; const debugNode: ts.ExpressionStatement = ts.factory.createExpressionStatement( createFunction(ts.factory.createIdentifier(getName(node)), ts.factory.createIdentifier(COMPONENT_DEBUGLINE_FUNCTION), @@ -622,7 +650,7 @@ function processDragStartBuilder(node: ts.CallExpression): ts.CallExpression { // @ts-ignore for (let i = 0; i < node.arguments[0].body.statements.length; i++) { // @ts-ignore - let statement: ts.Statement = node.arguments[0].body.statements[i]; + const statement: ts.Statement = node.arguments[0].body.statements[i]; newStatements.push(checkStatement(statement)); } node = ts.factory.updateCallExpression(node, node.expression, node.typeArguments, [ts.factory.updateArrowFunction( @@ -644,7 +672,7 @@ function checkStatement(statement: ts.Statement): ts.Statement { if (ts.isObjectLiteralExpression(statement.expression)) { const newProperties: ts.ObjectLiteralElementLike[] = []; for (let j = 0; j < statement.expression.properties.length; j++) { - let property: ts.ObjectLiteralElementLike = statement.expression.properties[j]; + const property: ts.ObjectLiteralElementLike = statement.expression.properties[j]; checkProperty(property); newProperties.push(property); } -- Gitee