Compare commits

...

6 commits

Author SHA1 Message Date
Bruno BELANYI a2cc89a55c WIP
Some checks failed
ci/woodpecker/push/check Pipeline failed
2024-04-13 18:29:41 +01:00
Bruno BELANYI fc82b7e8bf WIP(tests): Hide 'select_cases' rule
It doesn't provide any more information to expose it.
2024-04-13 18:29:35 +01:00
Bruno BELANYI 6ece5d984a Release 0.3.0
All checks were successful
ci/woodpecker/push/check Pipeline was successful
2024-04-13 18:27:56 +01:00
Bruno BELANYI e6a2757c51 Alias 'default_case' to 'select_case'
There's not much use in the node being a different name.
2024-04-13 18:23:06 +01:00
Bruno BELANYI 8db7b053f5 Add 'default' alias
This makes it appear in the tree as a named node.
2024-04-13 18:21:58 +01:00
Bruno BELANYI d297f38e6a Fix typos in indentation test runner
All checks were successful
ci/woodpecker/push/check Pipeline was successful
2024-04-13 18:17:22 +01:00
10 changed files with 108 additions and 173 deletions

View file

@ -1,7 +1,7 @@
[package]
name = "tree-sitter-bp"
description = "Blueprint grammar for the tree-sitter parsing library"
version = "0.2.0"
version = "0.3.0"
keywords = ["incremental", "parsing", "android", "blueprint"]
categories = ["parsing", "text-editors"]
repository = "https://git.belanyi.fr/ambroisie/tree-sitter-bp"

View file

@ -123,10 +123,11 @@ 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"),
@ -137,6 +138,7 @@ module.exports = grammar({
")",
),
// FIXME
soong_config_variable: ($) => seq(
field("type", alias("soong_config_variable", $.selection_type)),
"(",
@ -151,11 +153,11 @@ module.exports = grammar({
")",
),
select_cases: ($) => seq(
_select_cases: ($) => seq(
"{",
optional(trailingCommaSeparated($.select_case)),
// default *must* be the last one, enforced at parse-time...
optional(seq($.default_case, ",")),
optional(seq(alias($.default_case, $.select_case), ",")),
"}",
),
@ -166,7 +168,7 @@ module.exports = grammar({
),
default_case: ($) => seq(
field("pattern", "default"),
field("pattern", alias("default", $.default)),
":",
field("value", $._case_value),
),

View file

@ -1,6 +1,6 @@
{
"name": "tree-sitter-bp",
"version": "0.2.0",
"version": "0.3.0",
"description": "Blueprint grammar for tree-sitter",
"main": "bindings/node",
"keywords": [

View file

@ -49,7 +49,7 @@
; Built-ins {{{
[
(unset)
"default"
(default)
] @variable.builtin
(selection_type) @function.builtin
; }}}

View file

@ -11,9 +11,11 @@
(select_expression
")" @indent.branch)
(select_cases) @indent.begin
(select_cases
"}" @indent.branch)
; FIXME: how to fix this
; (select_expression
; "{" @indent.begin)
; (select_expression
; "}" @indent.branch)
; }}}
; Declarations {{{

20
src/grammar.json generated
View file

@ -487,7 +487,7 @@
},
{
"type": "SYMBOL",
"name": "select_cases"
"name": "_select_cases"
},
{
"type": "STRING",
@ -597,7 +597,7 @@
}
]
},
"select_cases": {
"_select_cases": {
"type": "SEQ",
"members": [
{
@ -635,8 +635,13 @@
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "default_case"
"type": "ALIAS",
"content": {
"type": "SYMBOL",
"name": "default_case"
},
"named": true,
"value": "select_case"
},
{
"type": "STRING",
@ -687,7 +692,12 @@
"type": "FIELD",
"name": "pattern",
"content": {
"type": "STRING",
"type": "ALIAS",
"content": {
"type": "STRING",
"value": "default"
},
"named": true,
"value": "default"
}
},

89
src/node-types.json generated
View file

@ -177,68 +177,6 @@
"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,
@ -415,6 +353,10 @@
"multiple": false,
"required": true,
"types": [
{
"type": "default",
"named": true
},
{
"type": "interpreted_string_literal",
"named": true
@ -473,25 +415,6 @@
}
}
},
{
"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,
@ -501,7 +424,7 @@
"required": true,
"types": [
{
"type": "select_cases",
"type": "select_case",
"named": true
},
{
@ -668,7 +591,7 @@
},
{
"type": "default",
"named": false
"named": true
},
{
"type": "escape_sequence",

46
src/parser.c generated
View file

@ -65,7 +65,7 @@ enum ts_symbol_identifiers {
sym_select_expression = 46,
sym_select_value = 47,
sym_soong_config_variable = 48,
sym_select_cases = 49,
sym__select_cases = 49,
sym_select_case = 50,
sym_default_case = 51,
sym__case_value = 52,
@ -78,7 +78,7 @@ enum ts_symbol_identifiers {
aux_sym__old_module_repeat1 = 59,
aux_sym__new_module_repeat1 = 60,
aux_sym_interpreted_string_literal_repeat1 = 61,
aux_sym_select_cases_repeat1 = 62,
aux_sym__select_cases_repeat1 = 62,
aux_sym_list_expression_repeat1 = 63,
};
@ -132,9 +132,9 @@ static const char * const ts_symbol_names[] = {
[sym_select_expression] = "select_expression",
[sym_select_value] = "select_value",
[sym_soong_config_variable] = "soong_config_variable",
[sym_select_cases] = "select_cases",
[sym__select_cases] = "_select_cases",
[sym_select_case] = "select_case",
[sym_default_case] = "default_case",
[sym_default_case] = "select_case",
[sym__case_value] = "_case_value",
[sym_list_expression] = "list_expression",
[sym_map_expression] = "map_expression",
@ -145,7 +145,7 @@ static const char * const ts_symbol_names[] = {
[aux_sym__old_module_repeat1] = "_old_module_repeat1",
[aux_sym__new_module_repeat1] = "_new_module_repeat1",
[aux_sym_interpreted_string_literal_repeat1] = "interpreted_string_literal_repeat1",
[aux_sym_select_cases_repeat1] = "select_cases_repeat1",
[aux_sym__select_cases_repeat1] = "_select_cases_repeat1",
[aux_sym_list_expression_repeat1] = "list_expression_repeat1",
};
@ -199,9 +199,9 @@ static const TSSymbol ts_symbol_map[] = {
[sym_select_expression] = sym_select_expression,
[sym_select_value] = sym_select_value,
[sym_soong_config_variable] = sym_soong_config_variable,
[sym_select_cases] = sym_select_cases,
[sym__select_cases] = sym__select_cases,
[sym_select_case] = sym_select_case,
[sym_default_case] = sym_default_case,
[sym_default_case] = sym_select_case,
[sym__case_value] = sym__case_value,
[sym_list_expression] = sym_list_expression,
[sym_map_expression] = sym_map_expression,
@ -212,7 +212,7 @@ static const TSSymbol ts_symbol_map[] = {
[aux_sym__old_module_repeat1] = aux_sym__old_module_repeat1,
[aux_sym__new_module_repeat1] = aux_sym__new_module_repeat1,
[aux_sym_interpreted_string_literal_repeat1] = aux_sym_interpreted_string_literal_repeat1,
[aux_sym_select_cases_repeat1] = aux_sym_select_cases_repeat1,
[aux_sym__select_cases_repeat1] = aux_sym__select_cases_repeat1,
[aux_sym_list_expression_repeat1] = aux_sym_list_expression_repeat1,
};
@ -335,7 +335,7 @@ static const TSSymbolMetadata ts_symbol_metadata[] = {
},
[anon_sym_default] = {
.visible = true,
.named = false,
.named = true,
},
[anon_sym_unset] = {
.visible = true,
@ -413,8 +413,8 @@ static const TSSymbolMetadata ts_symbol_metadata[] = {
.visible = true,
.named = true,
},
[sym_select_cases] = {
.visible = true,
[sym__select_cases] = {
.visible = false,
.named = true,
},
[sym_select_case] = {
@ -465,7 +465,7 @@ static const TSSymbolMetadata ts_symbol_metadata[] = {
.visible = false,
.named = false,
},
[aux_sym_select_cases_repeat1] = {
[aux_sym__select_cases_repeat1] = {
.visible = false,
.named = false,
},
@ -6213,7 +6213,7 @@ static const uint16_t ts_small_parse_table[] = {
STATE(12), 1,
sym_comment,
STATE(14), 1,
aux_sym_select_cases_repeat1,
aux_sym__select_cases_repeat1,
STATE(19), 1,
sym_interpreted_string_literal,
STATE(102), 1,
@ -6236,7 +6236,7 @@ static const uint16_t ts_small_parse_table[] = {
ACTIONS(41), 1,
anon_sym_RBRACE,
STATE(12), 1,
aux_sym_select_cases_repeat1,
aux_sym__select_cases_repeat1,
STATE(13), 1,
sym_comment,
STATE(19), 1,
@ -6267,7 +6267,7 @@ static const uint16_t ts_small_parse_table[] = {
anon_sym_default,
STATE(14), 2,
sym_comment,
aux_sym_select_cases_repeat1,
aux_sym__select_cases_repeat1,
[655] = 4,
ACTIONS(3), 1,
anon_sym_SLASH_SLASH,
@ -7171,7 +7171,7 @@ static const uint16_t ts_small_parse_table[] = {
STATE(81), 1,
sym_comment,
STATE(95), 1,
sym_select_cases,
sym__select_cases,
[1905] = 4,
ACTIONS(3), 1,
anon_sym_SLASH_SLASH,
@ -7687,9 +7687,9 @@ static const TSParseActionEntry ts_parse_actions[] = {
[37] = {.entry = {.count = 1, .reusable = true}}, SHIFT(112),
[39] = {.entry = {.count = 1, .reusable = true}}, SHIFT(101),
[41] = {.entry = {.count = 1, .reusable = true}}, SHIFT(100),
[43] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_select_cases_repeat1, 2),
[45] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_select_cases_repeat1, 2), SHIFT_REPEAT(19),
[48] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_select_cases_repeat1, 2), SHIFT_REPEAT(41),
[43] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym__select_cases_repeat1, 2),
[45] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym__select_cases_repeat1, 2), SHIFT_REPEAT(19),
[48] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym__select_cases_repeat1, 2), SHIFT_REPEAT(41),
[51] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_interpreted_string_literal, 2),
[53] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_interpreted_string_literal, 3),
[55] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_source_file, 1),
@ -7789,11 +7789,11 @@ static const TSParseActionEntry ts_parse_actions[] = {
[249] = {.entry = {.count = 1, .reusable = true}}, SHIFT(38),
[251] = {.entry = {.count = 1, .reusable = true}}, SHIFT(35),
[253] = {.entry = {.count = 1, .reusable = true}}, SHIFT(24),
[255] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_select_cases, 5),
[255] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__select_cases, 5),
[257] = {.entry = {.count = 1, .reusable = false}}, SHIFT(122),
[259] = {.entry = {.count = 1, .reusable = true}}, SHIFT(81),
[261] = {.entry = {.count = 1, .reusable = true}}, SHIFT(96),
[263] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_select_cases, 2),
[263] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__select_cases, 2),
[265] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3),
[267] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2),
[269] = {.entry = {.count = 1, .reusable = true}}, SHIFT(45),
@ -7805,14 +7805,14 @@ static const TSParseActionEntry ts_parse_actions[] = {
[281] = {.entry = {.count = 1, .reusable = false}}, SHIFT(121),
[283] = {.entry = {.count = 1, .reusable = true}}, ACCEPT_INPUT(),
[285] = {.entry = {.count = 1, .reusable = true}}, SHIFT(120),
[287] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_select_cases, 3),
[287] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__select_cases, 3),
[289] = {.entry = {.count = 1, .reusable = true}}, SHIFT(99),
[291] = {.entry = {.count = 1, .reusable = false}}, SHIFT(97),
[293] = {.entry = {.count = 1, .reusable = true}}, SHIFT(36),
[295] = {.entry = {.count = 1, .reusable = true}}, SHIFT(40),
[297] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_default_case, 3, .production_id = 16),
[299] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_select_case, 3, .production_id = 16),
[301] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_select_cases, 4),
[301] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__select_cases, 4),
[303] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_comment, 2),
[305] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_comment, 3),
};

View file

@ -17,12 +17,12 @@ foo = select(release_variable("RELEASE_TEST"), {
(select_value
(selection_type)
(interpreted_string_literal))
(select_cases
(select_case
(interpreted_string_literal)
(interpreted_string_literal))
(default_case
(unset))))))
(select_case
(interpreted_string_literal)
(interpreted_string_literal))
(select_case
(default)
(unset)))))
================================================================================
Select (soong config variable)
@ -44,13 +44,12 @@ foo = select(soong_config_variable("my_namespace", "my_var"), {
(selection_type)
(interpreted_string_literal)
(interpreted_string_literal))
(select_cases
(select_case
(interpreted_string_literal)
(unset))
(select_case
(interpreted_string_literal)
(interpreted_string_literal))))))
(select_case
(interpreted_string_literal)
(unset))
(select_case
(interpreted_string_literal)
(interpreted_string_literal)))))
================================================================================
Select (no default)
@ -73,19 +72,18 @@ foo = select(variant("arch"), {
(select_value
(selection_type)
(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_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)
@ -102,8 +100,7 @@ foo = select(variant("VARIANT"), {})
(select_expression
(select_value
(selection_type)
(interpreted_string_literal))
(select_cases))))
(interpreted_string_literal)))))
================================================================================
Select (default in wrong order)
@ -127,22 +124,22 @@ foo = select(variant("VARIANT"), {
(select_value
(selection_type)
(interpreted_string_literal))
(select_cases
(select_case
(interpreted_string_literal)
(interpreted_string_literal))
(select_case
(interpreted_string_literal)
(interpreted_string_literal))
(ERROR
(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))))))
(default)
(unset)))
(select_case
(interpreted_string_literal)
(interpreted_string_literal))
(select_case
(interpreted_string_literal)
(interpreted_string_literal)))))
================================================================================
Select (no condition)
@ -163,12 +160,12 @@ foo = select(variant(), {
(select_value
(selection_type)
(MISSING raw_string_literal))
(select_cases
(select_case
(interpreted_string_literal)
(unset))
(default_case
(interpreted_string_literal))))))
(select_case
(interpreted_string_literal)
(unset))
(select_case
(default)
(interpreted_string_literal)))))
================================================================================
Select (invalid type)
@ -189,7 +186,8 @@ foo = select(some_unknown_type("CONDITION"), {
(identifier)
(identifier)
(interpreted_string_literal)
(interpreted_string_literal))
(interpreted_string_literal)
(default))
(interpreted_string_literal))
(ERROR))

View file

@ -41,7 +41,7 @@ describe("indent Blueprint:", function()
runner:new_line("test/indent/select.bp", { on_line = 11, text = 'default: "value"', indent = 4 }, "default case, trailing")
runner:new_line("test/indent/select.bp", { on_line = 16, text = '"case": "value"', indent = 8 }, "select case, alternate formatting")
runner:new_line("test/indent/select.bp", { on_line = 16, text = 'default: "value"', indent = 8 }, "default case, alternate formatting")
runner:new_line("test/indent/select.bp", { on_line = 26, text = '"case": "value"', indent = 8 }, "select case, trailing, alternate formattingg")
runner:new_line("test/indent/select.bp", { on_line = 26, text = 'default: "value"', indent = 8 }, "default case, trailing, alternate formattingn")
runner:new_line("test/indent/select.bp", { on_line = 26, text = '"case": "value"', indent = 8 }, "select case, trailing, alternate formatting")
runner:new_line("test/indent/select.bp", { on_line = 26, text = 'default: "value"', indent = 8 }, "default case, trailing, alternate formatting")
end)
end)