mirror of
https://github.com/openharmony/developtools_ace-ets2bundle.git
synced 2026-07-20 00:54:09 -04:00
!267 send error message to ide
Merge pull request !267 from houhaoyu/hhy
This commit is contained in:
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user