diff --git a/.github/actions/setup-and-build/action.yaml b/.github/actions/setup-and-build/action.yaml
index 7decfdb71..2a988908d 100644
--- a/.github/actions/setup-and-build/action.yaml
+++ b/.github/actions/setup-and-build/action.yaml
@@ -11,6 +11,12 @@ runs:
echo -e "#bin/bash\njava -jar $PWD/antlr4.jar \$@" > $HOME/.local/bin/antlr4
chmod a+x $HOME/.local/bin/antlr4
+ - name: Setup java
+ uses: actions/setup-java@v4
+ with:
+ distribution: 'temurin'
+ java-version: '21'
+
- name: Setup pnpm
uses: pnpm/action-setup@v4
@@ -51,8 +57,10 @@ runs:
shell: bash
env:
NODE_OPTIONS: '--max_old_space_size=4096'
- run: pnpm build
-
+ run: |
+ pnpm build
+ rm -rf packages/intellij-extension/build
+
- name: Cache build output
if: steps.restore-cache.outputs.cache-hit != 'true'
uses: actions/cache@v4
diff --git a/.gitignore b/.gitignore
index 4aac7381c..fdaffdfd4 100644
--- a/.gitignore
+++ b/.gitignore
@@ -17,6 +17,12 @@ generated
*.tsbuildinfo
*.npmrc
benchmarks.txt
-.idea/
vite.config.ts.timestamp*
+
+### IntelliJ IDEA ###
+.idea
+*.iws
+*.iml
+*.ipr
+.intellijPlatform
.wdio-vscode-service
\ No newline at end of file
diff --git a/README.md b/README.md
index f73804767..45e367755 100644
--- a/README.md
+++ b/README.md
@@ -17,6 +17,7 @@ The project comprises several packages:
- [language-support](./packages/language-support/README.md) - The core library implementing the language support features.
- [language-server](./packages/language-server/README.md) - The language server wrapper for the `language-support` package.
- [vscode-extension](./packages/vscode-extension/README.md) - The Neo4j VS Code extension which bundles the `language-server`
+- [intellij-extension](./packages/intellij-extension/README.md) - The Neo4j Intellij plugin which bundles the `language-server`
- [react-codemirror](./packages/react-codemirror/README.md) - A set of [codemirror6](https://codemirror.net/) cypher language support plugins and a react wrapper.
- [react-codemirror-playground](./packages/react-codemirror-playground/README.md) - A playground for the codemirror integration.
- [query-tools](./packages/query-tools/README.md) - An internal package we use to manage the Neo4j connection and keep the schema (procedure names, labels, database names, etc.) up to date in the language server.
diff --git a/editor-plugin/intellij/.run/Run IDE with Plugin.run.xml b/editor-plugin/intellij/.run/Run IDE with Plugin.run.xml
deleted file mode 100644
index 7747a2940..000000000
--- a/editor-plugin/intellij/.run/Run IDE with Plugin.run.xml
+++ /dev/null
@@ -1,24 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
- true
- true
- false
-
-
-
\ No newline at end of file
diff --git a/editor-plugin/intellij/README.md b/editor-plugin/intellij/README.md
deleted file mode 100644
index fee563fc7..000000000
--- a/editor-plugin/intellij/README.md
+++ /dev/null
@@ -1,8 +0,0 @@
-# Neo4j Cypher LSP support for IntelliJ
-
-## Build and run
-
-Prerequisite: Java 21
-
-- Build the plugin via `./gradlew buildPlugin`.
-- Choose the plugin's zip archive from `build/distributions/cypher-lsp-support-.zip` when installing it manually in IntelliJ
diff --git a/package.json b/package.json
index 1d4661b31..cadc7adcc 100644
--- a/package.json
+++ b/package.json
@@ -13,6 +13,7 @@
"prepare": "husky install",
"build": "pnpm --recursive build",
"build-vscode": "pnpm --filter='neo4j-for-vscode...' build",
+ "build-intellij": "pnpm --filter='intellij-extension...' build",
"dev-codemirror": "pnpm --recursive --parallel --filter='@neo4j-cypher/react-codemirror-playground...' dev",
"dev-vscode": "pnpm --recursive --parallel --filter='neo4j-for-vscode...' dev",
"release": "pnpm build && pnpm publish -r --tag next --access=public",
diff --git a/editor-plugin/intellij/.gitignore b/packages/intellij-extension/.gitignore
similarity index 99%
rename from editor-plugin/intellij/.gitignore
rename to packages/intellij-extension/.gitignore
index 0dc4237b2..1415216c5 100644
--- a/editor-plugin/intellij/.gitignore
+++ b/packages/intellij-extension/.gitignore
@@ -1,4 +1,5 @@
.gradle
+.run
build/
!gradle/wrapper/gradle-wrapper.jar
!**/src/main/**/build/
diff --git a/editor-plugin/intellij/LICENSE.md b/packages/intellij-extension/LICENSE.md
similarity index 100%
rename from editor-plugin/intellij/LICENSE.md
rename to packages/intellij-extension/LICENSE.md
diff --git a/packages/intellij-extension/README.md b/packages/intellij-extension/README.md
new file mode 100644
index 000000000..74b9f2b1e
--- /dev/null
+++ b/packages/intellij-extension/README.md
@@ -0,0 +1,37 @@
+# Neo4j Cypher LSP support for IntelliJ
+
+## Build and run
+
+Run through the [prerequisites](../../CONTRIBUTING.md#building-the-project).
+
+You can build the plugin from the project root using [`turbo`](https://turbo.build):
+
+```
+$ npx turbo neo4j-for-intellij#build
+```
+
+`gradle` is also an option (and can be used from within IntelliJ):
+
+```
+$ cd packages/intellij-extension && ./gradlew buildPlugin
+```
+
+## Develop and test
+
+If you want to test the plugin during a development workflow, you can spin up a temporary copy
+of IntelliJ that runs with a freshly built version enabled by default:
+
+```
+$ npx turbo neo4j-for-intellij#runIde
+```
+
+...this target also exists in `gradle`:
+
+```
+$ cd packages/intellij-extension && ./gradlew runIde
+```
+
+## Installing the plugin manually
+
+From IntelliJ, open Settings > Plugins > (cog icon) > Install Plugin from disk, and browse to the jar file
+located in `packages/intellij-extension/build/distributions`.
\ No newline at end of file
diff --git a/editor-plugin/intellij/build.gradle.kts b/packages/intellij-extension/build.gradle.kts
similarity index 76%
rename from editor-plugin/intellij/build.gradle.kts
rename to packages/intellij-extension/build.gradle.kts
index 55f381d79..ee40a3803 100644
--- a/editor-plugin/intellij/build.gradle.kts
+++ b/packages/intellij-extension/build.gradle.kts
@@ -36,20 +36,26 @@ tasks {
}
prepareSandbox {
- doFirst {
- exec {
- commandLine("bash", "-c", "cd ../.. && pnpm build && cp packages/language-server/dist/cypher-language-server.js ./editor-plugin/intellij")
- }
- }
+
from(".") {
include("*.js")
- into("cypher-lsp-support")
+ into("neo4j-for-intellij")
}
}
- patchPluginXml {
- sinceBuild.set("242")
- untilBuild.set("242.*")
+ buildPlugin {
+ dependsOn(prepareSandbox)
+ }
+
+ runIde {
+ dependsOn(buildPlugin, prepareSandbox)
+
+ debugOptions {
+ enabled = false
+ port = 8000
+ server = true
+ suspend = true
+ }
}
signPlugin {
diff --git a/editor-plugin/intellij/gradle/wrapper/gradle-wrapper.jar b/packages/intellij-extension/gradle/wrapper/gradle-wrapper.jar
similarity index 100%
rename from editor-plugin/intellij/gradle/wrapper/gradle-wrapper.jar
rename to packages/intellij-extension/gradle/wrapper/gradle-wrapper.jar
diff --git a/editor-plugin/intellij/gradle/wrapper/gradle-wrapper.properties b/packages/intellij-extension/gradle/wrapper/gradle-wrapper.properties
similarity index 100%
rename from editor-plugin/intellij/gradle/wrapper/gradle-wrapper.properties
rename to packages/intellij-extension/gradle/wrapper/gradle-wrapper.properties
diff --git a/editor-plugin/intellij/gradlew b/packages/intellij-extension/gradlew
similarity index 100%
rename from editor-plugin/intellij/gradlew
rename to packages/intellij-extension/gradlew
diff --git a/editor-plugin/intellij/gradlew.bat b/packages/intellij-extension/gradlew.bat
similarity index 100%
rename from editor-plugin/intellij/gradlew.bat
rename to packages/intellij-extension/gradlew.bat
diff --git a/packages/intellij-extension/package.json b/packages/intellij-extension/package.json
new file mode 100644
index 000000000..f1bdddaa9
--- /dev/null
+++ b/packages/intellij-extension/package.json
@@ -0,0 +1,20 @@
+{
+ "name": "neo4j-for-intellij",
+ "version": "1.0.0",
+ "description": "Highlighting, completions and more for Neo4j Cypher in IntelliJ",
+ "publisher": "neo4j-extensions",
+ "author": "Neo4j Inc.",
+ "license": "Apache-2.0",
+ "preview": true,
+ "scripts": {
+ "build": "copyfiles -u 3 ../language-server/dist/cypher-language-server.js . && ./gradlew -q buildPlugin",
+ "clean": "./gradlew -q clean",
+ "runIde": "./gradlew -q runIde"
+ },
+ "dependencies": {
+ "@neo4j-cypher/language-server": "workspace:*"
+ },
+ "devDependencies": {
+ "copyfiles": "catalog:"
+ }
+}
diff --git a/editor-plugin/intellij/settings.gradle.kts b/packages/intellij-extension/settings.gradle.kts
similarity index 71%
rename from editor-plugin/intellij/settings.gradle.kts
rename to packages/intellij-extension/settings.gradle.kts
index 7e31865d6..83cb12b1c 100644
--- a/editor-plugin/intellij/settings.gradle.kts
+++ b/packages/intellij-extension/settings.gradle.kts
@@ -5,4 +5,4 @@ pluginManagement {
}
}
-rootProject.name = "cypher-lsp-support"
\ No newline at end of file
+rootProject.name = "neo4j-for-intellij"
\ No newline at end of file
diff --git a/editor-plugin/intellij/src/main/java/org/neo4j/intellij/lsp/cypherlspsupport/CypherLspServerSupportProvider.java b/packages/intellij-extension/src/main/java/org/neo4j/intellij/lsp/cypherlspsupport/CypherLspServerSupportProvider.java
similarity index 100%
rename from editor-plugin/intellij/src/main/java/org/neo4j/intellij/lsp/cypherlspsupport/CypherLspServerSupportProvider.java
rename to packages/intellij-extension/src/main/java/org/neo4j/intellij/lsp/cypherlspsupport/CypherLspServerSupportProvider.java
diff --git a/editor-plugin/intellij/src/main/java/org/neo4j/intellij/lsp/language/CypherFileType.java b/packages/intellij-extension/src/main/java/org/neo4j/intellij/lsp/language/CypherFileType.java
similarity index 100%
rename from editor-plugin/intellij/src/main/java/org/neo4j/intellij/lsp/language/CypherFileType.java
rename to packages/intellij-extension/src/main/java/org/neo4j/intellij/lsp/language/CypherFileType.java
diff --git a/editor-plugin/intellij/src/main/java/org/neo4j/intellij/lsp/language/CypherIcons.java b/packages/intellij-extension/src/main/java/org/neo4j/intellij/lsp/language/CypherIcons.java
similarity index 100%
rename from editor-plugin/intellij/src/main/java/org/neo4j/intellij/lsp/language/CypherIcons.java
rename to packages/intellij-extension/src/main/java/org/neo4j/intellij/lsp/language/CypherIcons.java
diff --git a/editor-plugin/intellij/src/main/java/org/neo4j/intellij/lsp/language/CypherLanguage.java b/packages/intellij-extension/src/main/java/org/neo4j/intellij/lsp/language/CypherLanguage.java
similarity index 66%
rename from editor-plugin/intellij/src/main/java/org/neo4j/intellij/lsp/language/CypherLanguage.java
rename to packages/intellij-extension/src/main/java/org/neo4j/intellij/lsp/language/CypherLanguage.java
index 9e6f1b986..011e92305 100644
--- a/editor-plugin/intellij/src/main/java/org/neo4j/intellij/lsp/language/CypherLanguage.java
+++ b/packages/intellij-extension/src/main/java/org/neo4j/intellij/lsp/language/CypherLanguage.java
@@ -1,11 +1,17 @@
package org.neo4j.intellij.lsp.language;
import com.intellij.lang.Language;
+import org.jetbrains.annotations.NotNull;
public class CypherLanguage extends Language {
-
public static final CypherLanguage INSTANCE = new CypherLanguage();
+
private CypherLanguage() {
super("Cypher");
}
+
+ @Override
+ public @NotNull String getDisplayName() {
+ return "Cypher";
+ }
}
diff --git a/editor-plugin/intellij/src/main/resources/META-INF/fileIcon.svg b/packages/intellij-extension/src/main/resources/META-INF/fileIcon.svg
similarity index 100%
rename from editor-plugin/intellij/src/main/resources/META-INF/fileIcon.svg
rename to packages/intellij-extension/src/main/resources/META-INF/fileIcon.svg
diff --git a/editor-plugin/intellij/src/main/resources/META-INF/plugin.xml b/packages/intellij-extension/src/main/resources/META-INF/plugin.xml
similarity index 76%
rename from editor-plugin/intellij/src/main/resources/META-INF/plugin.xml
rename to packages/intellij-extension/src/main/resources/META-INF/plugin.xml
index b4108751a..85c19369d 100644
--- a/editor-plugin/intellij/src/main/resources/META-INF/plugin.xml
+++ b/packages/intellij-extension/src/main/resources/META-INF/plugin.xml
@@ -1,7 +1,10 @@
- org.neo4j.intellij.lsp.cypher-lsp-support
+ org.neo4j.intellij.lsp.neo4j-for-intellij
- Cypher Lsp Support
+
+
+
+ Neo4j for IntelliJ
Neo4j Inc.
@@ -17,11 +20,13 @@
+
+ />
\ No newline at end of file
diff --git a/editor-plugin/intellij/src/main/resources/META-INF/pluginIcon.svg b/packages/intellij-extension/src/main/resources/META-INF/pluginIcon.svg
similarity index 100%
rename from editor-plugin/intellij/src/main/resources/META-INF/pluginIcon.svg
rename to packages/intellij-extension/src/main/resources/META-INF/pluginIcon.svg
diff --git a/editor-plugin/intellij/src/main/resources/fileTemplates/Cypher File.cypher.ft b/packages/intellij-extension/src/main/resources/fileTemplates/Cypher File.cypher.ft
similarity index 100%
rename from editor-plugin/intellij/src/main/resources/fileTemplates/Cypher File.cypher.ft
rename to packages/intellij-extension/src/main/resources/fileTemplates/Cypher File.cypher.ft
diff --git a/packages/intellij-extension/src/main/resources/fileTemplates/Cypher File.cypher.html b/packages/intellij-extension/src/main/resources/fileTemplates/Cypher File.cypher.html
new file mode 100644
index 000000000..a899e0257
--- /dev/null
+++ b/packages/intellij-extension/src/main/resources/fileTemplates/Cypher File.cypher.html
@@ -0,0 +1 @@
+This file template is used whenever you create a new Cypher file.
\ No newline at end of file
diff --git a/packages/language-server/package.json b/packages/language-server/package.json
index c11622541..ecce0328c 100644
--- a/packages/language-server/package.json
+++ b/packages/language-server/package.json
@@ -53,6 +53,6 @@
},
"devDependencies": {
"@types/lodash.debounce": "^4.0.9",
- "copyfiles": "^2.4.1"
+ "copyfiles": "catalog:"
}
}
diff --git a/packages/react-codemirror/package.json b/packages/react-codemirror/package.json
index b2d695f13..6aaf39cc2 100644
--- a/packages/react-codemirror/package.json
+++ b/packages/react-codemirror/package.json
@@ -72,7 +72,7 @@
"@types/react": "^18.0.28",
"@types/react-dom": "^18.0.11",
"@vitejs/plugin-react": "^4.3.1",
- "copyfiles": "^2.4.1",
+ "copyfiles": "catalog:",
"jsdom": "^24.1.1",
"lodash": "^4.17.21",
"playwright": "^1.51.1",
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index dbe05c7fa..b5b082507 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -6,6 +6,9 @@ settings:
catalogs:
default:
+ copyfiles:
+ specifier: ^2.4.1
+ version: 2.4.1
neo4j-driver:
specifier: 5.12.0
version: 5.12.0
@@ -69,6 +72,16 @@ importers:
specifier: ^2.1.9
version: 2.1.9(@types/node@22.15.3)(jsdom@24.1.3)
+ packages/intellij-extension:
+ dependencies:
+ '@neo4j-cypher/language-server':
+ specifier: workspace:*
+ version: link:../language-server
+ devDependencies:
+ copyfiles:
+ specifier: 'catalog:'
+ version: 2.4.1
+
packages/language-server:
dependencies:
'@neo4j-cypher/language-support':
@@ -100,7 +113,7 @@ importers:
specifier: ^4.0.9
version: 4.0.9
copyfiles:
- specifier: ^2.4.1
+ specifier: 'catalog:'
version: 2.4.1
packages/language-support:
@@ -226,7 +239,7 @@ importers:
specifier: ^4.3.1
version: 4.3.1(vite@4.5.11(@types/node@22.15.3))
copyfiles:
- specifier: ^2.4.1
+ specifier: 'catalog:'
version: 2.4.1
jsdom:
specifier: ^24.1.1
diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml
index afb0a7c63..0ec9115b1 100644
--- a/pnpm-workspace.yaml
+++ b/pnpm-workspace.yaml
@@ -4,3 +4,4 @@ packages:
catalog:
'neo4j-driver': '5.12.0'
+ 'copyfiles': '^2.4.1'