diff --git a/src/transformation/utils/diagnostics.ts b/src/transformation/utils/diagnostics.ts index d7b7b6467..2c1a6793d 100644 --- a/src/transformation/utils/diagnostics.ts +++ b/src/transformation/utils/diagnostics.ts @@ -177,3 +177,5 @@ export const annotationDeprecated = createWarningDiagnosticFactory( `'@${kind}' is deprecated and will be removed in a future update. Please update your code before upgrading to the next release, otherwise your project will no longer compile. ` + `See https://typescripttolua.github.io/docs/advanced/compiler-annotations#${kind.toLowerCase()} for more information.` ); + +export const optionalChainingNotSupported = createErrorDiagnosticFactory("Optional chaining is not supported yet."); diff --git a/src/transformation/visitors/access.ts b/src/transformation/visitors/access.ts index 6cf61a62c..d33c5c5c6 100644 --- a/src/transformation/visitors/access.ts +++ b/src/transformation/visitors/access.ts @@ -3,7 +3,7 @@ import * as lua from "../../LuaAST"; import { transformBuiltinPropertyAccessExpression } from "../builtins"; import { FunctionVisitor, TransformationContext } from "../context"; import { AnnotationKind, getTypeAnnotations } from "../utils/annotations"; -import { invalidMultiReturnAccess } from "../utils/diagnostics"; +import { invalidMultiReturnAccess, optionalChainingNotSupported } from "../utils/diagnostics"; import { addToNumericExpression } from "../utils/lua-ast"; import { LuaLibFeature, transformLuaLibFunction } from "../utils/lualib"; import { isArrayType, isNumberType, isStringType } from "../utils/typescript"; @@ -63,6 +63,10 @@ export const transformPropertyAccessExpression: FunctionVisitor { + if (ts.isOptionalChain(expression)) { + context.diagnostics.push(optionalChainingNotSupported(expression)); + } + const constEnumValue = tryGetConstEnumValue(context, expression); if (constEnumValue) { return constEnumValue; diff --git a/test/unit/optionalChaining.spec.ts b/test/unit/optionalChaining.spec.ts new file mode 100644 index 000000000..33d0802db --- /dev/null +++ b/test/unit/optionalChaining.spec.ts @@ -0,0 +1,9 @@ +import { optionalChainingNotSupported } from "../../src/transformation/utils/diagnostics"; +import * as util from "../util"; + +test("Diagnostic optional chaining is not supported yet", () => { + util.testFunction` + let func = (value: number) => value != 0 ? {value} : undefined; + return func(1)?.value; + `.expectToHaveDiagnostics([optionalChainingNotSupported.code]); +});