diff --git a/compiler/server/build_pipe_server.js b/compiler/server/build_pipe_server.js index fbc9c398c5870a3aa21b5dbf8fed18d47c0f385d..728f74f241a22d9c1af33bdabe7445f5f213b8a1 100644 --- a/compiler/server/build_pipe_server.js +++ b/compiler/server/build_pipe_server.js @@ -15,6 +15,7 @@ const WebSocket = require('ws'); const ts = require('typescript'); +const path = require('path'); const { processComponentChild } = require('../lib/process_component_build'); @@ -25,7 +26,8 @@ let pluginSocket = ''; let supplement = { isAcceleratePreview: false, line: 0, - column: 0 + column: 0, + fileName: '' } const pluginCommandChannelMessageHandlers = { @@ -56,16 +58,22 @@ 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 compilerOptions = ts.readConfigFile( + path.resolve(__dirname, '../tsconfig.json'), ts.sys.readFile).config.compilerOptions; + Object.assign(compilerOptions, { + "sourceMap": false, + }); + const sourceNode = ts.createSourceFile('preview.ets', 'struct{build(){' + receivedMsg.data.script + '}}', + ts.ScriptTarget.Latest, true, ts.ScriptKind.ETS, compilerOptions); const previewStatements = []; const log = []; supplement = { isAcceleratePreview: true, line: parseInt(JSON.parse(receivedMsg.data.offset).line), - column: parseInt(JSON.parse(receivedMsg.data.offset).column) + column: parseInt(JSON.parse(receivedMsg.data.offset).column), + fileName: receivedMsg.data.filePath || '' } - processComponentChild(sourceNode, previewStatements, log, supplement); + processComponentChild(sourceNode.statements[0].members[1].body, previewStatements, log, supplement); supplement.isAcceleratePreview = false; const newSource = ts.factory.updateSourceFile(sourceNode, previewStatements); const printer = ts.createPrinter({ newLine: ts.NewLineKind.LineFeed }); @@ -73,11 +81,11 @@ function handlePluginCompileComponent(jsonData) { 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); + let line = parseInt(sourceNode.getLineAndCharacterOfPosition(log[i].pos).line); + let column = parseInt(sourceNode.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; + log[i].column = parseInt(JSON.parse(receivedMsg.data.offset).column) + column - 15; } else { log[i].line = parseInt(JSON.parse(receivedMsg.data.offset).line) + line; log[i].column = column; diff --git a/compiler/src/process_component_build.ts b/compiler/src/process_component_build.ts index 6831aa253953b0967c320d99ea649032805cf538..947ac6e2929412fe4e46a12e5416f535027d73dc 100644 --- a/compiler/src/process_component_build.ts +++ b/compiler/src/process_component_build.ts @@ -151,13 +151,15 @@ function validateRootNode(node: ts.MethodDeclaration, log: LogInfo[]): boolean { interface supplementType { isAcceleratePreview: boolean, line: number, - column: number + column: number, + fileName: string } let newsupplement: supplementType = { isAcceleratePreview: false, line: 0, - column: 0 + column: 0, + fileName: '' }; function validateEtsComponentNode(node: ts.CallExpression | ts.EtsComponentExpression) { @@ -173,8 +175,8 @@ function validateEtsComponentNode(node: ts.CallExpression | ts.EtsComponentExpre } } -export function processComponentChild(node: ts.Block | ts.SourceFile, newStatements: ts.Statement[], - log: LogInfo[], supplement: supplementType = {isAcceleratePreview: false, line: 0, column: 0}): void { +export function processComponentChild(node: ts.Block | ts.SourceFile, newStatements: ts.Statement[], log: LogInfo[], + supplement: supplementType = {isAcceleratePreview: false, line: 0, column: 0, fileName: ''}): void { if (supplement.isAcceleratePreview) { newsupplement = supplement; } @@ -290,19 +292,21 @@ function processInnerComponent(node: ts.ExpressionStatement, index: number, arr: const posOfNode: ts.LineAndCharacter = transformLog.sourceFile.getLineAndCharacterOfPosition(getRealNodePos(node)); const projectPath: string = projectConfig.projectPath; - const curFileName: string = transformLog.sourceFile.fileName.replace(/.ts$/, ''); + let 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; + col = newsupplement.column - 15; } line = newsupplement.line; + curFileName = newsupplement.fileName; } newsupplement = { isAcceleratePreview: false, line: 0, - column: 0 + column: 0, + fileName: '' }; const debugInfo: string = `${path.relative(projectPath, curFileName).replace(/\\+/g, '/')}` + diff --git a/compiler/webpack.config.js b/compiler/webpack.config.js index c88ec47748e91cadcc4877a07d5365b01caf10be..d0596a77933759fcc1e20a9bb3435f04616a159d 100644 --- a/compiler/webpack.config.js +++ b/compiler/webpack.config.js @@ -15,7 +15,6 @@ const path = require('path'); const fs = require('fs'); -const { CleanWebpackPlugin } = require('clean-webpack-plugin'); const CopyPlugin = require('copy-webpack-plugin'); const Webpack = require('webpack'); const { GenAbcPlugin } = require('./lib/gen_abc_plugin'); @@ -117,7 +116,6 @@ function initConfig(config) { /\.d\.ts$/ ] }), - new CleanWebpackPlugin(), new ResultStates() ] });