diff --git a/src/transformations/macros/call/callMacros.ts b/src/transformations/macros/call/callMacros.ts index 256f640..9ddbe51 100644 --- a/src/transformations/macros/call/callMacros.ts +++ b/src/transformations/macros/call/callMacros.ts @@ -1,30 +1,33 @@ import { CallMacro } from "../macro"; -import { ComponentMethodMacro } from "./componentMethodMacro"; -import { DependencyMacro } from "./dependencyMacro"; -import { FlameworkAddPathsMacro } from "./flameworkAddPathsMacro"; -import { FlameworkCreateEventMacro } from "./flameworkCreateEventMacro"; -import { FlameworkCreateGuardMacro } from "./flameworkCreateGuardMacro"; -import { FlameworkHashMacro } from "./flameworkHashMacro"; -import { FlameworkIdMacro } from "./flameworkIdMacro"; -import { FlameworkImplementsMacro } from "./flameworkImplementsMacro"; -import { NetworkingConnectMacro } from "./networkingConnectMacro"; -import { NetworkingPredictMacro } from "./networkingPredictMacro"; -import { TestingPatchDependencyMacro } from "./testingPatchDependencyMacro"; +import { ComponentGetAllComponentsMacro } from "./components/getAllComponentsMacro"; +import { ComponentMethodMacro } from "./components/methodMacro"; +import { DependencyMacro } from "./core/dependencyMacro"; +import { FlameworkAddPathsMacro } from "./core/flamework/addPathsMacro"; +import { NetworkingCreateEventMacro } from "./networking/createEventMacro"; +import { FlameworkCreateGuardMacro } from "./core/flamework/createGuardMacro"; +import { FlameworkHashMacro } from "./core/flamework/hashMacro"; +import { FlameworkIdMacro } from "./core/flamework/flameworkIdMacro"; +import { FlameworkImplementsMacro } from "./core/flamework/implementsMacro"; +import { NetworkingConnectMacro } from "./networking/connectMacro"; +import { NetworkingPredictMacro } from "./networking/predictMacro"; +import { TestingPatchDependencyMacro } from "./core/flamework/testingPatchDependencyMacro"; export const CALL_MACROS = new Array( - DependencyMacro, - + // @flamework/components ComponentMethodMacro, + ComponentGetAllComponentsMacro, + // @flamework/networking NetworkingConnectMacro, NetworkingPredictMacro, + NetworkingCreateEventMacro, - TestingPatchDependencyMacro, - + // @flamework/core + DependencyMacro, FlameworkIdMacro, + FlameworkHashMacro, FlameworkAddPathsMacro, - FlameworkCreateGuardMacro, - FlameworkCreateEventMacro, FlameworkImplementsMacro, - FlameworkHashMacro, + FlameworkCreateGuardMacro, + TestingPatchDependencyMacro, ); diff --git a/src/transformations/macros/call/components/getAllComponentsMacro.ts b/src/transformations/macros/call/components/getAllComponentsMacro.ts new file mode 100644 index 0000000..01bfe4a --- /dev/null +++ b/src/transformations/macros/call/components/getAllComponentsMacro.ts @@ -0,0 +1,41 @@ +import ts from "typescript"; +import { Diagnostics } from "../../../../classes/diagnostics"; +import { f } from "../../../../util/factory"; +import { CallMacro } from "../../macro"; + +export const ComponentGetAllComponentsMacro: CallMacro = { + getSymbol(state) { + const symbols = state.symbolProvider; + if (!symbols.components) return []; + + return symbols.components.get("getAllComponents"); + }, + + transform(state, node) { + const firstType = node.typeArguments?.[0]; + if (firstType) { + if (!f.is.referenceType(firstType)) Diagnostics.error(firstType, `Expected type reference`); + + const declaration = state.getSymbol(firstType.typeName)?.declarations?.[0]; + if (!declaration) Diagnostics.error(firstType, `Could not find declaration`); + + return f.update.call(node, state.transform(node.expression), [ + f.as(f.string(state.getUid(declaration)), f.keywordType(ts.SyntaxKind.NeverKeyword)), + ]); + } else { + const specifier = node.arguments[1]; + if (!specifier) Diagnostics.error(node, `No specifier found`); + + const symbol = state.getSymbol(specifier); + if (!symbol) Diagnostics.error(specifier, `Symbol could not be found`); + if (!state.classes.has(symbol)) return state.transform(node); + + const declaration = symbol?.declarations?.[0]; + if (!declaration) Diagnostics.error(specifier, `Declaration could not be found`); + + return f.update.call(node, state.transform(node.expression), [ + f.as(f.string(state.getUid(declaration)), f.keywordType(ts.SyntaxKind.NeverKeyword)), + ]); + } + }, +}; diff --git a/src/transformations/macros/call/componentMethodMacro.ts b/src/transformations/macros/call/components/methodMacro.ts similarity index 90% rename from src/transformations/macros/call/componentMethodMacro.ts rename to src/transformations/macros/call/components/methodMacro.ts index 5ec39fd..c19bb50 100644 --- a/src/transformations/macros/call/componentMethodMacro.ts +++ b/src/transformations/macros/call/components/methodMacro.ts @@ -1,7 +1,7 @@ import ts from "typescript"; -import { Diagnostics } from "../../../classes/diagnostics"; -import { f } from "../../../util/factory"; -import { CallMacro } from "../macro"; +import { Diagnostics } from "../../../../classes/diagnostics"; +import { f } from "../../../../util/factory"; +import { CallMacro } from "../../macro"; export const ComponentMethodMacro: CallMacro = { getSymbol(state) { diff --git a/src/transformations/macros/call/dependencyMacro.ts b/src/transformations/macros/call/core/dependencyMacro.ts similarity index 90% rename from src/transformations/macros/call/dependencyMacro.ts rename to src/transformations/macros/call/core/dependencyMacro.ts index 0f07df0..6d1d6ba 100644 --- a/src/transformations/macros/call/dependencyMacro.ts +++ b/src/transformations/macros/call/core/dependencyMacro.ts @@ -1,6 +1,6 @@ -import { Diagnostics } from "../../../classes/diagnostics"; -import { f } from "../../../util/factory"; -import { CallMacro } from "../macro"; +import { Diagnostics } from "../../../../classes/diagnostics"; +import { f } from "../../../../util/factory"; +import { CallMacro } from "../../macro"; export const DependencyMacro: CallMacro = { getSymbol(state) { diff --git a/src/transformations/macros/call/flameworkAddPathsMacro.ts b/src/transformations/macros/call/core/flamework/addPathsMacro.ts similarity index 85% rename from src/transformations/macros/call/flameworkAddPathsMacro.ts rename to src/transformations/macros/call/core/flamework/addPathsMacro.ts index 3d98c5c..42f12fb 100644 --- a/src/transformations/macros/call/flameworkAddPathsMacro.ts +++ b/src/transformations/macros/call/core/flamework/addPathsMacro.ts @@ -1,9 +1,9 @@ import ts from "typescript"; import path from "path"; -import { f } from "../../../util/factory"; -import { CallMacro } from "../macro"; -import { Diagnostics } from "../../../classes/diagnostics"; -import { TransformState } from "../../../classes/transformState"; +import { f } from "../../../../../util/factory"; +import { CallMacro } from "../../../macro"; +import { Diagnostics } from "../../../../../classes/diagnostics"; +import { TransformState } from "../../../../../classes/transformState"; function getPathFromSpecifier(state: TransformState, source: ts.SourceFile, hostDir: string, specifier: string) { const sourceDir = path.dirname(source.fileName); diff --git a/src/transformations/macros/call/flameworkCreateGuardMacro.ts b/src/transformations/macros/call/core/flamework/createGuardMacro.ts similarity index 62% rename from src/transformations/macros/call/flameworkCreateGuardMacro.ts rename to src/transformations/macros/call/core/flamework/createGuardMacro.ts index 2349885..3b3e2b1 100644 --- a/src/transformations/macros/call/flameworkCreateGuardMacro.ts +++ b/src/transformations/macros/call/core/flamework/createGuardMacro.ts @@ -1,7 +1,7 @@ -import { Diagnostics } from "../../../classes/diagnostics"; -import { relocateDiagnostic } from "../../../util/diagnosticsUtils"; -import { buildGuardFromType } from "../../../util/functions/buildGuardFromType"; -import { CallMacro } from "../macro"; +import { Diagnostics } from "../../../../../classes/diagnostics"; +import { relocateDiagnostic } from "../../../../../util/diagnosticsUtils"; +import { buildGuardFromType } from "../../../../../util/functions/buildGuardFromType"; +import { CallMacro } from "../../../macro"; export const FlameworkCreateGuardMacro: CallMacro = { getSymbol(state) { diff --git a/src/transformations/macros/call/flameworkIdMacro.ts b/src/transformations/macros/call/core/flamework/flameworkIdMacro.ts similarity index 82% rename from src/transformations/macros/call/flameworkIdMacro.ts rename to src/transformations/macros/call/core/flamework/flameworkIdMacro.ts index 469dae4..d61c942 100644 --- a/src/transformations/macros/call/flameworkIdMacro.ts +++ b/src/transformations/macros/call/core/flamework/flameworkIdMacro.ts @@ -1,6 +1,6 @@ -import { Diagnostics } from "../../../classes/diagnostics"; -import { f } from "../../../util/factory"; -import { CallMacro } from "../macro"; +import { Diagnostics } from "../../../../../classes/diagnostics"; +import { f } from "../../../../../util/factory"; +import { CallMacro } from "../../../macro"; export const FlameworkIdMacro: CallMacro = { getSymbol(state) { diff --git a/src/transformations/macros/call/flameworkHashMacro.ts b/src/transformations/macros/call/core/flamework/hashMacro.ts similarity index 75% rename from src/transformations/macros/call/flameworkHashMacro.ts rename to src/transformations/macros/call/core/flamework/hashMacro.ts index 2070525..30bc4cd 100644 --- a/src/transformations/macros/call/flameworkHashMacro.ts +++ b/src/transformations/macros/call/core/flamework/hashMacro.ts @@ -1,6 +1,6 @@ -import { Diagnostics } from "../../../classes/diagnostics"; -import { f } from "../../../util/factory"; -import { CallMacro } from "../macro"; +import { Diagnostics } from "../../../../../classes/diagnostics"; +import { f } from "../../../../../util/factory"; +import { CallMacro } from "../../../macro"; export const FlameworkHashMacro: CallMacro = { getSymbol(state) { diff --git a/src/transformations/macros/call/flameworkImplementsMacro.ts b/src/transformations/macros/call/core/flamework/implementsMacro.ts similarity index 84% rename from src/transformations/macros/call/flameworkImplementsMacro.ts rename to src/transformations/macros/call/core/flamework/implementsMacro.ts index a90277c..9b9b262 100644 --- a/src/transformations/macros/call/flameworkImplementsMacro.ts +++ b/src/transformations/macros/call/core/flamework/implementsMacro.ts @@ -1,6 +1,6 @@ -import { Diagnostics } from "../../../classes/diagnostics"; -import { f } from "../../../util/factory"; -import { CallMacro } from "../macro"; +import { Diagnostics } from "../../../../../classes/diagnostics"; +import { f } from "../../../../../util/factory"; +import { CallMacro } from "../../../macro"; export const FlameworkImplementsMacro: CallMacro = { getSymbol(state) { diff --git a/src/transformations/macros/call/testingPatchDependencyMacro.ts b/src/transformations/macros/call/core/flamework/testingPatchDependencyMacro.ts similarity index 79% rename from src/transformations/macros/call/testingPatchDependencyMacro.ts rename to src/transformations/macros/call/core/flamework/testingPatchDependencyMacro.ts index 8305bc9..cbfdfdf 100644 --- a/src/transformations/macros/call/testingPatchDependencyMacro.ts +++ b/src/transformations/macros/call/core/flamework/testingPatchDependencyMacro.ts @@ -1,6 +1,6 @@ -import { Diagnostics } from "../../../classes/diagnostics"; -import { f } from "../../../util/factory"; -import { CallMacro } from "../macro"; +import { Diagnostics } from "../../../../../classes/diagnostics"; +import { f } from "../../../../../util/factory"; +import { CallMacro } from "../../../macro"; export const TestingPatchDependencyMacro: CallMacro = { getSymbol(state) { diff --git a/src/transformations/macros/call/networkingConnectMacro.ts b/src/transformations/macros/call/networking/connectMacro.ts similarity index 88% rename from src/transformations/macros/call/networkingConnectMacro.ts rename to src/transformations/macros/call/networking/connectMacro.ts index 141be57..1090b3d 100644 --- a/src/transformations/macros/call/networkingConnectMacro.ts +++ b/src/transformations/macros/call/networking/connectMacro.ts @@ -1,9 +1,9 @@ import ts from "typescript"; -import { Diagnostics } from "../../../classes/diagnostics"; -import { relocateDiagnostic } from "../../../util/diagnosticsUtils"; -import { f } from "../../../util/factory"; -import { buildGuardFromType } from "../../../util/functions/buildGuardFromType"; -import { CallMacro } from "../macro"; +import { Diagnostics } from "../../../../classes/diagnostics"; +import { relocateDiagnostic } from "../../../../util/diagnosticsUtils"; +import { f } from "../../../../util/factory"; +import { buildGuardFromType } from "../../../../util/functions/buildGuardFromType"; +import { CallMacro } from "../../macro"; export const NetworkingConnectMacro: CallMacro = { getSymbol(state) { diff --git a/src/transformations/macros/call/flameworkCreateEventMacro.ts b/src/transformations/macros/call/networking/createEventMacro.ts similarity index 91% rename from src/transformations/macros/call/flameworkCreateEventMacro.ts rename to src/transformations/macros/call/networking/createEventMacro.ts index 7ee8197..42fc5ef 100644 --- a/src/transformations/macros/call/flameworkCreateEventMacro.ts +++ b/src/transformations/macros/call/networking/createEventMacro.ts @@ -1,11 +1,11 @@ import ts from "typescript"; -import { Diagnostics } from "../../../classes/diagnostics"; -import { TransformState } from "../../../classes/transformState"; -import { f } from "../../../util/factory"; -import { buildGuardFromType } from "../../../util/functions/buildGuardFromType"; -import { CallMacro } from "../macro"; +import { Diagnostics } from "../../../../classes/diagnostics"; +import { TransformState } from "../../../../classes/transformState"; +import { f } from "../../../../util/factory"; +import { buildGuardFromType } from "../../../../util/functions/buildGuardFromType"; +import { CallMacro } from "../../macro"; -export const FlameworkCreateEventMacro: CallMacro = { +export const NetworkingCreateEventMacro: CallMacro = { getSymbol(state) { if (!state.symbolProvider.networking) return []; return state.symbolProvider.networking.get("createEvent"); diff --git a/src/transformations/macros/call/networkingPredictMacro.ts b/src/transformations/macros/call/networking/predictMacro.ts similarity index 80% rename from src/transformations/macros/call/networkingPredictMacro.ts rename to src/transformations/macros/call/networking/predictMacro.ts index 68654cf..bf4cc39 100644 --- a/src/transformations/macros/call/networkingPredictMacro.ts +++ b/src/transformations/macros/call/networking/predictMacro.ts @@ -1,6 +1,6 @@ -import { Diagnostics } from "../../../classes/diagnostics"; -import { f } from "../../../util/factory"; -import { CallMacro } from "../macro"; +import { Diagnostics } from "../../../../classes/diagnostics"; +import { f } from "../../../../util/factory"; +import { CallMacro } from "../../macro"; export const NetworkingPredictMacro: CallMacro = { getSymbol(state) {