95
96
private get _parsedHeader(): ParsedHeader {
98
>
const yamlErrors: YamlParseError[] = [];
99
>
const headerContent = this.linesWithEOL.slice(this.range.startLineNumber - 1, this.range.endLineNumber - 1).join('');
100
>
const node = parse(headerContent, yamlErrors);
101
>
const transformer = new PositionOffsetTransformer(headerContent);
102
>
const asRange = ({ startOffset, endOffset }: { startOffset: number; endOffset: number }): Range => {
103
>
const startPos = transformer.getPosition(startOffset), endPos = transformer.getPosition(endOffset);
104
>
const headerDelta = this.range.startLineNumber - 1;
105
>
return new Range(startPos.lineNumber + headerDelta, startPos.column, endPos.lineNumber + headerDelta, endPos.column);
106
>
};
107
>
const asValue = (node: YamlNode): IValue => {
108
>
switch (node.type) {
109
>
case 'scalar':
110
>
return { type: 'scalar', value: node.value, range: asRange(node), format: node.format };
111
>
case 'sequence':
112
return { type: 'sequence', items: node.items.map(item => asValue(item)), range: asRange(node) };
114
const properties = node.properties.map(property => ({ key: asValue(property.key) as IScalarValue, value: asValue(property.value) }));
115
return { type: 'map', properties, range: asRange(node) };
116
}
118
>
};
119
>
120
>
const attributes = [];
121
>
const errors: ParseError[] = yamlErrors.map(err => ({ message: err.message, range: asRange(err), code: err.code }));
122
>
if (node) {
123
>
if (node.type !== 'map') {
124
errors.push({ message: 'Invalid header, expecting <key: value> pairs', range: this.range, code: 'INVALID_YAML' });
126
>
for (const property of node.properties) {
127
>
attributes.push({
128
>
key: property.key.value,
129
>
range: asRange({ startOffset: property.key.startOffset, endOffset: property.value.endOffset }),
130
>
value: asValue(property.value)
131
>
});
132
>
}
133
>
}
134
>
}
135
>
this._parsed = { node, attributes, errors };
136
>
}
137
>
return this._parsed;
138
>
}
139
140
public get attributes(): IHeaderAttribute[] {