diff --git a/CHANGELOG.md b/CHANGELOG.md
index caf7b573..2fb5e23c 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -4,6 +4,9 @@
## Unreleased
+### Added
+- Added pest file creation support
+
## 1.9.3 - 2023-05-31
### Fixed
diff --git a/gradle.properties b/gradle.properties
index 08446997..e91ad0d2 100644
--- a/gradle.properties
+++ b/gradle.properties
@@ -3,7 +3,7 @@
pluginGroup = com.pestphp
pluginName = PEST PHP
-pluginVersion = 1.9.3
+pluginVersion = 1.10.0-EAP.1
# See https://plugins.jetbrains.com/docs/intellij/build-number-ranges.html
# for insight into build numbers and IntelliJ Platform versions.
diff --git a/src/main/kotlin/com/pestphp/pest/templates/PestConfigNewFileAction.kt b/src/main/kotlin/com/pestphp/pest/templates/PestConfigNewFileAction.kt
new file mode 100644
index 00000000..21f872dc
--- /dev/null
+++ b/src/main/kotlin/com/pestphp/pest/templates/PestConfigNewFileAction.kt
@@ -0,0 +1,96 @@
+package com.pestphp.pest.templates
+
+import com.intellij.ide.actions.CreateFileFromTemplateAction
+import com.intellij.ide.actions.CreateFileFromTemplateDialog
+import com.intellij.ide.fileTemplates.FileTemplate
+import com.intellij.openapi.actionSystem.*
+import com.intellij.openapi.project.Project
+import com.intellij.psi.PsiDirectory
+import com.intellij.psi.PsiFile
+import com.pestphp.pest.PestIcons
+
+
+class PestConfigNewFileAction :
+ CreateFileFromTemplateAction() {
+
+ override fun isAvailable(dataContext: DataContext): Boolean {
+ val view = LangDataKeys.IDE_VIEW.getData(dataContext)
+ var psiDir: PsiDirectory? = null
+ if (view != null) {
+ val directories = view.directories
+ if (directories.size == 1) {
+ psiDir = directories[0]
+ }
+ }
+
+ if (psiDir == null || !psiDir.isValid) {
+ return false
+ }
+
+ val virtualDir = psiDir.virtualFile
+ if (!virtualDir.isValid || !virtualDir.isDirectory) {
+ return false
+ }
+
+ return virtualDir.path.contains("tests")
+ }
+
+ override fun buildDialog(project: Project, directory: PsiDirectory, builder: CreateFileFromTemplateDialog.Builder) {
+ builder
+ .setTitle("Create Pest Test File")
+ .addKind("It", PestIcons.FILE, "Pest It")
+ .addKind("Test", PestIcons.FILE, "Pest Test")
+ .addKind("Shared dataset", PestIcons.DATASET_FILE, "Pest Shared Dataset")
+ .addKind("Scoped dataset", PestIcons.DATASET_FILE, "Pest Scoped Dataset")
+ }
+
+ override fun getActionName(directory: PsiDirectory?, newName: String, templateName: String?): String {
+ return "Pest Test"
+ }
+
+ override fun createFileFromTemplate(name: String?, template: FileTemplate, dir: PsiDirectory): PsiFile {
+ if (template.name == "Pest Shared Dataset") {
+ // find parent directory named "tests"
+ var parentDir = dir
+ while (parentDir.name != "tests") {
+ parentDir = parentDir.parentDirectory ?: break
+ }
+
+ val datasetDir = parentDir.findSubdirectory("Datasets")
+ ?: parentDir.createSubdirectory("Datasets")
+
+ // Check if first character is lowercase in name
+ var newName = name
+ if (name!![0].isLowerCase()) {
+ newName = name.replaceFirstChar { it.uppercase() }
+ }
+
+ return createFileFromTemplate(
+ newName,
+ template,
+ datasetDir,
+ defaultTemplateProperty,
+ true,
+ mapOf("DATASET_NAME" to name.replaceFirstChar { it.lowercase() })
+ )!!
+ }
+
+ if (template.name == "Pest Scoped Dataset") {
+ return createFileFromTemplate(
+ "Datasets",
+ template,
+ dir,
+ defaultTemplateProperty,
+ true,
+ mapOf("DATASET_NAME" to name!!.replaceFirstChar { it.lowercase() })
+ )!!
+ }
+
+ var testName = name
+ if (!name!!.endsWith("test", true)) {
+ testName = "${name}Test"
+ }
+
+ return super.createFileFromTemplate(testName, template, dir)
+ }
+}
diff --git a/src/main/resources/META-INF/plugin.xml b/src/main/resources/META-INF/plugin.xml
index a7690b18..bccf4a91 100644
--- a/src/main/resources/META-INF/plugin.xml
+++ b/src/main/resources/META-INF/plugin.xml
@@ -115,6 +115,10 @@
description="Whether custom expectation file generation should happen."
key="pestphp.custom-expectations"
/>
+
+
+
+
@@ -134,6 +138,11 @@
-
+
+
+
\ No newline at end of file
diff --git a/src/main/resources/fileTemplates/internal/Pest It.php.ft b/src/main/resources/fileTemplates/internal/Pest It.php.ft
new file mode 100644
index 00000000..57266d0a
--- /dev/null
+++ b/src/main/resources/fileTemplates/internal/Pest It.php.ft
@@ -0,0 +1,6 @@
+