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'