-
Notifications
You must be signed in to change notification settings - Fork 12.9k
Closed
Labels
Domain: Completion ListsThe issue relates to showing completion lists in an editorThe issue relates to showing completion lists in an editorExperience EnhancementNoncontroversial enhancementsNoncontroversial enhancementsHelp WantedYou can do thisYou can do thisSuggestionAn idea for TypeScriptAn idea for TypeScript
Milestone
Description
Bug Report
I encountered this bug while adding autocomplete support for ArkType. The goal is for completions to behave the same way whether they are parsed at an object key like type({a: "string|"})
or via a shallow string definition like type("string|")
.
However, autocompletions for expressions like these unexpectedly fail for the shallow case despite succeeding when defined in an object.
🔎 Search Terms
completions, autocomplete, strings, expressions, parsing, arktype
🕗 Version & Regression Information
- This is the behavior in every version I tried
⏯ Playground Link
Playground link with relevant code
💻 Code
type keyword = "foo" | "bar" | "baz"
type validateString<s> = s extends keyword
? s
: s extends `${infer left extends keyword}|${infer right}`
? right extends keyword
? s
: `${left}|${keyword}`
: keyword
type isUnknown<t> = unknown extends t
? [t] extends [{}]
? false
: true
: false
type validate<def> = def extends string
? validateString<def>
: isUnknown<def> extends true
? keyword
: {
[k in keyof def]: validate<def[k]>
}
const parse = <def>(def: validate<def>) => def
// typing "f" autocompletes to "foo"
const shallowKeyword = parse("foo")
// typing "foo|b" does not autocomplete but yields the following type error if left incomplete:
// Argument of type '"foo|b"' is not assignable to parameter of type '"foo|foo" | "foo|bar" | "foo|baz"'
// @ts-expect-error
const shallowExpression = parse("foo|b")
// typing "f" autocompletes to "foo"
const deepKeyword = parse({ k: "foo" })
// typing "foo|b" autocompletes to "foo|bar" | "foo|baz"
const deepExpression = parse({ k: "foo|bar" })
Metadata
Metadata
Assignees
Labels
Domain: Completion ListsThe issue relates to showing completion lists in an editorThe issue relates to showing completion lists in an editorExperience EnhancementNoncontroversial enhancementsNoncontroversial enhancementsHelp WantedYou can do thisYou can do thisSuggestionAn idea for TypeScriptAn idea for TypeScript