diff --git a/arkoala-arkts/libarkts/examples/src/builder-lambda-transformer.ts b/arkoala-arkts/libarkts/examples/src/builder-lambda-transformer.ts index 76e04a25dfb57f36125ab87254e95ef7489906c0..8cdb63c5f42205a737a6bf29755cf7fb7c805f82 100644 --- a/arkoala-arkts/libarkts/examples/src/builder-lambda-transformer.ts +++ b/arkoala-arkts/libarkts/examples/src/builder-lambda-transformer.ts @@ -82,7 +82,10 @@ export class BuilderLambdaTransformer extends AbstractVisitor { call.arguments ) }) - // TODO: transition to arkts api + + // const lambdaArg = ts.factory.createArrowFunction( + // ts.factory.createScriptFunction + // ) // const lambdaArg = ts.factory.createArrowFunction( // undefined, // undefined, diff --git a/arkoala-arkts/libarkts/examples/src/print-visitor.ts b/arkoala-arkts/libarkts/examples/src/print-visitor.ts index 17bdc834c9db0797235c8bb8829fff5682ea6b19..9f9baf9d7195ca0880997f6767fa0b19971b9018 100644 --- a/arkoala-arkts/libarkts/examples/src/print-visitor.ts +++ b/arkoala-arkts/libarkts/examples/src/print-visitor.ts @@ -9,7 +9,8 @@ export class PrintVisitor extends AbstractVisitor { } visitor(node: ts.Node): ts.Node { - console.log(`${node.constructor.name}`) + console.log(`${" ".repeat(4 * this.indentation) + node.constructor.name}`) + this.print(`${node.constructor.name}`) return this.visitEachChild(node) } diff --git a/arkoala-arkts/libarkts/src/arkts-api/factory/nodeFactory.ts b/arkoala-arkts/libarkts/src/arkts-api/factory/nodeFactory.ts index 5622bd16fd8f9423ee50e3bd90e909bac25399d5..b8a9d2952d049fff1954dbccaa8764935ec89f91 100644 --- a/arkoala-arkts/libarkts/src/arkts-api/factory/nodeFactory.ts +++ b/arkoala-arkts/libarkts/src/arkts-api/factory/nodeFactory.ts @@ -21,7 +21,7 @@ function compose( create: (...args: ARGS) => T, update: (node: T, original: T) => T = updateNodeByNode ): (node: T, ...args: ARGS) => T { - return (node: T, ...args: ARGS) => update(node, create(...args)); + return (node: T, ...args: ARGS) => update(create(...args), node); } export const factory = { @@ -56,6 +56,21 @@ export const factory = { createEtsScript: arkts.EtsScript.create, updateEtsScript: arkts.EtsScript.update, - createArrowFunctionExpression: arkts.ArrowFunctionExpression.create, + /** + * TODO: + */ + createFunctionDeclaration: arkts.FunctionDeclaration.create, + updateFunctionDeclaration: compose(arkts.FunctionDeclaration.create), + + /** + * TODO: + */ + createBlock: arkts.BlockStatement.create, + updateBlock: compose(arkts.BlockStatement.create), + /** + * TODO: + */ + createArrowFunction: arkts.ArrowFunctionExpression.create, + updateArrowFunction: compose(arkts.ArrowFunctionExpression.create), } diff --git a/arkoala-arkts/libarkts/src/arkts-api/types.ts b/arkoala-arkts/libarkts/src/arkts-api/types.ts index 34bc39be7475aeaee8ee80a8d616b0c4cd0c37cb..0659a24cab247f562b65b83ba7d64a6480c72732 100644 --- a/arkoala-arkts/libarkts/src/arkts-api/types.ts +++ b/arkoala-arkts/libarkts/src/arkts-api/types.ts @@ -756,16 +756,12 @@ export class ArrowFunctionExpression extends Node { } static create( - node: undefined | ArrowFunctionExpression, func: ScriptFunction, ): ArrowFunctionExpression { return new ArrowFunctionExpression( - updatePeerByNode( - global.es2panda._CreateArrowFunctionExpression( - global.context, - passNode(func) - ), - node + global.es2panda._CreateArrowFunctionExpression( + global.context, + passNode(func) ) ) } @@ -787,21 +783,17 @@ export class FunctionDeclaration extends Node { } static create( - node: undefined | FunctionDeclaration, scriptFunction: ScriptFunction, isAnon: boolean ): FunctionDeclaration { const res = new FunctionDeclaration( - updatePeerByNode( - global.es2panda._CreateFunctionDeclaration( - global.context, - scriptFunction.peer, - // TODO: support annotations - arrayOfNullptr, - 0, - isAnon - ), - node + global.es2panda._CreateFunctionDeclaration( + global.context, + scriptFunction.peer, + // TODO: support annotations + arrayOfNullptr, + 0, + isAnon ) ) // TODO: maybe wrong @@ -851,17 +843,13 @@ export class BlockStatement extends Node { } static create( - node: undefined | BlockStatement, - statements: Node[], + statements: readonly Node[], ): BlockStatement { return new BlockStatement( - updatePeerByNode( - global.es2panda._CreateBlockStatement( - global.context, - passNodeArray(statements), - statements.length - ), - node + global.es2panda._CreateBlockStatement( + global.context, + passNodeArray(statements), + statements.length ) ) } diff --git a/arkoala-arkts/libarkts/src/arkts-api/visitor.ts b/arkoala-arkts/libarkts/src/arkts-api/visitor.ts index 90e289f2bd54b275241d291a9c8e24a2746451c9..edf7c8924297582de958a90df8c282da02d50cbd 100644 --- a/arkoala-arkts/libarkts/src/arkts-api/visitor.ts +++ b/arkoala-arkts/libarkts/src/arkts-api/visitor.ts @@ -1,17 +1,10 @@ -import { - CallExpression, - EtsScript, - ExpressionStatement, - FunctionDeclaration, - MemberExpression, - Node -} from "./types" +import * as arkts from "./types" import { factory } from "./factory/nodeFactory" -type Visitor = (node: Node) => Node +type Visitor = (node: arkts.Node) => arkts.Node // TODO: rethink (remove as) -function nodeVisitor(node: T, visitor: Visitor): T { +function nodeVisitor(node: T, visitor: Visitor): T { if (node === undefined) { return node } @@ -19,7 +12,7 @@ function nodeVisitor(node: T, visitor: Visitor): T { } // TODO: rethink (remove as) -function nodesVisitor(nodes: TIn, visitor: Visitor): T[] | TIn { +function nodesVisitor(nodes: TIn, visitor: Visitor): T[] | TIn { if (nodes === undefined) { return nodes } @@ -27,16 +20,16 @@ function nodesVisitor(node } export function visitEachChild( - node: Node, + node: arkts.Node, visitor: Visitor -): Node { - if (node instanceof EtsScript) { +): arkts.Node { + if (node instanceof arkts.EtsScript) { return factory.updateEtsScript( node, nodesVisitor(node.statements, visitor) ) } - if (node instanceof CallExpression) { + if (node instanceof arkts.CallExpression) { return factory.updateCallExpression( node, nodeVisitor(node.expression, visitor), @@ -44,6 +37,26 @@ export function visitEachChild( nodesVisitor(node.arguments, visitor) ) } + if (node instanceof arkts.FunctionDeclaration) { + return factory.updateFunctionDeclaration( + node, + nodeVisitor(node.scriptFunction, visitor), + node.isAnon + ) + } + if (node instanceof arkts.BlockStatement) { + return factory.updateBlock( + node, + nodesVisitor(node.statements, visitor) + ) + } + if (node instanceof arkts.ExpressionStatement) { + return factory.updateExpressionStatement( + node, + nodeVisitor(node.expression, visitor) + ) + } + // TODO return node -} \ No newline at end of file +} diff --git a/arkoala-arkts/libarkts/src/ts-api/factory/nodeFactory.ts b/arkoala-arkts/libarkts/src/ts-api/factory/nodeFactory.ts index c658f65f5ca4b92901149211f78d1b8da0d44d65..48f79d6881c980c441cf3530df873236745bbd0a 100644 --- a/arkoala-arkts/libarkts/src/ts-api/factory/nodeFactory.ts +++ b/arkoala-arkts/libarkts/src/ts-api/factory/nodeFactory.ts @@ -359,8 +359,7 @@ export function createNodeFactory() { body: Block | undefined ): FunctionDeclaration { return new FunctionDeclaration( - arkts.FunctionDeclaration.create( - undefined, + arkts.factory.createFunctionDeclaration( arkts.ScriptFunction.create( undefined, body?.node, @@ -401,7 +400,7 @@ export function createNodeFactory() { body: Block | undefined ): FunctionDeclaration { return new FunctionDeclaration( - arkts.FunctionDeclaration.create( + arkts.factory.updateFunctionDeclaration( node.node, arkts.ScriptFunction.create( node.node.scriptFunction, @@ -650,8 +649,7 @@ export function createNodeFactory() { multiline?: boolean ): Block { return new Block( - arkts.BlockStatement.create( - undefined, + arkts.factory.createBlock( passNodeArray(statements) ) ) @@ -667,7 +665,7 @@ export function createNodeFactory() { statements: readonly Statement[] ): Block { return new Block( - arkts.BlockStatement.create( + arkts.factory.updateBlock( node.node, passNodeArray(statements) ) @@ -941,8 +939,7 @@ export function createNodeFactory() { body: Block ) { return new ArrowFunction( - arkts.ArrowFunctionExpression.create( - undefined, + arkts.factory.createArrowFunction( arkts.ScriptFunction.create( undefined, passNode(body), @@ -980,7 +977,7 @@ export function createNodeFactory() { body: Block, ): ArrowFunction { return new ArrowFunction( - arkts.ArrowFunctionExpression.create( + arkts.factory.updateArrowFunction( node.node, arkts.ScriptFunction.create( node.node.scriptFunction, diff --git a/arkoala-arkts/libarkts/test/arkts-api/functions/create.test.ts b/arkoala-arkts/libarkts/test/arkts-api/functions/create.test.ts index 5f721910cee74d468340f15b514c3a4f7ff2b7c8..7de4b23af51ebfa7fec8012c0bfd59a111d1e65b 100644 --- a/arkoala-arkts/libarkts/test/arkts-api/functions/create.test.ts +++ b/arkoala-arkts/libarkts/test/arkts-api/functions/create.test.ts @@ -1,6 +1,5 @@ import * as util from "../../test-util" import * as arkts from "../../../src/arkts-api" -import { factory } from "../../../src/arkts-api/factory/nodeFactory" suite(util.basename(__filename), () => { test("sample-1", function() { @@ -24,17 +23,17 @@ suite(util.basename(__filename), () => { script, [ script.statements[0], - arkts.FunctionDeclaration.create(undefined, + arkts.factory.createFunctionDeclaration( arkts.ScriptFunction.create(undefined, - arkts.BlockStatement.create(undefined, + arkts.factory.createBlock( [ - factory.createExpressionStatement( - factory.createCallExpression( - factory.createMemberExpression( - factory.createIdentifier( + arkts.factory.createExpressionStatement( + arkts.factory.createCallExpression( + arkts.factory.createMemberExpression( + arkts.factory.createIdentifier( 'console' ), - factory.createIdentifier( + arkts.factory.createIdentifier( 'log' ), arkts.Es2pandaMemberExpressionKind.MEMBER_EXPRESSION_KIND_PROPERTY_ACCESS, @@ -58,15 +57,15 @@ suite(util.basename(__filename), () => { arkts.Es2pandaScriptFunctionFlags.SCRIPT_FUNCTION_FLAGS_NONE, arkts.Es2pandaModifierFlags.MODIFIER_FLAGS_PUBLIC | arkts.Es2pandaModifierFlags.MODIFIER_FLAGS_STATIC, false, - factory.createIdentifier( + arkts.factory.createIdentifier( 'foo' ) ), false ), - factory.createExpressionStatement( - factory.createCallExpression( - factory.createIdentifier( + arkts.factory.createExpressionStatement( + arkts.factory.createCallExpression( + arkts.factory.createIdentifier( 'foo' ), undefined, @@ -104,17 +103,17 @@ suite(util.basename(__filename), () => { script, [ script.statements[0], - arkts.FunctionDeclaration.create(undefined, + arkts.factory.createFunctionDeclaration( arkts.ScriptFunction.create(undefined, - arkts.BlockStatement.create(undefined, + arkts.factory.createBlock( [ - factory.createExpressionStatement( - factory.createCallExpression( - factory.createMemberExpression( - factory.createIdentifier( + arkts.factory.createExpressionStatement( + arkts.factory.createCallExpression( + arkts.factory.createMemberExpression( + arkts.factory.createIdentifier( 'console' ), - factory.createIdentifier( + arkts.factory.createIdentifier( 'log' ), arkts.Es2pandaMemberExpressionKind.MEMBER_EXPRESSION_KIND_PROPERTY_ACCESS, @@ -123,19 +122,19 @@ suite(util.basename(__filename), () => { ), undefined, [ - factory.createIdentifier( + arkts.factory.createIdentifier( 'x' ) ] ) ), - factory.createExpressionStatement( - factory.createCallExpression( - factory.createMemberExpression( - factory.createIdentifier( + arkts.factory.createExpressionStatement( + arkts.factory.createCallExpression( + arkts.factory.createMemberExpression( + arkts.factory.createIdentifier( 'console' ), - factory.createIdentifier( + arkts.factory.createIdentifier( 'log' ), arkts.Es2pandaMemberExpressionKind.MEMBER_EXPRESSION_KIND_PROPERTY_ACCESS, @@ -144,7 +143,7 @@ suite(util.basename(__filename), () => { ), undefined, [ - factory.createIdentifier( + arkts.factory.createIdentifier( 'y' ) ] @@ -155,7 +154,7 @@ suite(util.basename(__filename), () => { arkts.FunctionSignature.create(undefined, [ arkts.ETSParameterExpression.create(undefined, - factory.createIdentifier( + arkts.factory.createIdentifier( 'x', arkts.ETSPrimitiveType.create(undefined, arkts.Es2pandaPrimitiveType.PRIMITIVE_TYPE_INT @@ -164,10 +163,10 @@ suite(util.basename(__filename), () => { undefined ), arkts.ETSParameterExpression.create(undefined, - factory.createIdentifier( + arkts.factory.createIdentifier( 'y', arkts.ETSTypeReference.create(undefined, - factory.createIdentifier( + arkts.factory.createIdentifier( 'string' ) ) @@ -182,15 +181,15 @@ suite(util.basename(__filename), () => { arkts.Es2pandaScriptFunctionFlags.SCRIPT_FUNCTION_FLAGS_NONE, arkts.Es2pandaModifierFlags.MODIFIER_FLAGS_PUBLIC | arkts.Es2pandaModifierFlags.MODIFIER_FLAGS_STATIC, false, - factory.createIdentifier( + arkts.factory.createIdentifier( 'foo' ) ), false ), - factory.createExpressionStatement( - factory.createCallExpression( - factory.createIdentifier( + arkts.factory.createExpressionStatement( + arkts.factory.createCallExpression( + arkts.factory.createIdentifier( 'foo' ), undefined, diff --git a/arkoala-arkts/libarkts/test/arkts-api/general/basic.test.ts b/arkoala-arkts/libarkts/test/arkts-api/general/basic.test.ts index ccc8ef83803e2d7c5fbcfc05ab25bfa0f8e63a8a..e6308b49ad322f8875c89a98d75ae093913e9ac9 100644 --- a/arkoala-arkts/libarkts/test/arkts-api/general/basic.test.ts +++ b/arkoala-arkts/libarkts/test/arkts-api/general/basic.test.ts @@ -1,7 +1,6 @@ import * as util from "../../test-util" import * as arkts from "../../../src/arkts-api" import * as ts from "../../../src/ts-api" -import { factory } from "../../../src/arkts-api/factory/nodeFactory" suite(util.basename(__filename), () => { test("sample-1", function() { @@ -14,8 +13,8 @@ suite(util.basename(__filename), () => { script = arkts.EtsScript.update( script, [ - factory.createExpressionStatement( - factory.createIdentifier( + arkts.factory.createExpressionStatement( + arkts.factory.createIdentifier( 'abc' ) ) diff --git a/arkoala-arkts/libarkts/test/arkts-api/import-export/import.test.ts b/arkoala-arkts/libarkts/test/arkts-api/import-export/import.test.ts index 5210efacd0d1e9c5541ebabb3fd5d3a7d15caf14..eb86699e58b4c2674244ccb6094b8eab87909f03 100644 --- a/arkoala-arkts/libarkts/test/arkts-api/import-export/import.test.ts +++ b/arkoala-arkts/libarkts/test/arkts-api/import-export/import.test.ts @@ -1,7 +1,6 @@ import * as util from "../../test-util" import * as arkts from "../../../src/arkts-api" import * as ts from "../../../src/ts-api" -import { factory } from "../../../src/arkts-api" suite(util.basename(__filename), () => { test("sample-1", function() { @@ -23,10 +22,10 @@ suite(util.basename(__filename), () => { [ arkts.ImportSpecifier.create( undefined, - factory.createIdentifier( + arkts.factory.createIdentifier( 'X' ), - factory.createIdentifier( + arkts.factory.createIdentifier( 'X' ) ) @@ -64,10 +63,10 @@ suite(util.basename(__filename), () => { [ arkts.ImportSpecifier.create( undefined, - factory.createIdentifier( + arkts.factory.createIdentifier( 'X' ), - factory.createIdentifier( + arkts.factory.createIdentifier( 'X' ) ) @@ -109,10 +108,10 @@ suite(util.basename(__filename), () => { [ arkts.ImportSpecifier.create( undefined, - factory.createIdentifier( + arkts.factory.createIdentifier( 'X' ), - factory.createIdentifier( + arkts.factory.createIdentifier( 'X' ) ) @@ -157,16 +156,15 @@ suite(util.basename(__filename), () => { script, [ script.statements[0], - arkts.FunctionDeclaration.create( + arkts.factory.updateFunctionDeclaration( functionDeclaration, arkts.ScriptFunction.create( scriptFunction, - arkts.BlockStatement.create( - undefined, + arkts.factory.createBlock( [ - factory.createExpressionStatement( + arkts.factory.createExpressionStatement( arkts.CallExpression.create( - factory.createIdentifier( + arkts.factory.createIdentifier( 'f' ), undefined,