Skip to content

Commit 09476ef

Browse files
committed
Add DotEnv
1 parent f4fc336 commit 09476ef

File tree

6 files changed

+137
-4
lines changed

6 files changed

+137
-4
lines changed

src/Highlighter.php

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
use Tempest\Highlight\Languages\Diff\DiffLanguage;
1313
use Tempest\Highlight\Languages\DocComment\DocCommentLanguage;
1414
use Tempest\Highlight\Languages\Dockerfile\DockerfileLanguage;
15+
use Tempest\Highlight\Languages\DotEnv\DotEnvLanguage;
1516
use Tempest\Highlight\Languages\Ellison\EllisonLanguage;
1617
use Tempest\Highlight\Languages\Gdscript\GdscriptLanguage;
1718
use Tempest\Highlight\Languages\Html\HtmlLanguage;
@@ -55,6 +56,7 @@ public function __construct(
5556
->addLanguage(new SqlLanguage())
5657
->addLanguage(new XmlLanguage())
5758
->addLanguage(new YamlLanguage())
59+
->addLanguage(new DotEnvLanguage())
5860
->addLanguage(new TwigLanguage());
5961
}
6062

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
<?php
2+
3+
namespace Tempest\Highlight\Languages\DotEnv;
4+
5+
use Tempest\Highlight\Languages\Base\BaseLanguage;
6+
use Tempest\Highlight\Languages\DotEnv\Patterns\DotEnvCommentPattern;
7+
use Tempest\Highlight\Languages\DotEnv\Patterns\DotEnvKeyPattern;
8+
9+
final class DotEnvLanguage extends BaseLanguage
10+
{
11+
public function getName(): string
12+
{
13+
return 'dotenv';
14+
}
15+
16+
public function getAliases(): array
17+
{
18+
return ['env'];
19+
}
20+
21+
public function getPatterns(): array
22+
{
23+
return [
24+
...parent::getPatterns(),
25+
new DotEnvKeyPattern(),
26+
new DotEnvCommentPattern(),
27+
];
28+
}
29+
}
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
<?php
2+
3+
namespace Tempest\Highlight\Languages\DotEnv\Patterns;
4+
5+
use Tempest\Highlight\IsPattern;
6+
use Tempest\Highlight\Pattern;
7+
use Tempest\Highlight\PatternTest;
8+
use Tempest\Highlight\Tokens\TokenType;
9+
use Tempest\Highlight\Tokens\TokenTypeEnum;
10+
11+
#[PatternTest(input: '# FOO=bar', output: '# FOO=bar')]
12+
final class DotEnvCommentPattern implements Pattern
13+
{
14+
use IsPattern;
15+
16+
public function getPattern(): string
17+
{
18+
return '/(?<match>\#.*)/';
19+
}
20+
21+
public function getTokenType(): TokenType
22+
{
23+
return TokenTypeEnum::COMMENT;
24+
}
25+
}
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
<?php
2+
3+
namespace Tempest\Highlight\Languages\DotEnv\Patterns;
4+
5+
use Tempest\Highlight\IsPattern;
6+
use Tempest\Highlight\Pattern;
7+
use Tempest\Highlight\PatternTest;
8+
use Tempest\Highlight\Tokens\TokenType;
9+
use Tempest\Highlight\Tokens\TokenTypeEnum;
10+
11+
#[PatternTest(input: 'FOO=bar', output: 'FOO')]
12+
final class DotEnvKeyPattern implements Pattern
13+
{
14+
use IsPattern;
15+
16+
public function getPattern(): string
17+
{
18+
return '/(?<match>[\w].*)=/';
19+
}
20+
21+
public function getTokenType(): TokenType
22+
{
23+
return TokenTypeEnum::KEYWORD;
24+
}
25+
}
Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
<?php
2+
3+
namespace Languages\DotEnv;
4+
5+
use PHPUnit\Framework\Attributes\DataProvider;
6+
use PHPUnit\Framework\TestCase;
7+
use Tempest\Highlight\Highlighter;
8+
9+
final class DotEnvLanguageTest extends TestCase
10+
{
11+
12+
#[DataProvider('data')]
13+
public function test_highlight(string $content, string $expected): void
14+
{
15+
$highlighter = new Highlighter();
16+
17+
$this->assertSame(
18+
$expected,
19+
$highlighter->parse($content, 'dotenv'),
20+
);
21+
22+
$this->assertSame(
23+
$expected,
24+
$highlighter->parse($content, 'env'),
25+
);
26+
}
27+
28+
public static function data(): array
29+
{
30+
return [
31+
[
32+
<<<ENV
33+
# Enable or disable discovery cache. Can be `true`, `partial` or `false`.
34+
DISCOVERY_CACHE=false
35+
36+
# Overwrite default log paths (null = default)
37+
DEBUG_LOG_PATH=null
38+
SERVER_LOG_PATH=null
39+
ENV,
40+
'<span class="hl-comment"># Enable or disable discovery cache. Can be `true`, `partial` or `false`.</span>
41+
<span class="hl-keyword">DISCOVERY_CACHE</span>=false
42+
43+
<span class="hl-comment"># Overwrite default log paths (null = default)</span>
44+
<span class="hl-keyword">DEBUG_LOG_PATH</span>=null
45+
<span class="hl-keyword">SERVER_LOG_PATH</span>=null',
46+
]
47+
];
48+
}
49+
}

tests/targets/test.md

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
1-
```php
2-
public function __construct(
3-
private(set) Author $author,
4-
) {}
1+
```dotenv
2+
# Enable or disable discovery cache. Can be `true`, `partial` or `false`.
3+
DISCOVERY_CACHE=false
4+
5+
# Overwrite default log paths (null = default)
6+
DEBUG_LOG_PATH=null
7+
SERVER_LOG_PATH=null
58
```

0 commit comments

Comments
 (0)