import { writeUnresolvableMessage, type BaseRoot, type GenericAst, type GenericRoot, type arkKind, type genericParamNames, type resolvableReferenceIn, type writeNonSubmoduleDotMessage } from "@ark/schema"; import { type BigintLiteral, type NumberLiteral, type Scanner, type join, type lastOf } from "@ark/util"; import type { ArkAmbient } from "../../../config.ts"; import type { resolutionToAst } from "../../../scope.ts"; import type { GenericInstantiationAst } from "../../ast/generic.ts"; import type { InferredAst } from "../../ast/infer.ts"; import { writePrefixedPrivateReferenceMessage } from "../../ast/validate.ts"; import type { RuntimeState } from "../../reduce/dynamic.ts"; import type { StaticState, s } from "../../reduce/static.ts"; import type { BaseCompletions } from "../../string.ts"; import { type TerminatingChar } from "../tokens.ts"; import { parseGenericArgs, writeInvalidGenericArgCountMessage, type ParsedArgs } from "./genericArgs.ts"; export declare const parseUnenclosed: (s: RuntimeState) => void; export type parseUnenclosed = Scanner.shiftUntil extends (Scanner.shiftResult) ? tryResolve extends s.from ? s : never : never; type parseResolution = resolutionToAst extends infer ast ? ast extends GenericAst ? parseGenericInstantiation, $, args> : s.setRoot : never; export declare const parseGenericInstantiation: (name: string, g: GenericRoot, s: RuntimeState) => BaseRoot; export type parseGenericInstantiation = Scanner.skipWhitespace extends `<${infer unscanned}` ? parseGenericArgs extends infer result ? result extends ParsedArgs ? s.setRoot, nextUnscanned> : result : never : s.error, [ ]>>; type tryResolve = token extends keyof args ? parseResolution : token extends keyof $ ? parseResolution : token extends keyof ArkAmbient.$ ? parseResolution : `#${token}` extends keyof $ ? parseResolution : token extends NumberLiteral ? s.setRoot, unscanned> : token extends (`${infer submodule extends keyof $ & string}.${infer reference}`) ? tryResolveSubmodule : token extends (`${infer submodule extends keyof ArkAmbient.$ & string}.${infer reference}`) ? tryResolveSubmodule : token extends BigintLiteral ? s.setRoot, unscanned> : token extends "keyof" ? s.addPrefix : unresolvableState; type tryResolveSubmodule = resolution extends { [arkKind]: "module"; } ? reference extends keyof resolution ? parseResolution : reference extends (`${infer nestedSubmodule extends keyof resolution & string}.${infer nestedReference}`) ? tryResolveSubmodule : unresolvableState : s.error>>; /** Provide valid completions for the current token, or fallback to an * unresolvable error if there are none */ export type unresolvableState = [ token, s["unscanned"] ] extends ["", Scanner.shift<"#", infer unscanned>] ? Scanner.shiftUntil extends (Scanner.shiftResult) ? s.error> : never : validReferenceFromToken extends (never) ? s.error>> : s.completion<`${s["scanned"]}${qualifiedReference, submodulePath>}`>; type qualifiedReference = join<[...submodulePath, reference], ".">; type validReferenceFromToken = Extract : resolvableReferenceIn<$>, `${token}${string}`>; export declare const writeMissingOperandMessage: (s: RuntimeState) => string; export type writeMissingRightOperandMessage = `Token '${token}' requires a right operand${unscanned extends "" ? "" : ` before '${unscanned}'`}`; export declare const writeMissingRightOperandMessage: (token: token, unscanned?: unscanned) => writeMissingRightOperandMessage; export declare const writeExpressionExpectedMessage: (unscanned: unscanned) => writeExpressionExpectedMessage; export type writeExpressionExpectedMessage = `Expected an expression${unscanned extends "" ? "" : ` before '${unscanned}'`}`; export {};