diff --git a/src/Languages/Dockerfile/DockerfileLanguage.php b/src/Languages/Dockerfile/DockerfileLanguage.php index a81ae4d..2ecb249 100644 --- a/src/Languages/Dockerfile/DockerfileLanguage.php +++ b/src/Languages/Dockerfile/DockerfileLanguage.php @@ -6,11 +6,14 @@ use Override; use Tempest\Highlight\Languages\Base\BaseLanguage; +use Tempest\Highlight\Languages\Dockerfile\Patterns\CommentPattern; +use Tempest\Highlight\Languages\Dockerfile\Patterns\DoubleQuoteValuePattern; use Tempest\Highlight\Languages\Dockerfile\Patterns\ImageAliasKeywordPattern; use Tempest\Highlight\Languages\Dockerfile\Patterns\ImageAliasNamePattern; use Tempest\Highlight\Languages\Dockerfile\Patterns\ImageNamePattern; use Tempest\Highlight\Languages\Dockerfile\Patterns\ImageTagPattern; use Tempest\Highlight\Languages\Dockerfile\Patterns\KeywordPattern; +use Tempest\Highlight\Languages\Dockerfile\Patterns\SingleQuoteValuePattern; class DockerfileLanguage extends BaseLanguage { @@ -54,6 +57,9 @@ public function getPatterns(): array new ImageAliasKeywordPattern(), new ImageAliasNamePattern(), new ImageTagPattern(), + new SingleQuoteValuePattern(), + new DoubleQuoteValuePattern(), + new CommentPattern(), ]; } } diff --git a/src/Languages/Dockerfile/Patterns/CommentPattern.php b/src/Languages/Dockerfile/Patterns/CommentPattern.php new file mode 100644 index 0000000..1822c43 --- /dev/null +++ b/src/Languages/Dockerfile/Patterns/CommentPattern.php @@ -0,0 +1,27 @@ +\#.*)/'; + } + + public function getTokenType(): TokenType + { + return TokenTypeEnum::COMMENT; + } +} diff --git a/src/Languages/Dockerfile/Patterns/DoubleQuoteValuePattern.php b/src/Languages/Dockerfile/Patterns/DoubleQuoteValuePattern.php new file mode 100644 index 0000000..8dbebe0 --- /dev/null +++ b/src/Languages/Dockerfile/Patterns/DoubleQuoteValuePattern.php @@ -0,0 +1,27 @@ +"(\\\"|.)*?")'; + } + + public function getTokenType(): TokenTypeEnum + { + return TokenTypeEnum::VALUE; + } +} diff --git a/src/Languages/Dockerfile/Patterns/SingleQuoteValuePattern.php b/src/Languages/Dockerfile/Patterns/SingleQuoteValuePattern.php new file mode 100644 index 0000000..3d5e93f --- /dev/null +++ b/src/Languages/Dockerfile/Patterns/SingleQuoteValuePattern.php @@ -0,0 +1,26 @@ +'(\\\'|.)*?')"; + } + + public function getTokenType(): TokenTypeEnum + { + return TokenTypeEnum::VALUE; + } +} diff --git a/tests/Languages/Dockerfile/DockerfileLanguageTest.php b/tests/Languages/Dockerfile/DockerfileLanguageTest.php new file mode 100644 index 0000000..409672a --- /dev/null +++ b/tests/Languages/Dockerfile/DockerfileLanguageTest.php @@ -0,0 +1,35 @@ +assertSame( + $expected, + $highlighter->parse($content, 'dockerfile'), + ); + } + + public static function provide_highlight_cases(): iterable + { + return [ + ['FROM python:3.13', 'FROM python:3.13'], + ['FROM php AS stage-one', 'FROM php AS stage-one'], + ['WORKDIR /usr/local/app', 'WORKDIR /usr/local/app'], + ['CMD ["node", "./src/index.js"]', 'CMD ["node", "./src/index.js"]'], + ["CMD ['php', 'index.php']", 'CMD [\'php\', \'index.php\']'], + ['# This is a comment', '# This is a comment'], + ]; + } +} diff --git a/tests/targets/dockerfile.md b/tests/targets/dockerfile.md new file mode 100644 index 0000000..7ee5abc --- /dev/null +++ b/tests/targets/dockerfile.md @@ -0,0 +1,18 @@ +```dockerfile +FROM python:3.13 +WORKDIR /usr/local/app + +# Install the application dependencies +COPY requirements.txt ./ +RUN pip install --no-cache-dir -r requirements.txt + +# Copy in the source code +COPY src ./src +EXPOSE 8080 + +# Setup an app user so the container doesn't run as the root user +RUN useradd app +USER app + +CMD ["uvicorn", "app.main:app", "--host", "0.0.0.0", "--port", "8080"] +``` \ No newline at end of file