Extract pragmas from comment blocks too

master
Paul Loyd 2017-10-29 10:38:58 +03:00
parent bdf2cb227e
commit 58243998cb
1 changed files with 23 additions and 15 deletions

View File

@ -38,7 +38,7 @@ const handlers = {
return null;
}
let type = node.leadingComments && getLastPragma(node.leadingComments);
let type = node.leadingComments && extractLastPragma(node.leadingComments);
return {
name: extract(node.key),
@ -74,7 +74,7 @@ const handlers = {
let type = null;
if (node.leadingComments) {
type = getLastPragma(node.leadingComments);
type = extractLastPragma(node.leadingComments);
}
if (!type) {
@ -183,19 +183,11 @@ const handlers = {
},
CommentLine(node) {
const marker = '$avro ';
return extractPragma(node.value);
},
const value = node.value.trimLeft();
if (value.startsWith(marker)) {
const pragma = value.slice(marker.length).trim();
assert(isValidPragma(pragma));
return pragma;
}
return null;
CommentBlock(node) {
return extractPragma(node.value);
},
};
@ -217,7 +209,7 @@ function isValidPragma(pragma) {
}
}
function getLastPragma(comments) {
function extractLastPragma(comments) {
const pragmas = comments
.map(extract)
.filter(Boolean);
@ -225,6 +217,22 @@ function getLastPragma(comments) {
return pragmas.length > 0 ? pragmas[pragmas.length - 1] : null;
}
function extractPragma(text) {
const marker = '$avro ';
const value = text.trimLeft();
if (value.startsWith(marker)) {
const pragma = value.slice(marker.length).trim();
assert(isValidPragma(pragma));
return pragma;
}
return null;
}
function isEnumSymbol(node) {
return node.type === 'StringLiteralTypeAnnotation';
}