diff --git a/.gitattributes b/.gitattributes
index 6462e41..c1e4760 100644
--- a/.gitattributes
+++ b/.gitattributes
@@ -1,15 +1,17 @@
*.abnf text eol=crlf
+*.php text eol=lf
-/tests export-ignore
-/doc/grammars export-ignore
-/build-cs export-ignore
+.github export-ignore
+build-cs export-ignore
+doc/grammars export-ignore
+tests export-ignore
+tmp export-ignore
+.editorconfig export-ignore
.gitattributes export-ignore
.gitignore export-ignore
-.editorconfig export-ignore
-.github export-ignore
-build.xml export-ignore
-phpcs.xml export-ignore
-build.xml export-ignore
-phpstan.neon export-ignore
build-abnfgen.sh export-ignore
CODE_OF_CONDUCT.md export-ignore
+Makefile export-ignore
+phpcs.xml export-ignore
+phpstan.neon export-ignore
+phpunit.xml export-ignore
diff --git a/.gitignore b/.gitignore
index c67023c..dab6983 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,5 +1,6 @@
/temp
/tools
+/tests/tmp
/vendor
-
-/composer.lock
+composer.lock
+.phpunit.result.cache
diff --git a/Makefile b/Makefile
new file mode 100644
index 0000000..d0daa77
--- /dev/null
+++ b/Makefile
@@ -0,0 +1,30 @@
+.PHONY: check
+check: build-abnfgen lint cs tests phpstan
+
+.PHONY: tests
+tests:
+ php vendor/bin/phpunit
+
+.PHONY: lint
+lint:
+ php vendor/bin/parallel-lint --colors \
+ src tests \
+ --exclude tests/PHPStan/Analyser/data \
+ --exclude tests/PHPStan/Rules/Methods/data \
+ --exclude tests/PHPStan/Rules/Functions/data
+
+.PHONY: cs
+cs:
+ composer install --working-dir build-cs && php build-cs/vendor/bin/phpcs
+
+.PHONY: cs-fix
+cs-fix:
+ php build-cs/vendor/bin/phpcbf
+
+.PHONY: phpstan
+phpstan:
+ php vendor/bin/phpstan analyse -l 5 -c phpstan.neon src tests
+
+.PHONY: build-abnfgen
+build-abnfgen:
+ ./build-abnfgen.sh
diff --git a/build.xml b/build.xml
deleted file mode 100644
index 0471610..0000000
--- a/build.xml
+++ /dev/null
@@ -1,136 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/composer.json b/composer.json
index e187ef2..2f08f4d 100644
--- a/composer.json
+++ b/composer.json
@@ -6,7 +6,6 @@
"php": "^7.1 || ^8.0"
},
"require-dev": {
- "phing/phing": "^2.16.3",
"php-parallel-lint/php-parallel-lint": "^1.2",
"phpstan/extension-installer": "^1.0",
"phpstan/phpstan": "^0.12.60",
diff --git a/phpcs.xml b/phpcs.xml
index 7088821..f50b458 100644
--- a/phpcs.xml
+++ b/phpcs.xml
@@ -1,6 +1,14 @@
+
+
+
+
+
+
+ src
+ tests
diff --git a/phpunit.xml b/phpunit.xml
new file mode 100644
index 0000000..6d50fc8
--- /dev/null
+++ b/phpunit.xml
@@ -0,0 +1,36 @@
+
+
+
+
+ ./src
+
+
+
+
+
+
+
+
+
+ tests
+
+
+
+
+
diff --git a/tests/phpunit.xml b/tests/phpunit.xml
deleted file mode 100644
index f476295..0000000
--- a/tests/phpunit.xml
+++ /dev/null
@@ -1,17 +0,0 @@
-
-
-
- PHPStan
-
-
-
diff --git a/tmp/.gitignore b/tmp/.gitignore
new file mode 100644
index 0000000..37890ca
--- /dev/null
+++ b/tmp/.gitignore
@@ -0,0 +1,3 @@
+*
+!cache
+!.*
diff --git a/tmp/cache/.gitignore b/tmp/cache/.gitignore
new file mode 100644
index 0000000..125e342
--- /dev/null
+++ b/tmp/cache/.gitignore
@@ -0,0 +1,2 @@
+*
+!.*