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', ''],
+ ];
+ }
+}
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