!267 send error message to ide

Merge pull request !267 from houhaoyu/hhy
This commit is contained in:
openharmony_ci
2022-03-10 12:19:28 +00:00
committed by Gitee
2 changed files with 62 additions and 7 deletions
+30 -3
View File
@@ -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);
}
+32 -4
View File
@@ -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),
@@ -629,7 +657,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(
@@ -651,7 +679,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);
}