41 lines
1.3 KiB
TypeScript
41 lines
1.3 KiB
TypeScript
import { Token } from './tokenizer';
|
|
import type { RegisterOptions } from '../argparser';
|
|
export declare type AstNode = Value | LongOption | ShortOption | ShortOptions | PositionalArgument | ForcePositional;
|
|
declare type BaseAstNode<Type extends string> = {
|
|
type: Type;
|
|
index: number;
|
|
raw: string;
|
|
};
|
|
export interface LongOption extends BaseAstNode<'longOption'> {
|
|
key: string;
|
|
value?: OptionValue;
|
|
}
|
|
interface Delimiter extends BaseAstNode<'delimiter'> {
|
|
}
|
|
interface Value extends BaseAstNode<'value'> {
|
|
}
|
|
interface OptionValue extends BaseAstNode<'optionValue'> {
|
|
delimiter: Delimiter;
|
|
node: Value;
|
|
}
|
|
export interface ShortOptions extends BaseAstNode<'shortOptions'> {
|
|
options: ShortOption[];
|
|
}
|
|
export interface ShortOption extends BaseAstNode<'shortOption'> {
|
|
key: string;
|
|
value?: OptionValue;
|
|
}
|
|
export interface PositionalArgument extends BaseAstNode<'positionalArgument'> {
|
|
}
|
|
interface ForcePositional extends BaseAstNode<'forcePositional'> {
|
|
type: 'forcePositional';
|
|
}
|
|
/**
|
|
* Create an AST from a token list
|
|
*
|
|
* @param tokens A token list, coming from `tokenizer.ts`
|
|
* @param forceFlag Keys to force as flag. {@see ForceFlag} to read more about it.
|
|
*/
|
|
export declare function parse(tokens: Token[], forceFlag: RegisterOptions): AstNode[];
|
|
export {};
|