Skip to content

Releases: vindevoy/code-focus

Code Focus 1.0.1

15 May 09:59

Choose a tag to compare

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 251261.* (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 251261.*.
  • pluginSinceBuild = 251, pluginUntilBuild = 261.*.
  • com.intellij.modules.platform, com.intellij.modules.python.
  • No new dependencies.

Verification

  • ./gradlew ktlintCheck test is green on develop.
  • ./gradlew clean buildPlugin produces build/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.py real-fixture tests and the two new issue-52 regression tests.

Code Focus 1.0.0

14 May 18:56

Choose a tag to compare

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 the import / 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. Runs ruff format on the current file (uses the project .venv first, then PATH).
  • Fix#40. Runs ruff check --fix on 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 (for BasePlatformTestCase).
  • ktlint (#4) on pre-commit, full check + test on pre-push (hooks under hooks/).
  • Platform tests (#29) — five BasePlatformTestCase suites (one per toggle) booting a real IDE headlessly and asserting against editor.foldingModel.allFoldRegions.
  • uv-managed Python venv (#41) — resources/python/setup-uv-env.fish provisions .venv with ruff, used by the Format/Fix buttons and as the PyCharm interpreter.
  • JAVA_HOME setup script (#13) — resources/set-java-home.fish writes set -gx JAVA_HOME … into the fish config so gradle invocations don't need an inline prefix.
  • Packaging verified (#51) — ./gradlew buildPlugin produces 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 Hold issue 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.yml with SAST + secret detection (#2).
  • develop and main set 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 251261.* (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 test is green on develop.
  • ./gradlew buildPlugin produces build/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 verifyPlugin was 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.