Fix image alias

This commit is contained in:
Camden Cheek 2021-05-10 17:17:50 -06:00
parent 3055288ce1
commit c281dc9daa
No known key found for this signature in database
GPG key ID: 595BFFE3A04E48B9
8 changed files with 5203 additions and 4909 deletions

21
corpus/combo.txt Normal file
View file

@ -0,0 +1,21 @@
==================
From and Copy
==================
FROM sourcegraph/alpine:3.12@sha256:ce099fbcd3cf70b338fc4cb2a4e1fa9ae847de21afdb0a849a393b87d94fb174 as libsqlite3-pcre
COPY libsqlite3-pcre-install-alpine.sh /libsqlite3-pcre-install-alpine.sh
---
(source_file
(from_instruction
(image_spec
name: (image_name)
tag: (image_tag)
digest: (image_digest))
as: (image_alias))
(copy_instruction
(path)
(path)))

View file

@ -69,5 +69,5 @@ FROM sourcegraph/alpine:3.12@sha256:ce099fbcd3cf70b338fc4cb2a4e1fa9ae847de21afdb
name: (image_name) name: (image_name)
tag: (image_tag) tag: (image_tag)
digest: (image_digest)) digest: (image_digest))
as: (name))) as: (image_alias)))

View file

@ -105,7 +105,7 @@ FROM foo/$FOO:$BAR@sha256:$BAZ AS baz$QUX
(env_spec)) (env_spec))
digest: (image_digest digest: (image_digest
(env_spec))) (env_spec)))
as: (name as: (image_alias
(env_spec)))) (env_spec))))
================== ==================

View file

@ -33,7 +33,7 @@ module.exports = grammar({
$.image_spec, $.image_spec,
optional(seq( optional(seq(
alias(/[aA][sS]/, "AS"), alias(/[aA][sS]/, "AS"),
field("as", $.name), field("as", $.image_alias),
)), )),
), ),
@ -181,7 +181,6 @@ module.exports = grammar({
$.string_array, $.string_array,
), ),
// path: $ => /[^-\[][^\s]*/,
path: $ => seq( path: $ => seq(
choice( choice(
/[^-\s]/, // cannot start with a '-' to avoid conflicts with params /[^-\s]/, // cannot start with a '-' to avoid conflicts with params
@ -240,14 +239,14 @@ module.exports = grammar({
), ),
image_name: $ => repeat1(choice( image_name: $ => repeat1(choice(
token.immediate(/[^:@\s\$]+/), token.immediate(/[^@:\s\$]+/),
$.env_spec, $.env_spec,
)), )),
image_tag: $ => seq( image_tag: $ => seq(
token.immediate(":"), token.immediate(":"),
repeat1(choice( repeat1(choice(
token.immediate(/[^\s@\$]+/), token.immediate(/[^@\s\$]+/),
$.env_spec, $.env_spec,
)) ))
), ),
@ -255,7 +254,7 @@ module.exports = grammar({
image_digest: $ => seq( image_digest: $ => seq(
token.immediate("@"), token.immediate("@"),
repeat1(choice( repeat1(choice(
token.immediate(/[^\s\$]+/), token.immediate(/[a-zA-Z0-9:]+/),
$.env_spec, $.env_spec,
)), )),
), ),
@ -267,8 +266,8 @@ module.exports = grammar({
field("value", token.immediate(/[^\s]+/)), field("value", token.immediate(/[^\s]+/)),
), ),
name: $ => repeat1(choice( image_alias: $ => repeat1(choice(
/[-a-z_]+/, /[-a-zA-Z0-9_]+/,
$.env_spec, $.env_spec,
)), )),

26
queries/highlights.scm Normal file
View file

@ -0,0 +1,26 @@
[
; "FROM"
"RUN"
"CMD"
"LABEL"
"EXPOSE"
"ENV"
"ADD"
"COPY"
"ENTRYPOINT"
"VOLUME"
"USER"
"WORKDIR"
"ARG"
"ONBUILD"
"STOPSIGNAL"
"HEALTHCHECK"
"SHELL"
] @keyword
[
":"
"@"
] @operator
(comment) @comment

View file

@ -142,7 +142,7 @@
"name": "as", "name": "as",
"content": { "content": {
"type": "SYMBOL", "type": "SYMBOL",
"name": "name" "name": "image_alias"
} }
} }
] ]
@ -1016,7 +1016,7 @@
"type": "IMMEDIATE_TOKEN", "type": "IMMEDIATE_TOKEN",
"content": { "content": {
"type": "PATTERN", "type": "PATTERN",
"value": "[^:@\\s\\$]+" "value": "[^@:\\s\\$]+"
} }
}, },
{ {
@ -1045,7 +1045,7 @@
"type": "IMMEDIATE_TOKEN", "type": "IMMEDIATE_TOKEN",
"content": { "content": {
"type": "PATTERN", "type": "PATTERN",
"value": "[^\\s@\\$]+" "value": "[^@\\s\\$]+"
} }
}, },
{ {
@ -1076,7 +1076,7 @@
"type": "IMMEDIATE_TOKEN", "type": "IMMEDIATE_TOKEN",
"content": { "content": {
"type": "PATTERN", "type": "PATTERN",
"value": "[^\\s\\$]+" "value": "[a-zA-Z0-9:]+"
} }
}, },
{ {
@ -1126,14 +1126,14 @@
} }
] ]
}, },
"name": { "image_alias": {
"type": "REPEAT1", "type": "REPEAT1",
"content": { "content": {
"type": "CHOICE", "type": "CHOICE",
"members": [ "members": [
{ {
"type": "PATTERN", "type": "PATTERN",
"value": "[-a-z_]+" "value": "[-a-zA-Z0-9_]+"
}, },
{ {
"type": "SYMBOL", "type": "SYMBOL",

View file

@ -218,7 +218,7 @@
"required": false, "required": false,
"types": [ "types": [
{ {
"type": "name", "type": "image_alias",
"named": true "named": true
} }
] ]
@ -258,6 +258,21 @@
] ]
} }
}, },
{
"type": "image_alias",
"named": true,
"fields": {},
"children": {
"multiple": true,
"required": false,
"types": [
{
"type": "env_spec",
"named": true
}
]
}
},
{ {
"type": "image_digest", "type": "image_digest",
"named": true, "named": true,
@ -384,21 +399,6 @@
} }
} }
}, },
{
"type": "name",
"named": true,
"fields": {},
"children": {
"multiple": true,
"required": false,
"types": [
{
"type": "env_spec",
"named": true
}
]
}
},
{ {
"type": "onbuild_instruction", "type": "onbuild_instruction",
"named": true, "named": true,

10004
src/parser.c

File diff suppressed because it is too large Load diff