diff --git a/arkoala-arkts/libarkts/arktsconfig.json b/arkoala-arkts/libarkts/arktsconfig.json index ca68d7458acaab32eb71474c5a5375512c8a8d55..c3868f430adba4d886cc76f2b9bd0bcbdb1138db 100644 --- a/arkoala-arkts/libarkts/arktsconfig.json +++ b/arkoala-arkts/libarkts/arktsconfig.json @@ -4,11 +4,15 @@ "baseUrl": ".", "plugins": [ { - "transform": "./examples/build/src/example-parsed-transformer.js", + "transform": "./plugins/build/src/printer-plugin.js", "stage": "parsed" }, { - "transform": "./examples/build/src/example-checked-transformer.js", + "transform": "./plugins/build/src/parsed-stage-plugin.js", + "stage": "parsed" + }, + { + "transform": "./plugins/build/src/checked-stage-plugin.js", "stage": "checked" } ] diff --git a/arkoala-arkts/libarkts/package.json b/arkoala-arkts/libarkts/package.json index c6d5d739451f1e161c2cd69c31eeb1b12223387d..321065a9560601e761cdf83eafca5a9613a9a329 100644 --- a/arkoala-arkts/libarkts/package.json +++ b/arkoala-arkts/libarkts/package.json @@ -4,7 +4,8 @@ "main": "./build/src/es2panda.js", "types": "./build/src/arkts-api/index.d.ts", "exports": { - ".": "./build/src/arkts-api/index.js" + ".": "./build/src/arkts-api/index.js", + "./plugins/*": "./plugins/build/src/*.js" }, "files": [ "./build/*" @@ -20,8 +21,8 @@ "compile:native": "npm run compile:koala:interop && npm run compile:meson && npm run copy:.node", "compile:src": "npx ets-tsc -p ./tsconfig.json", "compile": "npm run compile:native && npm run compile:src", - "compile:plugin": "npx ets-tsc -p examples/tsconfig.json", - "run:js": "PANDA_SDK_PATH=../../incremental/tools/panda/node_modules/@panda/sdk node . --file ./examples/input/main.sts --arktsconfig ./arktsconfig.json --output ./build/abc/main.abc --dump-plugin-ast", + "compile:plugin": "npx ets-tsc -p plugins/tsconfig.json", + "run:js": "PANDA_SDK_PATH=../../incremental/tools/panda/node_modules/@panda/sdk node . --file ./plugins/input/main.sts --arktsconfig ./arktsconfig.json --output ./build/abc/main.abc --dump-plugin-ast", "run": "npm run compile && npm run compile:plugin && npm run run:js", "mocha": "PANDA_SDK_PATH=../../incremental/tools/panda/node_modules/@panda/sdk TS_NODE_PROJECT=./test/tsconfig.json mocha -r tsconfig-paths/register --reporter-option maxDiffSize=0", "test": "npm run compile:native && npm run mocha", diff --git a/arkoala-arkts/libarkts/playground/src/playground.cc b/arkoala-arkts/libarkts/playground/src/playground.cc index 880c12aebff808cc1d23808ea0cf09c23741ce03..8d8d7c47535be2c85a5afaec33accea496900df0 100644 --- a/arkoala-arkts/libarkts/playground/src/playground.cc +++ b/arkoala-arkts/libarkts/playground/src/playground.cc @@ -42,7 +42,7 @@ int main() { // path to config "./arktsconfig.json", // path to source - "./examples/input/main.sts", + "./plugins/input/main.sts", "--stdlib", "../../incremental/tools/panda/node_modules/@panda/sdk/ets/stdlib" }; diff --git a/arkoala-arkts/libarkts/examples/input/export.sts b/arkoala-arkts/libarkts/plugins/input/export.sts similarity index 100% rename from arkoala-arkts/libarkts/examples/input/export.sts rename to arkoala-arkts/libarkts/plugins/input/export.sts diff --git a/arkoala-arkts/libarkts/examples/input/f.sts b/arkoala-arkts/libarkts/plugins/input/f.sts similarity index 100% rename from arkoala-arkts/libarkts/examples/input/f.sts rename to arkoala-arkts/libarkts/plugins/input/f.sts diff --git a/arkoala-arkts/libarkts/examples/input/library.sts b/arkoala-arkts/libarkts/plugins/input/library.sts similarity index 100% rename from arkoala-arkts/libarkts/examples/input/library.sts rename to arkoala-arkts/libarkts/plugins/input/library.sts diff --git a/arkoala-arkts/libarkts/examples/input/main.sts b/arkoala-arkts/libarkts/plugins/input/main.sts similarity index 100% rename from arkoala-arkts/libarkts/examples/input/main.sts rename to arkoala-arkts/libarkts/plugins/input/main.sts diff --git a/arkoala-arkts/libarkts/examples/input/variable.sts b/arkoala-arkts/libarkts/plugins/input/variable.sts similarity index 100% rename from arkoala-arkts/libarkts/examples/input/variable.sts rename to arkoala-arkts/libarkts/plugins/input/variable.sts diff --git a/arkoala-arkts/libarkts/examples/src/AbstractVisitor.ts b/arkoala-arkts/libarkts/plugins/src/AbstractVisitor.ts similarity index 100% rename from arkoala-arkts/libarkts/examples/src/AbstractVisitor.ts rename to arkoala-arkts/libarkts/plugins/src/AbstractVisitor.ts diff --git a/arkoala-arkts/libarkts/examples/src/analysis-visitor.ts b/arkoala-arkts/libarkts/plugins/src/analysis-visitor.ts similarity index 100% rename from arkoala-arkts/libarkts/examples/src/analysis-visitor.ts rename to arkoala-arkts/libarkts/plugins/src/analysis-visitor.ts diff --git a/arkoala-arkts/libarkts/examples/src/builder-lambda-transformer.ts b/arkoala-arkts/libarkts/plugins/src/builder-lambda-transformer.ts similarity index 100% rename from arkoala-arkts/libarkts/examples/src/builder-lambda-transformer.ts rename to arkoala-arkts/libarkts/plugins/src/builder-lambda-transformer.ts diff --git a/arkoala-arkts/libarkts/examples/src/example-checked-transformer.ts b/arkoala-arkts/libarkts/plugins/src/checked-stage-plugin.ts similarity index 100% rename from arkoala-arkts/libarkts/examples/src/example-checked-transformer.ts rename to arkoala-arkts/libarkts/plugins/src/checked-stage-plugin.ts diff --git a/arkoala-arkts/libarkts/examples/src/component-transformer.ts b/arkoala-arkts/libarkts/plugins/src/component-transformer.ts similarity index 100% rename from arkoala-arkts/libarkts/examples/src/component-transformer.ts rename to arkoala-arkts/libarkts/plugins/src/component-transformer.ts diff --git a/arkoala-arkts/libarkts/examples/src/function-transformer.ts b/arkoala-arkts/libarkts/plugins/src/function-transformer.ts similarity index 100% rename from arkoala-arkts/libarkts/examples/src/function-transformer.ts rename to arkoala-arkts/libarkts/plugins/src/function-transformer.ts diff --git a/arkoala-arkts/libarkts/examples/src/memo-transformer.ts b/arkoala-arkts/libarkts/plugins/src/memo-transformer.ts similarity index 100% rename from arkoala-arkts/libarkts/examples/src/memo-transformer.ts rename to arkoala-arkts/libarkts/plugins/src/memo-transformer.ts diff --git a/arkoala-arkts/libarkts/examples/src/example-parsed-transformer.ts b/arkoala-arkts/libarkts/plugins/src/parsed-stage-plugin.ts similarity index 100% rename from arkoala-arkts/libarkts/examples/src/example-parsed-transformer.ts rename to arkoala-arkts/libarkts/plugins/src/parsed-stage-plugin.ts diff --git a/arkoala-arkts/libarkts/examples/src/print-visitor.ts b/arkoala-arkts/libarkts/plugins/src/print-visitor.ts similarity index 100% rename from arkoala-arkts/libarkts/examples/src/print-visitor.ts rename to arkoala-arkts/libarkts/plugins/src/print-visitor.ts diff --git a/arkoala-arkts/libarkts/plugins/src/printer-plugin.ts b/arkoala-arkts/libarkts/plugins/src/printer-plugin.ts new file mode 100644 index 0000000000000000000000000000000000000000..f9301a01824fe090d991cd6fc416ac7b0db61902 --- /dev/null +++ b/arkoala-arkts/libarkts/plugins/src/printer-plugin.ts @@ -0,0 +1,30 @@ +/* + * Copyright (c) 2022-2025 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + +import * as ts from "@koalaui/libarkts" +import { PrintVisitor } from './print-visitor' + +export interface TransformerOptions { + trace?: boolean, +} + +export default function printerTransformer( + userPluginOptions?: TransformerOptions +) { + return (node: ts.EtsScript) => { + return new PrintVisitor().visitor(node) + } +} diff --git a/arkoala-arkts/libarkts/examples/src/transformation-context.ts b/arkoala-arkts/libarkts/plugins/src/transformation-context.ts similarity index 100% rename from arkoala-arkts/libarkts/examples/src/transformation-context.ts rename to arkoala-arkts/libarkts/plugins/src/transformation-context.ts diff --git a/arkoala-arkts/libarkts/examples/src/util.ts b/arkoala-arkts/libarkts/plugins/src/util.ts similarity index 100% rename from arkoala-arkts/libarkts/examples/src/util.ts rename to arkoala-arkts/libarkts/plugins/src/util.ts diff --git a/arkoala-arkts/libarkts/examples/tsconfig.json b/arkoala-arkts/libarkts/plugins/tsconfig.json similarity index 76% rename from arkoala-arkts/libarkts/examples/tsconfig.json rename to arkoala-arkts/libarkts/plugins/tsconfig.json index 145cc7fc5930db14a6b82dd6955eebadad0d1295..d0ce6f2228dd65d7edd13be46f938c0f80e98558 100644 --- a/arkoala-arkts/libarkts/examples/tsconfig.json +++ b/arkoala-arkts/libarkts/plugins/tsconfig.json @@ -7,8 +7,9 @@ "module": "CommonJS" }, "include": [ - "./src/example-parsed-transformer.ts", - "./src/example-checked-transformer.ts", + "./src/parsed-stage-plugin.ts", + "./src/checked-stage-plugin.ts", + "./src/printer-plugin.ts", "./src/AbstractVisitor.ts", "./src/print-visitor.ts", "./src/builder-lambda-transformer.ts", diff --git a/arkoala-arkts/libarkts/src/arkts-api/static/global.ts b/arkoala-arkts/libarkts/src/arkts-api/static/global.ts index c5e19a4500374e349a52665ec81af80ef3f6ffe8..963bde426f2c8ca468698ca46471bc95f309a825 100644 --- a/arkoala-arkts/libarkts/src/arkts-api/static/global.ts +++ b/arkoala-arkts/libarkts/src/arkts-api/static/global.ts @@ -20,7 +20,7 @@ import { Es2pandaNativeModule as GeneratedEs2pandaNativeModule } from "../../gen import { initInterop, InteropNativeModule } from "../../InteropNativeModule" export default class global { - public static filePath: string = "./examples/input/main.sts" + public static filePath: string = "./plugins/input/main.sts" private static _config?: KNativePointer public static set config(config: KNativePointer) { diff --git a/arkoala-arkts/libarkts/src/es2panda.ts b/arkoala-arkts/libarkts/src/es2panda.ts index ae43bd70df87eb2816ea3520324e2009182a0491..213e71587d298bb6aa522e2a9ebf1847105ac53a 100644 --- a/arkoala-arkts/libarkts/src/es2panda.ts +++ b/arkoala-arkts/libarkts/src/es2panda.ts @@ -106,10 +106,13 @@ function invokeWithPlugins(configPath: string, filePath: string, outputPath: str } function loadPlugin(configDir: string, jsonPlugin: any) { - const plugin = jsonPlugin.transform ?? throwError(`arktsconfig plugins objects should specify transform`) + const pluginPath = jsonPlugin.transform ?? throwError(`arktsconfig plugins objects should specify transform`) /** TODO: read and pass plugin options */ const options = jsonPlugin.options ?? {} - return require(path.resolve(configDir, plugin)).default() + const plugin = (pluginPath.startsWith(".") || pluginPath.startsWith("/")) ? + path.resolve(configDir, pluginPath) : pluginPath + + return require(plugin).default() } function selectPlugins(configDir: string, plugins: any[], stage: string): ((arg: arkts.Node) => arkts.Node)|undefined { diff --git a/arkoala-arkts/libarkts/test/ts-api/demo-playground/classes.test.ts b/arkoala-arkts/libarkts/test/ts-api/demo-playground/classes.test.ts index 1bb75a7b7f9958e148e5e49bd43a296669be2f17..1665d41dd6cf235f6417ec3ee8110d50f6c07951 100644 --- a/arkoala-arkts/libarkts/test/ts-api/demo-playground/classes.test.ts +++ b/arkoala-arkts/libarkts/test/ts-api/demo-playground/classes.test.ts @@ -1,6 +1,6 @@ // import * as util from "../../test-util" // import * as ts from "../../../src/ts-api" -// import { MemoTransformer } from "../../../examples/src/memo-transformer" +// import { MemoTransformer } from "../../../plugins/src/memo-transformer" // // suite(util.basename(__filename), () => { // test.skip("stinger-node-class", function() { diff --git a/arkoala-arkts/libarkts/test/ts-api/demo-playground/memo-rewrites.test.ts b/arkoala-arkts/libarkts/test/ts-api/demo-playground/memo-rewrites.test.ts index 20f4a4eafb3da264db309ba6faf7735c9fd07ec5..8b920be82cc36b462ad57a40aa93d0efc25f368f 100644 --- a/arkoala-arkts/libarkts/test/ts-api/demo-playground/memo-rewrites.test.ts +++ b/arkoala-arkts/libarkts/test/ts-api/demo-playground/memo-rewrites.test.ts @@ -1,6 +1,6 @@ // import * as util from "../../test-util" // import * as ts from "../../../src/ts-api" -// import { MemoTransformer } from "../../../examples/src/memo-transformer" +// import { MemoTransformer } from "../../../plugins/src/memo-transformer" // // suite(util.getSuiteTitle(__filename), () => { // test.skip("function-stinger", function() { diff --git a/arkoala-arkts/libarkts/test/ts-api/visitors-and-transformers/analysis-visitor.test.ts b/arkoala-arkts/libarkts/test/ts-api/visitors-and-transformers/analysis-visitor.test.ts index 32326252573971cbd226d05a92dfb4ab172eb384..13659556534e8b36952e7a957dec94f9c5098df9 100644 --- a/arkoala-arkts/libarkts/test/ts-api/visitors-and-transformers/analysis-visitor.test.ts +++ b/arkoala-arkts/libarkts/test/ts-api/visitors-and-transformers/analysis-visitor.test.ts @@ -1,8 +1,8 @@ // import * as util from "../../test-util" // import * as ts from "../../../src/ts-api" -// import { AnalysisVisitor } from "../../../examples/src/analysis-visitor" -// import { Tracer } from "../../../examples/src/util" -// import { Rewrite } from "../../../examples/src/transformation-context" +// import { AnalysisVisitor } from "../../../plugins/src/analysis-visitor" +// import { Tracer } from "../../../plugins/src/util" +// import { Rewrite } from "../../../plugins/src/transformation-context" // // suite(util.getSuiteTitle(__filename), () => { // test("sample-1", function() { diff --git a/arkoala-arkts/libarkts/test/ts-api/visitors-and-transformers/builder-lambda-rewrite.test.ts b/arkoala-arkts/libarkts/test/ts-api/visitors-and-transformers/builder-lambda-rewrite.test.ts index 76ace986943fb4cc392cdfe95bc7b0b6205d3296..5098b3eec06e94197990ef93e5cf66d83bbf3e9c 100644 --- a/arkoala-arkts/libarkts/test/ts-api/visitors-and-transformers/builder-lambda-rewrite.test.ts +++ b/arkoala-arkts/libarkts/test/ts-api/visitors-and-transformers/builder-lambda-rewrite.test.ts @@ -1,7 +1,7 @@ // import * as util from "../../test-util" // import * as ts from "../../../src/ts-api" // import { factory } from "../../../src/ts-api" -// import { BuilderLambdaTransformer } from "../../../examples/src/builder-lambda-transformer" +// import { BuilderLambdaTransformer } from "../../../plugins/src/builder-lambda-transformer" // // suite.skip(util.getSuiteTitle(__filename), () => { // test("builder-lambda-transformer-sample-1", function() { diff --git a/arkoala-arkts/libarkts/test/ts-api/visitors-and-transformers/function-rewrite.test.ts b/arkoala-arkts/libarkts/test/ts-api/visitors-and-transformers/function-rewrite.test.ts index 0932796e5a71fa9fd496f35fb1c6777fef102e73..7375d85b7dab2fe7bbcd8b2ceeeb26b14a05198e 100644 --- a/arkoala-arkts/libarkts/test/ts-api/visitors-and-transformers/function-rewrite.test.ts +++ b/arkoala-arkts/libarkts/test/ts-api/visitors-and-transformers/function-rewrite.test.ts @@ -1,8 +1,8 @@ // import * as util from "../../test-util" // import * as ts from "../../../src/ts-api" // import global from "src/arkts-api/static/global" -// import { FunctionTransformer } from "../../../examples/src/function-transformer" -// import { PrintVisitor } from "../../../examples/src/print-visitor" +// import { FunctionTransformer } from "../../../plugins/src/function-transformer" +// import { PrintVisitor } from "../../../plugins/src/print-visitor" // // suite.skip(util.getSuiteTitle(__filename), () => { // test("function-transformer-sample-1", function() { diff --git a/arkoala-arkts/libarkts/test/ts-api/visitors-and-transformers/memo-rewrite.test.ts b/arkoala-arkts/libarkts/test/ts-api/visitors-and-transformers/memo-rewrite.test.ts index 7e8f32b06542e8e7e7caac71cf0722223fe89142..9bdc32742ee5a27a42ca0d32ed47e38c2f2c5f56 100644 --- a/arkoala-arkts/libarkts/test/ts-api/visitors-and-transformers/memo-rewrite.test.ts +++ b/arkoala-arkts/libarkts/test/ts-api/visitors-and-transformers/memo-rewrite.test.ts @@ -1,6 +1,6 @@ import * as util from "../../test-util" import * as ts from "../../../src/ts-api" -import { MemoTransformer } from "../../../examples/src/memo-transformer" +import { MemoTransformer } from "../../../plugins/src/memo-transformer" suite(util.basename(__filename), () => { test("memo-transformer-sample-1", function() { diff --git a/arkoala-arkts/libarkts/test/ts-api/visitors-and-transformers/print-visitor.test.ts b/arkoala-arkts/libarkts/test/ts-api/visitors-and-transformers/print-visitor.test.ts index 14747c33cada11dadf14cce2164d9db097e1884e..a9cd80a314a7e987a812c1b077b82dc90e7ae8b4 100644 --- a/arkoala-arkts/libarkts/test/ts-api/visitors-and-transformers/print-visitor.test.ts +++ b/arkoala-arkts/libarkts/test/ts-api/visitors-and-transformers/print-visitor.test.ts @@ -1,6 +1,6 @@ // import * as ts from "../../../src/ts-api" // import * as util from "../../test-util" -// import { PrintVisitor } from "../../../examples/src/print-visitor" +// import { PrintVisitor } from "../../../plugins/src/print-visitor" // // suite.skip(util.getSuiteTitle(__filename), () => { // test("sample-1", function() { diff --git a/arkoala-arkts/user/arktsconfig-pure-sts.json b/arkoala-arkts/user/arktsconfig-pure-sts.json index 8a930b0f02dc4fb1d57008d23ca521710a0e6401..18c1a88e0194e82d602893ba79007b2bc72b7e6d 100644 --- a/arkoala-arkts/user/arktsconfig-pure-sts.json +++ b/arkoala-arkts/user/arktsconfig-pure-sts.json @@ -12,7 +12,11 @@ }, "plugins": [ { - "transform": "../libarkts/examples/build/src/example-parsed-transformer.js", + "transform": "@koalaui/libarkts/plugins/printer-plugin", + "stage": "parsed" + }, + { + "transform": "@koalaui/libarkts/plugins/parsed-stage-plugin", "stage": "parsed" } ]