You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
191 lines
4.4 KiB
191 lines
4.4 KiB
import { Type, YAMLSyntaxError } from './util' |
|
|
|
export default function parseCST(str: string): ParsedCST |
|
|
|
export interface ParsedCST extends Array<CST.Document> { |
|
setOrigRanges(): boolean |
|
} |
|
|
|
export namespace CST { |
|
interface Range { |
|
start: number |
|
end: number |
|
origStart?: number |
|
origEnd?: number |
|
isEmpty(): boolean |
|
} |
|
|
|
interface ParseContext { |
|
/** Node starts at beginning of line */ |
|
atLineStart: boolean |
|
/** true if currently in a collection context */ |
|
inCollection: boolean |
|
/** true if currently in a flow context */ |
|
inFlow: boolean |
|
/** Current level of indentation */ |
|
indent: number |
|
/** Start of the current line */ |
|
lineStart: number |
|
/** The parent of the node */ |
|
parent: Node |
|
/** Source of the YAML document */ |
|
src: string |
|
} |
|
|
|
interface Node { |
|
context: ParseContext | null |
|
/** if not null, indicates a parser failure */ |
|
error: YAMLSyntaxError | null |
|
/** span of context.src parsed into this node */ |
|
range: Range | null |
|
valueRange: Range | null |
|
/** anchors, tags and comments */ |
|
props: Range[] |
|
/** specific node type */ |
|
type: Type |
|
/** if non-null, overrides source value */ |
|
value: string | null |
|
|
|
readonly anchor: string | null |
|
readonly comment: string | null |
|
readonly hasComment: boolean |
|
readonly hasProps: boolean |
|
readonly jsonLike: boolean |
|
readonly rangeAsLinePos: null | { |
|
start: { line: number; col: number } |
|
end?: { line: number; col: number } |
|
} |
|
readonly rawValue: string | null |
|
readonly tag: |
|
| null |
|
| { verbatim: string } |
|
| { handle: string; suffix: string } |
|
readonly valueRangeContainsNewline: boolean |
|
} |
|
|
|
interface Alias extends Node { |
|
type: Type.ALIAS |
|
/** contain the anchor without the * prefix */ |
|
readonly rawValue: string |
|
} |
|
|
|
type Scalar = BlockValue | PlainValue | QuoteValue |
|
|
|
interface BlockValue extends Node { |
|
type: Type.BLOCK_FOLDED | Type.BLOCK_LITERAL |
|
chomping: 'CLIP' | 'KEEP' | 'STRIP' |
|
blockIndent: number | null |
|
header: Range |
|
readonly strValue: string | null |
|
} |
|
|
|
interface BlockFolded extends BlockValue { |
|
type: Type.BLOCK_FOLDED |
|
} |
|
|
|
interface BlockLiteral extends BlockValue { |
|
type: Type.BLOCK_LITERAL |
|
} |
|
|
|
interface PlainValue extends Node { |
|
type: Type.PLAIN |
|
readonly strValue: string | null |
|
} |
|
|
|
interface QuoteValue extends Node { |
|
type: Type.QUOTE_DOUBLE | Type.QUOTE_SINGLE |
|
readonly strValue: |
|
| null |
|
| string |
|
| { str: string; errors: YAMLSyntaxError[] } |
|
} |
|
|
|
interface QuoteDouble extends QuoteValue { |
|
type: Type.QUOTE_DOUBLE |
|
} |
|
|
|
interface QuoteSingle extends QuoteValue { |
|
type: Type.QUOTE_SINGLE |
|
} |
|
|
|
interface Comment extends Node { |
|
type: Type.COMMENT |
|
readonly anchor: null |
|
readonly comment: string |
|
readonly rawValue: null |
|
readonly tag: null |
|
} |
|
|
|
interface BlankLine extends Node { |
|
type: Type.BLANK_LINE |
|
} |
|
|
|
interface MapItem extends Node { |
|
type: Type.MAP_KEY | Type.MAP_VALUE |
|
node: ContentNode | null |
|
} |
|
|
|
interface MapKey extends MapItem { |
|
type: Type.MAP_KEY |
|
} |
|
|
|
interface MapValue extends MapItem { |
|
type: Type.MAP_VALUE |
|
} |
|
|
|
interface Map extends Node { |
|
type: Type.MAP |
|
/** implicit keys are not wrapped */ |
|
items: Array<BlankLine | Comment | Alias | Scalar | MapItem> |
|
} |
|
|
|
interface SeqItem extends Node { |
|
type: Type.SEQ_ITEM |
|
node: ContentNode | null |
|
} |
|
|
|
interface Seq extends Node { |
|
type: Type.SEQ |
|
items: Array<BlankLine | Comment | SeqItem> |
|
} |
|
|
|
interface FlowChar { |
|
char: '{' | '}' | '[' | ']' | ',' | '?' | ':' |
|
offset: number |
|
origOffset?: number |
|
} |
|
|
|
interface FlowCollection extends Node { |
|
type: Type.FLOW_MAP | Type.FLOW_SEQ |
|
items: Array< |
|
FlowChar | BlankLine | Comment | Alias | Scalar | FlowCollection |
|
> |
|
} |
|
|
|
interface FlowMap extends FlowCollection { |
|
type: Type.FLOW_MAP |
|
} |
|
|
|
interface FlowSeq extends FlowCollection { |
|
type: Type.FLOW_SEQ |
|
} |
|
|
|
type ContentNode = Alias | Scalar | Map | Seq | FlowCollection |
|
|
|
interface Directive extends Node { |
|
type: Type.DIRECTIVE |
|
name: string |
|
readonly anchor: null |
|
readonly parameters: string[] |
|
readonly tag: null |
|
} |
|
|
|
interface Document extends Node { |
|
type: Type.DOCUMENT |
|
directives: Array<BlankLine | Comment | Directive> |
|
contents: Array<BlankLine | Comment | ContentNode> |
|
readonly anchor: null |
|
readonly comment: null |
|
readonly tag: null |
|
} |
|
}
|
|
|