Releases: vindevoy/code-focus
Code Focus 1.0.1
Releases Code Focus 1.0.1 — intermediate bugfix release on top of 1.0.0.
pluginVersion = 1.0.1. No new features, no behaviour changes outside the four fixes below, no compatibility change. PyCharm Community / Professional, builds 251 → 261.* (PyCharm 2025.1 → 2026.1) — same as 1.0.0.
What's fixed
Five issues went into this release. Four behaviour fixes plus the version/CHANGELOG bump.
#52 — Blank lines absorbed around collapsed folds
Fold regions created by Show Comments, Show Logging Lines, and Show Imports now absorb the blank line(s) immediately above and below the folded range. The collapsed > placeholder no longer leaves orphaned blank lines around it. Mid-line ranges (code # inline) still pin to the original start. Implementation extracts the previously-duplicated expandRange helpers into a shared FoldExpansion.expand(document, range, previousFoldEnd) so adjacent folds processed in document order don't race for the same blank line.
#57 — Toggle bar font matches editor tab font
Seven JBFont.small() → JBFont.label() swaps across the five toggles plus Re-Apply and Format. JBFont.small() is ~2 pt smaller than the default UI label font that the editor tabs use, which produced the visible mismatch in the toggle bar. Fix was already at the right size (no explicit font set, inherited the default), so this brings the other seven into line.
#59 — Toggle pill and knob rounded to match buttons
Five toggles bumped their Pill.paintComponent arc from JBUI.scale(2) to JBUI.scale(6) — the same arc the buttons (Re-Apply, Format, Fix) already use. The knob shares the same arc variable so it picks up the new rounding too. Eliminates the "amateur" near-square pill look.
#60 — Stripped diagnostic LOG.warn flood
19 leftover LOG.warn(...) calls in ShowLoggingLinesToggle (plus the four counter vars that fed the summary log, the Logger companion field, and the corresponding import) removed. They had been added during #47's debugging and never reverted; they fired at WARN level on every editor open / toggle flip / settings-driven re-fold and filled idea.log with [CodeFocus] applyToEditor: ... noise. Net diff: 84 lines removed, 10 added. No behaviour change — every conditional return and fold-creation path still does what it did before.
#61 — Version + CHANGELOG bump
pluginVersion 1.0.0 → 1.0.1 in gradle.properties. CHANGELOG restructured: added [1.0.1] listing the four fixes above, retroactive [1.0.0] pointing at the v1.0.0 GitLab release page, empty [Unreleased] placeholder for post-1.0.1 work.
Compatibility
Unchanged from 1.0.0:
- PyCharm Community or Professional, builds
251→261.*. pluginSinceBuild = 251,pluginUntilBuild = 261.*.com.intellij.modules.platform,com.intellij.modules.python.- No new dependencies.
Verification
./gradlew ktlintCheck testis green ondevelop../gradlew clean buildPluginproducesbuild/distributions/code-focus-1.0.1.zip(~100 KB).- Visual confirmation of #52 / #57 / #59 done in real PyCharm during review of the contributing MRs (!53, !54, !55).
- All seven existing toggle integration suites pass with the new behaviour, including the comprehensive
test.pyreal-fixture tests and the two new issue-52 regression tests.
Code Focus 1.0.0
Releases Code Focus 1.0.0 — first user-installable version of the plugin.
48 issues closed under milestone 1.0.0, 141 commits since main. The build artifact (code-focus-1.0.0.zip) installs cleanly into a real PyCharm Community / Professional via Settings → Plugins → ⚙ → Install Plugin from Disk….
What ships in 1.0.0
The toggle bar (above every .py editor)
Five independent toggles + two action buttons. State is per-file and persisted across IDE restarts. Each toggle drives the editor's real folding model (no overlay), so collapsed regions interact correctly with the rest of PyCharm.
- Show Comments —
#5,#7. Folds consecutive#comments. - Show Logging Lines —
#20,#47. Folds lines matching a configurable list of substrings (logger.,logging.getLogger,LoggerFactory,import logging,from logging import,logger =). The list is editable in Settings → Tools → Code Focus and re-applies live on Apply. - Show Blank Lines —
#16. Collapses runs of blank lines. - Show Line Numbers —
#18. Toggles the editor's line-number gutter for the current file. - Show Imports —
#21. Folds theimport/from … import …block at the top of the file. - Re-Apply —
#19. Forces all toggles to re-evaluate against the current file content. - Format —
#39. Runsruff formaton the current file (uses the project.venvfirst, thenPATH). - Fix —
#40. Runsruff check --fixon the current file.
UI polish from #39, #46: toggle pills sized off the editor-tab font, label spacing tightened, button corners rounded, "Show " prefix dropped from labels for compactness.
Settings screen — #47
Settings → Tools → Code Focus with an editable list of substrings used by the logging-lines toggle. Plain String.contains (no regex), so users don't need to know regex syntax. State is application-level via PersistentStateComponent. Editor notifications refresh on Apply so the toggle bar picks up the new patterns immediately.
Tooling and dev-loop ergonomics
- Project setup (
#1) — Gradle 9.4.1, Kotlin 2.1.20, JDK 21, IntelliJ Platform Gradle Plugin 2.14.0, JUnit 5 + JUnit 4 (forBasePlatformTestCase). - ktlint (
#4) on pre-commit, fullcheck+teston pre-push (hooks underhooks/). - Platform tests (
#29) — fiveBasePlatformTestCasesuites (one per toggle) booting a real IDE headlessly and asserting againsteditor.foldingModel.allFoldRegions. - uv-managed Python venv (
#41) —resources/python/setup-uv-env.fishprovisions.venvwithruff, used by the Format/Fix buttons and as the PyCharm interpreter. - JAVA_HOME setup script (
#13) —resources/set-java-home.fishwritesset -gx JAVA_HOME …into the fish config so gradle invocations don't need an inline prefix. - Packaging verified (
#51) —./gradlew buildPluginproduces the distributable zip; manually validated by installing into a real PyCharm.
Workflow and CLAUDE.md
A large fraction of the 1.0.0 issue load is workflow scaffolding to make Claude-driven development reliable on this project:
Waiting/Merge/Merge Request/On Holdissue label state machine (#49,#50).- Live vs AFK working modes; rebase-on-switch and cleanup-after-merge rules (
#50,#49). - Project-wide
.claude/settings.json(verb-level prefixes) split from per-machine.claude/settings.local.json(#44,#51,#43,#45). - A long tail of permission-prompt fixes documented in CLAUDE.md (
#6,#8,#9–#15,#23–#28,#31–#38,#42–#48).
Misc
.gitlab-ci.ymlwith SAST + secret detection (#2).developandmainset as protected branches (#3).- README updated with install steps, AI section, and architecture note (
#22). - "On Hold" label added; milestone-scoped issue queue documented (
#50).
Compatibility
- PyCharm: Community or Professional, builds
251→261.*(PyCharm 2025.1 → 2026.1). - Plugin module deps:
com.intellij.modules.platform,com.intellij.modules.python. - Build-time IDE: PyCharm Community 2025.1 (Professional is a runtime superset).
Verification
./gradlew ktlintCheck testis green ondevelop../gradlew buildPluginproducesbuild/distributions/code-focus-1.0.0.zip(~99 KB).- The zip was installed in a real PyCharm and the toggle bar + Settings → Tools → Code Focus behave as expected.
./gradlew verifyPluginwas started but stopped — first-run downloads of every PyCharm in the supported range took longer than the release MR can reasonably wait. Worth running once on demand if/when targeting a JetBrains Marketplace publish.