Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 7 additions & 0 deletions .gitattributes
Original file line number Diff line number Diff line change
Expand Up @@ -3,3 +3,10 @@ editors/tree-sitter-pyfun/src/parser.c linguist-generated
editors/tree-sitter-pyfun/src/tree_sitter/** linguist-generated
editors/zed/grammars/** linguist-vendored
editors/zed/*.wasm linguist-generated

# The Gradle wrapper. `gradlew` is a POSIX shell script: committed with CRLF it
# fails on Linux/macOS with a bad-interpreter error, so pin its endings. The
# `.bat` is the reverse, and the jar must never be line-ending converted.
editors/jetbrains/gradlew text eol=lf
editors/jetbrains/gradlew.bat text eol=crlf
editors/jetbrains/gradle/wrapper/gradle-wrapper.jar binary
10 changes: 8 additions & 2 deletions RELEASING.md
Original file line number Diff line number Diff line change
Expand Up @@ -23,8 +23,14 @@ that is fine or a broken install. Version numbers are cheap; that doubt is not.
(https://marketplace.visualstudio.com/manage/publishers/pyfun — the CLI auth
path is broken; do not fight it).
- **Open VSX**: `npx ovsx publish <vsix> -p $OPEN_VSX_APIKEY`.
- **JetBrains**: `gradle publishPlugin` (needs `JETBRAINS_PERMANENT_TOKEN`;
JDK 21) — but see the acceptance gate below.
- **JetBrains**: `./gradlew publishPlugin` in `editors/jetbrains/` (needs
`JETBRAINS_PERMANENT_TOKEN` and JDK 21; the wrapper fetches Gradle itself,
so nothing has to be installed) — but see the acceptance gate below. The
upload then waits on JetBrains moderation, so the plugins API keeps
reporting the previous version for a while; that is not a failed publish.
**Use the wrapper, never a bare `gradle`** — Gradle is not installed on the
dev machine, and each release that reached for it lost time rediscovering
that.
4. Verify: `pip install "pyfun-lang[jupyter]==X.Y.Z"` in a clean venv, then
`pip install -U "pyfun-lang[jupyter]"` in the day-to-day Python env so the
Jupyter kernel is not stranded on the previous compiler.
Expand Down
9 changes: 5 additions & 4 deletions ROADMAP.md
Original file line number Diff line number Diff line change
Expand Up @@ -334,10 +334,11 @@ registry (PR to zed-industries/extensions), and consider shipping Helix indent/t
32915) is live (`editors/jetbrains/`, thin: file type + TextMate grammar + LSP4IJ wiring, free
mode + legacy CE, 2024.2+). At **0.4.0** (2026-08-02, verified against the plugins API — the
earlier "0.4.0 is not uploaded yet" note was stale, as the "awaiting moderation" one had been
before it; check the API rather than this line). **0.5.0 is owed.** Acceptance is granted, so
nothing gates it but the toolchain: `gradle publishPlugin` needs JDK 21 **and Gradle**, and
Gradle is not installed on the dev machine (there is no wrapper in `editors/jetbrains/`, so
`gradle` must come from PATH). Adding a Gradle wrapper would make this scriptable like Open VSX.
before it; check the API rather than this line). **0.5.0 uploaded 2026-08-02 and is awaiting
moderation** — the API lists approved versions only, so it will read 0.4.0 until that clears.
`editors/jetbrains/` now has a **committed Gradle wrapper**: `./gradlew publishPlugin` (JDK 21 +
`JETBRAINS_PERMANENT_TOKEN`) needs nothing installed, because Gradle is *not* on this machine and
two releases running lost time rediscovering that before reaching for a bare `gradle`.
- **VS Code Marketplace** — accepted and live as `pyfun.pyfun`, at **0.4.0** (2026-08-02, verified
against the gallery API; **0.5.0 is owed** — the vsix is built at
`editors/vscode/pyfun-0.5.0.vsix` and attached to the GitHub release). The **only surface that cannot be scripted**: the vsix is uploaded by
Expand Down
11 changes: 6 additions & 5 deletions editors/jetbrains/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,12 +11,13 @@ installing this plugin auto-installs LSP4IJ as a dependency.

## Build

Requires JDK 21. From this directory:
Requires JDK 21. Gradle itself does not need installing: the committed wrapper
downloads the pinned version on first use. From this directory:

```bash
gradle buildPlugin # -> build/distributions/pyfun-jetbrains-<version>.zip
gradle runIde # launch a sandbox IDE with the plugin for testing
gradle verifyPluginStructure
./gradlew buildPlugin # -> build/distributions/pyfun-jetbrains-<version>.zip
./gradlew runIde # launch a sandbox IDE with the plugin for testing
./gradlew verifyPluginStructure
```

## Publish
Expand All @@ -27,4 +28,4 @@ gradle verifyPluginStructure
select the zip, license **Apache-2.0**, category **Programming Language**.
Moderation takes ~1–3 business days.
- **Every later release**: bump `version` in `build.gradle.kts`, then
`JETBRAINS_PERMANENT_TOKEN=<token> gradle publishPlugin`.
`JETBRAINS_PERMANENT_TOKEN=<token> ./gradlew publishPlugin`.
Binary file not shown.
7 changes: 7 additions & 0 deletions editors/jetbrains/gradle/wrapper/gradle-wrapper.properties
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-8.12-bin.zip
networkTimeout=10000
validateDistributionUrl=true
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
251 changes: 251 additions & 0 deletions editors/jetbrains/gradlew

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Loading