diff --git a/README.md b/README.md index 3decaeb..e15e490 100644 --- a/README.md +++ b/README.md @@ -8,6 +8,7 @@ In additional to parsing YAML to AST, it has following features: * restoration after the errors and reporting errors as a part of AST nodes. * built-in support for `!include` tag used in RAML +* built-in support fot `!reference` tag used in Gitlab CI. ## Usage The type information below is relevant when using TypeScript, if using from JavaScript only the field/method information is relevant. @@ -17,7 +18,7 @@ The type information below is relevant when using TypeScript, if using from Java ### YAMLNode `YAMLNode` class is an ancestor for all node kinds. It's `kind` field determine node kind, one of `Kind` enum: - * `SCALAR`, `MAPPING`, `MAP`, `SEQ`, `ANCHOR_REF` or `INCLUDE_REF`. + * `SCALAR`, `MAPPING`, `MAP`, `SEQ`, `ANCHOR_REF`, `INCLUDE_REF` or `REFERENCE_REF`. After node kind is determined, it can be cast to one of the `YAMLNode` descendants types: * `YAMLScalar`, `YAMLMapping`, `YamlMap`, `YAMLSequence` or `YAMLAnchorReference`. diff --git a/src/dumper.ts b/src/dumper.ts index 85d1ecd..b97e534 100644 --- a/src/dumper.ts +++ b/src/dumper.ts @@ -227,6 +227,10 @@ function writeScalar(state, object, level) { state.dump=""+object;//FIXME return; } + if (object.indexOf("!reference")==0){ + state.dump=""+object;//FIXME + return; + } if (object.indexOf("!$$$novalue")==0){ state.dump="";//FIXME return; diff --git a/src/loader.ts b/src/loader.ts index fe4b7dd..28cf895 100644 --- a/src/loader.ts +++ b/src/loader.ts @@ -1574,7 +1574,15 @@ function composeNode(state:State, parentIndent, nodeContext, allowToSeek, allowC } if (null !== state.tag && '!' !== state.tag) { - if (state.tag=="!include"){ + if (state.tag == "!reference") { + if (!state.result) { + state.result = ast.newScalar(); + state.result.startPosition = state.position; + state.result.endPosition = state.position; + throwError(state, "!reference without value"); + } + state.result.kind = ast.Kind.REFERENCE_REF; + } else if (state.tag=="!include"){ if (!state.result){ state.result=ast.newScalar(); state.result.startPosition=state.position; diff --git a/src/yamlAST.ts b/src/yamlAST.ts index d82bc63..ddc50e6 100644 --- a/src/yamlAST.ts +++ b/src/yamlAST.ts @@ -9,7 +9,8 @@ export enum Kind{ MAP, SEQ, ANCHOR_REF, - INCLUDE_REF + INCLUDE_REF, + REFERENCE_REF } export interface YAMLDocument {