{"id":51183353,"url":"https://github.com/mmhelloworld/idris-intellij","last_synced_at":"2026-06-27T08:30:52.109Z","repository":{"id":365855732,"uuid":"1267831366","full_name":"mmhelloworld/idris-intellij","owner":"mmhelloworld","description":"Intellij Plugin for Idris","archived":false,"fork":false,"pushed_at":"2026-06-19T06:58:14.000Z","size":6599,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-06-19T08:28:11.715Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Kotlin","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/mmhelloworld.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-06-12T22:39:56.000Z","updated_at":"2026-06-19T06:58:18.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/mmhelloworld/idris-intellij","commit_stats":null,"previous_names":["mmhelloworld/idris-intellij"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/mmhelloworld/idris-intellij","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mmhelloworld%2Fidris-intellij","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mmhelloworld%2Fidris-intellij/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mmhelloworld%2Fidris-intellij/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mmhelloworld%2Fidris-intellij/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/mmhelloworld","download_url":"https://codeload.github.com/mmhelloworld/idris-intellij/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mmhelloworld%2Fidris-intellij/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34847287,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-27T02:00:06.362Z","response_time":126,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2026-06-27T08:30:51.307Z","updated_at":"2026-06-27T08:30:52.103Z","avatar_url":"https://github.com/mmhelloworld.png","language":"Kotlin","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Idris 2 (JVM) — IntelliJ Plugin\n\nIntelliJ IDEA support for [Idris 2](https://www.idris-lang.org/), talking\ndirectly to the compiler's IDE-mode protocol. Built for (and tested against)\nthe [JVM backend](https://github.com/mmhelloworld/idris-jvm), but works with\nany `idris2` build that speaks ide-mode protocol version 2.\n\n## Features\n\n- Syntax highlighting: instant lexical highlighting plus the compiler's own\n  semantic highlighting (types, functions, data constructors, bound variables)\n  after each successful load\n- Compiler diagnostics with precise spans, refreshed when the file is saved;\n  build progress is shown in the status bar, and long first-time builds are\n  fine — the compiler session only times out after sustained silence (idle\n  timeout), not on total duration\n- Quick documentation: the symbol's doc comment together with its type\n  signature, totality and visibility (`:type-of` + `:docs-for`), resolved to\n  the exact symbol under the caret rather than every same-named definition\n- Go-to-definition across modules (semantic cache + `:name-at`)\n- File outline in the Structure tool window and the ⌘F12 File Structure popup;\n  selecting a declaration jumps the editor to it\n- Code folding for declarations, breadcrumbs showing the nested path to the\n  caret (e.g. a function and its `where`-local), and highlight-usages (⌘F7) of\n  the identifier under the caret\n- Code completion backed by `:repl-completions`\n- Type-driven interactive editing via Alt-Enter intentions:\n  case split, add clause, proof search (with \"next solution\" cycling),\n  generate definition (also cyclable), make lemma, make case, make with,\n  introduce constructor, refine hole with an expression\n- Holes tool window listing each hole's type and context, refreshed on every\n  load; double-click navigates to the hole\n- Idris REPL tool window multiplexed over the same compiler session\n- Literate Idris (`.lidr`, bird-track style) with prose-aware highlighting\n\nKnown limitation: the ide-mode protocol has no rename and no position-based\nfind-references, so those are not offered.\n\n## Feature tour\n\nCompiler diagnostics with precise spans, refreshed on save — including the\ncompiler's \"did you mean\" hints on hover:\n\n![Compiler diagnostics](docs/images/diagnostics.gif)\n\nQuick documentation on the symbol under the caret - the full doc comment\nalongside the type signature, totality and visibility:\n\n![Quick documentation](docs/images/quick-doc.png)\n\nGo-to-definition across modules:\n\n![Go to definition](docs/images/goto-def.gif)\n\nFile navigation by declaration — the Structure tool window lists a file's\ndeclarations and clicking one jumps the editor there; the ⌘F12 File Structure\npopup does the same with type-to-filter and keyboard selection:\n\n![Structure view and File Structure popup](docs/images/structure-nav.gif)\n\nCode folding, breadcrumbs, and highlight usages — highlight every occurrence of\nthe name under the caret (⌘F7), watch the breadcrumb show the nested path to the\ncaret (here `stMain › quitWithError`), and collapse the file to an outline of\nits declarations:\n\n![Code folding, breadcrumbs and highlight usages](docs/images/folding-breadcrumbs-usages.gif)\n\nCode completion backed by the compiler's `:repl-completions`:\n\n![Code completion](docs/images/completion.gif)\n\nType-driven editing with Alt-Enter intentions — case split on a pattern\nvariable:\n\n![Case split](docs/images/case-split.gif)\n\n…and proof search to fill a hole:\n\n![Proof search](docs/images/proof-search.gif)\n\nThe Holes tool window lists each hole with its type and context; double-click\njumps to the hole:\n\n![Holes tool window](docs/images/holes.gif)\n\nAn Idris REPL multiplexed over the same compiler session:\n\n![Idris REPL](docs/images/repl.gif)\n\n## Setup\n\n1. Install the plugin, then set the `idris2` executable under\n   **Settings | Languages \u0026 Frameworks | Idris 2**. For the JVM backend point\n   it at `\u003cidris-jvm\u003e/exec/idris2` (release zip) or\n   `\u003cidris-jvm\u003e/build/exec/idris2` (source build). `JAVA_OPTS` is honored by\n   that launcher script. **JVM backend builds must be 0.8.3 or newer**\n   (available from\n   [GitHub releases](https://github.com/mmhelloworld/idris-jvm/releases) and\n   Maven Central) — older JVM builds have a blocking-`fEOF` runtime bug that\n   stalls ide-mode replies (see docs/PROTOCOL.md), and the plugin refuses to\n   start against them; Scheme-built compilers of any version are fine.\n2. Open any project containing `.idr` files. The plugin spawns one\n   `idris2 --ide-mode` process per `.ipkg` root (falling back to the content\n   root) and loads files as you open/save them.\n\n## Development\n\n- `./gradlew build` — build + unit tests (protocol codec, fake-server\n  connection tests, lexer)\n- `IDRIS2_EXEC=/path/to/idris2 ./gradlew test` — additionally runs integration\n  tests against a real compiler\n- `./gradlew runIde` — launch a sandbox IDE (2024.2, the oldest supported\n  platform); open the `sample/` project\n- `./gradlew runIdeLatest` — same, but on the newest IntelliJ IDEA (2026.1;\n  the unified distribution that replaced IDEA Community since 2025.3)\n- `./gradlew verifyPlugin` — plugin verifier\n\n### Signing and publishing\n\nMarketplace uploads must be signed. Generate a key pair once:\n\n```sh\nopenssl genpkey -aes-256-cbc -algorithm RSA -out private.pem -pkeyopt rsa_keygen_bits:4096\nopenssl req -key private.pem -new -x509 -days 365 -out chain.crt\n```\n\nthen export the credentials and sign/publish:\n\n```sh\nexport CERTIFICATE_CHAIN=\"$(cat chain.crt)\"\nexport PRIVATE_KEY=\"$(cat private.pem)\"\nexport PRIVATE_KEY_PASSWORD=...   # the passphrase chosen above\nexport PUBLISH_TOKEN=...          # from Marketplace profile | My Tokens\n\n./gradlew signPlugin     # produces build/distributions/\u003cname\u003e-signed.zip\n./gradlew publishPlugin  # signs implicitly, then uploads\n```\n\nNote: `./gradlew verifyPluginSignature` is broken in IntelliJ Platform Gradle\nPlugin 2.16.0 when the chain comes from `CERTIFICATE_CHAIN` (it mangles the\nCLI arguments; exit value 64). Verify directly with the zip-signer CLI\ninstead:\n\n```sh\njava -cp ~/.gradle/caches/modules-2/files-2.1/org.jetbrains/marketplace-zip-signer/*/*/marketplace-zip-signer-*-cli.jar \\\n  org.jetbrains.zip.signer.ZipSigningTool verify \\\n  -in build/distributions/idris-intellij-\u003cversion\u003e-signed.zip -cert chain.crt\n```\n\nThe wire-protocol notes shared with future clients (VS Code) live in\n[docs/PROTOCOL.md](docs/PROTOCOL.md). The `protocol/` package has no IntelliJ\ndependencies by design.\n\n## License\n\n[BSD-3-Clause](LICENSE), same as\n[idris-jvm](https://github.com/mmhelloworld/idris-jvm).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmmhelloworld%2Fidris-intellij","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmmhelloworld%2Fidris-intellij","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmmhelloworld%2Fidris-intellij/lists"}