Skip to content

Commit 6bfc9f8

Browse files
committed
Add image tag highlighting support
1 parent 4ff1533 commit 6bfc9f8

File tree

4 files changed

+37
-2
lines changed

4 files changed

+37
-2
lines changed

src/Languages/Dockerfile/DockerfileLanguage.php

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
use Tempest\Highlight\Languages\Dockerfile\Patterns\ImageAliasKeywordPattern;
99
use Tempest\Highlight\Languages\Dockerfile\Patterns\ImageAliasNamePattern;
1010
use Tempest\Highlight\Languages\Dockerfile\Patterns\ImageNamePattern;
11+
use Tempest\Highlight\Languages\Dockerfile\Patterns\ImageTagPattern;
1112
use Tempest\Highlight\Languages\Dockerfile\Patterns\KeywordPattern;
1213

1314
class DockerfileLanguage extends BaseLanguage
@@ -42,6 +43,7 @@ public function getPatterns(): array
4243
new ImageNamePattern(),
4344
new ImageAliasKeywordPattern(),
4445
new ImageAliasNamePattern(),
46+
new ImageTagPattern(),
4547
];
4648
}
4749
}

src/Languages/Dockerfile/Patterns/ImageAliasKeywordPattern.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,6 @@ public function getPattern(): string
2424

2525
public function getTokenType(): TokenTypeEnum
2626
{
27-
return TokenTypeEnum::VALUE;
27+
return TokenTypeEnum::KEYWORD;
2828
}
2929
}

src/Languages/Dockerfile/Patterns/ImageNamePattern.php

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,14 +12,16 @@
1212
#[PatternTest(input: 'FROM php', output: 'php')]
1313
#[PatternTest(input: ' FROM php', output: 'php')]
1414
#[PatternTest(input: 'FROM php:8.1', output: 'php')]
15+
#[PatternTest(input: 'FROM php/cli:8.1', output: 'php/cli')]
1516
#[PatternTest(input: 'FROM php:8.1 AS stage-one', output: 'php')]
17+
1618
final readonly class ImageNamePattern implements Pattern
1719
{
1820
use IsPattern;
1921

2022
public function getPattern(): string
2123
{
22-
return "/^[\s]*FROM[\s](?<match>[\w]+)/m";
24+
return "/^[\s]*FROM[\s](?<match>[\w\/]+)/m";
2325
}
2426

2527
public function getTokenType(): TokenTypeEnum
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace Tempest\Highlight\Languages\Dockerfile\Patterns;
6+
7+
use Tempest\Highlight\IsPattern;
8+
use Tempest\Highlight\Pattern;
9+
use Tempest\Highlight\PatternTest;
10+
use Tempest\Highlight\Tokens\TokenTypeEnum;
11+
12+
#[PatternTest(input: 'FROM php', output: null)]
13+
#[PatternTest(input: 'FROM php', output: null)]
14+
#[PatternTest(input: 'FROM php:8.1', output: '8.1')]
15+
#[PatternTest(input: 'FROM php/cli:8.1', output: '8.1')]
16+
#[PatternTest(input: 'FROM php:8.1 AS stage-one', output: '8.1')]
17+
18+
final readonly class ImageTagPattern implements Pattern
19+
{
20+
use IsPattern;
21+
22+
public function getPattern(): string
23+
{
24+
return "/^[\s]*FROM[\s][\w\/]+:(?<match>\S+)[\s]?/m";
25+
}
26+
27+
public function getTokenType(): TokenTypeEnum
28+
{
29+
return TokenTypeEnum::VALUE;
30+
}
31+
}

0 commit comments

Comments
 (0)