Compare commits

..

No commits in common. "e4653b25350ef7f3808401ac1dab00cc3ec4c6cb" and "a9ec312792211a4c72899c1fbf807a2157e22a20" have entirely different histories.

10 changed files with 1293 additions and 1111 deletions

View file

@ -2,6 +2,10 @@ function commaSeparated(elem) {
return seq(elem, repeat(seq(",", elem)), optional(","))
}
function trailingCommaSeparated(elem) {
return repeat(seq(elem, ","))
}
module.exports = grammar({
name: "blueprint",
@ -119,11 +123,10 @@ module.exports = grammar({
"(",
choice($.select_value, $.soong_config_variable),
",",
$._select_cases,
$.select_cases,
")",
),
// FIXME: simplify with 'soong_config_variable'?
select_value: ($) => seq(
field("type", alias(
choice("product_variable", "release_variable", "variant"),
@ -134,7 +137,6 @@ module.exports = grammar({
")",
),
// FIXME
soong_config_variable: ($) => seq(
field("type", alias("soong_config_variable", $.selection_type)),
"(",
@ -149,18 +151,26 @@ module.exports = grammar({
")",
),
_select_cases: ($) => seq(
select_cases: ($) => seq(
"{",
optional(repeat(seq($.select_case, ","))),
optional(trailingCommaSeparated($.select_case)),
// default *must* be the last one, enforced at parse-time...
optional(seq($.default_case, ",")),
"}",
),
select_case: ($) => seq(
field("pattern", choice(alias("default", $.default), $._string_literal)),
field("pattern", $._string_literal),
":",
field("value", $._case_value)
),
default_case: ($) => seq(
field("pattern", "default"),
":",
field("value", $._case_value),
),
_case_value: ($) => choice(
alias("unset", $.unset),
$._expr,

View file

@ -9,22 +9,6 @@
(integer_literal ("-") @operator)
; }}}
; Punctuation {{{
[
","
":"
] @punctuation.delimiter
[
"("
")"
"["
"]"
"{"
"}"
] @punctuation.bracket
; }}}
; Literal {{{
(boolean_literal) @boolean
@ -49,21 +33,4 @@
field: (identifier) @variable.member))
; }}}
; Built-ins {{{
[
(unset)
(default)
] @variable.builtin
(selection_type) @function.builtin
; }}}
; Expressions {{{
(map_expression
(property
field: (identifier) @property))
(select_expression
"select" @keyword.conditional)
; }}}
; vim: sw=2 foldmethod=marker

68
src/grammar.json generated
View file

@ -482,7 +482,7 @@
},
{
"type": "SYMBOL",
"name": "_select_cases"
"name": "select_cases"
},
{
"type": "STRING",
@ -592,7 +592,7 @@
}
]
},
"_select_cases": {
"select_cases": {
"type": "SEQ",
"members": [
{
@ -623,6 +623,27 @@
}
]
},
{
"type": "CHOICE",
"members": [
{
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "default_case"
},
{
"type": "STRING",
"value": ","
}
]
},
{
"type": "BLANK"
}
]
},
{
"type": "STRING",
"value": "}"
@ -636,22 +657,33 @@
"type": "FIELD",
"name": "pattern",
"content": {
"type": "CHOICE",
"members": [
{
"type": "ALIAS",
"content": {
"type": "STRING",
"value": "default"
},
"named": true,
"value": "default"
},
{
"type": "SYMBOL",
"name": "_string_literal"
}
]
"type": "SYMBOL",
"name": "_string_literal"
}
},
{
"type": "STRING",
"value": ":"
},
{
"type": "FIELD",
"name": "value",
"content": {
"type": "SYMBOL",
"name": "_case_value"
}
}
]
},
"default_case": {
"type": "SEQ",
"members": [
{
"type": "FIELD",
"name": "pattern",
"content": {
"type": "STRING",
"value": "default"
}
},
{

89
src/node-types.json generated
View file

@ -177,6 +177,68 @@
"named": true,
"fields": {}
},
{
"type": "default_case",
"named": true,
"fields": {
"pattern": {
"multiple": false,
"required": true,
"types": [
{
"type": "default",
"named": false
}
]
},
"value": {
"multiple": false,
"required": true,
"types": [
{
"type": "binary_expression",
"named": true
},
{
"type": "boolean_literal",
"named": true
},
{
"type": "identifier",
"named": true
},
{
"type": "integer_literal",
"named": true
},
{
"type": "interpreted_string_literal",
"named": true
},
{
"type": "list_expression",
"named": true
},
{
"type": "map_expression",
"named": true
},
{
"type": "raw_string_literal",
"named": true
},
{
"type": "select_expression",
"named": true
},
{
"type": "unset",
"named": true
}
]
}
}
},
{
"type": "integer_literal",
"named": true,
@ -358,10 +420,6 @@
"multiple": false,
"required": true,
"types": [
{
"type": "default",
"named": true
},
{
"type": "interpreted_string_literal",
"named": true
@ -420,6 +478,25 @@
}
}
},
{
"type": "select_cases",
"named": true,
"fields": {},
"children": {
"multiple": true,
"required": false,
"types": [
{
"type": "default_case",
"named": true
},
{
"type": "select_case",
"named": true
}
]
}
},
{
"type": "select_expression",
"named": true,
@ -429,7 +506,7 @@
"required": true,
"types": [
{
"type": "select_case",
"type": "select_cases",
"named": true
},
{
@ -596,7 +673,7 @@
},
{
"type": "default",
"named": true
"named": false
},
{
"type": "escape_sequence",

2019
src/parser.c generated

File diff suppressed because it is too large Load diff

View file

@ -17,12 +17,12 @@ foo = select(release_variable("RELEASE_TEST"), {
(select_value
(selection_type)
(interpreted_string_literal))
(select_case
(interpreted_string_literal)
(interpreted_string_literal))
(select_case
(default)
(unset)))))
(select_cases
(select_case
(interpreted_string_literal)
(interpreted_string_literal))
(default_case
(unset))))))
================================================================================
Select (soong config variable)
@ -44,12 +44,13 @@ foo = select(soong_config_variable("my_namespace", "my_var"), {
(selection_type)
(interpreted_string_literal)
(interpreted_string_literal))
(select_case
(interpreted_string_literal)
(unset))
(select_case
(interpreted_string_literal)
(interpreted_string_literal)))))
(select_cases
(select_case
(interpreted_string_literal)
(unset))
(select_case
(interpreted_string_literal)
(interpreted_string_literal))))))
================================================================================
Select (no default)
@ -72,18 +73,19 @@ foo = select(variant("arch"), {
(select_value
(selection_type)
(interpreted_string_literal))
(select_case
(interpreted_string_literal)
(interpreted_string_literal))
(select_case
(interpreted_string_literal)
(interpreted_string_literal))
(select_case
(interpreted_string_literal)
(interpreted_string_literal))
(select_case
(interpreted_string_literal)
(interpreted_string_literal)))))
(select_cases
(select_case
(interpreted_string_literal)
(interpreted_string_literal))
(select_case
(interpreted_string_literal)
(interpreted_string_literal))
(select_case
(interpreted_string_literal)
(interpreted_string_literal))
(select_case
(interpreted_string_literal)
(interpreted_string_literal))))))
================================================================================
Select (no values)
@ -100,7 +102,8 @@ foo = select(variant("VARIANT"), {})
(select_expression
(select_value
(selection_type)
(interpreted_string_literal)))))
(interpreted_string_literal))
(select_cases))))
================================================================================
Select (default in wrong order)
@ -124,21 +127,22 @@ foo = select(variant("VARIANT"), {
(select_value
(selection_type)
(interpreted_string_literal))
(select_case
(interpreted_string_literal)
(interpreted_string_literal))
(select_case
(interpreted_string_literal)
(interpreted_string_literal))
(select_case
(default)
(unset))
(select_case
(interpreted_string_literal)
(interpreted_string_literal))
(select_case
(interpreted_string_literal)
(interpreted_string_literal)))))
(select_cases
(select_case
(interpreted_string_literal)
(interpreted_string_literal))
(select_case
(interpreted_string_literal)
(interpreted_string_literal))
(ERROR
(default_case
(unset)))
(select_case
(interpreted_string_literal)
(interpreted_string_literal))
(select_case
(interpreted_string_literal)
(interpreted_string_literal))))))
================================================================================
Select (no condition)
@ -159,12 +163,12 @@ foo = select(variant(), {
(select_value
(selection_type)
(MISSING raw_string_literal))
(select_case
(interpreted_string_literal)
(unset))
(select_case
(default)
(interpreted_string_literal)))))
(select_cases
(select_case
(interpreted_string_literal)
(unset))
(default_case
(interpreted_string_literal))))))
================================================================================
Select (invalid type)
@ -185,30 +189,6 @@ foo = select(some_unknown_type("CONDITION"), {
(identifier)
(identifier)
(interpreted_string_literal)
(interpreted_string_literal)
(default))
(interpreted_string_literal))
(interpreted_string_literal))
(ERROR))
================================================================================
Select as an identifier
================================================================================
select = 42
foo {
select: false,
}
--------------------------------------------------------------------------------
(source_file
(assignment
(identifier)
(operator)
(integer_literal))
(module
(identifier)
(property
(identifier)
(boolean_literal))))

View file

@ -1,14 +0,0 @@
foo = select(soong_config_variable("my_namespace", "my_var"), {
// ^ function.builtin
"foo": unset,
// ^ variable.builtin
default: select(variant("VARIANT") {}),
// <- variable.builtin
// ^ function.builtin
})
/* Assigning to builtins is conveniently not allowed at runtime */
unset = 12
// <- variable.builtin
default = 27
// <- variable.builtin

View file

@ -1,7 +0,0 @@
foo {
field: {
// <- variable.member
key: 42,
// <- property
},
}

View file

@ -1,15 +0,0 @@
foo (
// <- punctuation.bracket
bar = [
//^ punctuation.bracket
{
// <- punctuation.bracket
key: "value",
// ^ punctuation.delimiter
// ^ punctuation.delimiter
},
// <- punctuation.bracket
]
// <- punctuation.bracket
)
// <- punctuation.bracket

View file

@ -1,15 +0,0 @@
foo = select(soong_config_variable("my_namespace", "my_var"), {
// ^ keyword.conditional
"foo": unset,
default: "bar",
})
// It can still be used as a normal variable name
select = 42
// <- variable
// Or module property
foo {
select: 42,
// <- variable.member
}