Kode Irekiko Ekarpenak

Garatzaile-tresna eta esperientzia hobeak eraikitzen kode irekiko proiektuetara ekapen esanguratsuak eginez

Contribution Statistics

118
Bateratutako Ekarpenak
Produkziora prest dauden kode-hobekuntzak
6
Proiektuak
Erabili asko diren kode irekiko tresnak
Proiektu Guztiak
clj-kondo
cljfmt
Calva
clojure-lsp
Kit
Logseq

Proiektuak

clj-kondo

Developer Tools

A static analyzer and linter for Clojure code that sparks joy

ClojureStatic AnalysisLinting

43 Ekarpenak

01
New Linter: if-x-x-y

Introduced a new linter `:if-x-x-y` that suggests replacing `(if x x y)` with `(or x y)` when the condition is a simple symbol. Disabled by default; ships with documentation, configuration entry, and tests covering the pattern as well as false-positive guards. Resolves #2062.

Surfaces an idiomatic-Clojure simplification across codebases — turning a common defensive `(if x x default)` pattern into the equivalent but clearer `(or x default)`
02
New Linter: unimplemented-protocol-method-arity

Introduced a new linter :unimplemented-protocol-method-arity that warns when a protocol or interface method is implemented with an arity that does not match any declared in the protocol. Extended detection to definterface method implementations as well.

Catches a class of subtle protocol/interface implementation bugs at lint time that would otherwise surface only at call site
03
New Linter: not-nil?

Added a new linter :not-nil? that suggests using `(some? x)` instead of `(not (nil? x))` for clearer, more idiomatic Clojure. Includes ClojureScript support, configurable level, ignore handling, tests, and documentation.

Promotes idiomatic Clojure style and surfaces an easy readability win across codebases
04
New Linter: redundant-declare

Introduced a new linter :redundant-declare that warns when declare is used after a var is already defined in the same namespace. Updated documentation and configuration to include this new linter with comprehensive tests to ensure correct functionality and behavior.

Prevents redundant declare statements and improves code clarity
05
New Linter: aliased-referred-var

Implemented a new linter :aliased-referred-var that warns when a var is both referred and accessed via an alias in the same namespace.

Prevents namespace confusion and improves code clarity
06
New Linter: is-message-not-string

Created a linter :is-message-not-string that warns when clojure.test/is receives a non-string message argument.

Enhances testing code quality by enforcing string messages in assertions
07
Add duplicate refer linter and tests

Introduce a new linter `:duplicate-refer` that warns on duplicate entries in `:refer` vectors within `:require` statements. This change includes documentation updates and tests to ensure proper functionality of the new linter.

Improves code quality by detecting duplicate references in namespace requires
08
Add class type and type checking support

Introduce a new type `class` and enhance type checking for class-related functions including `instance?`, `cast`, `class`, `make-array`, `bases`, and `supers`. This improves type safety and error reporting for functions that require class arguments, ensuring better validation during linting.

Improves type safety and error reporting for class-related functions
09
New Linter: Condition Always True for clojure.test/is

Implemented a linter to warn on literals and constants used in clojure.test/is forms that always evaluate to true, preventing common testing mistakes.

Improves test reliability by catching always-true conditions in assertions
10
New Linter: Redundant Format

Implemented a linter to warn when format strings are used without any format specifiers, indicating potential misuse of formatting functions.

Helps developers identify unnecessary use of format functions, improving code clarity
11
New Linter: unused-excluded-var

Implemented a new linter to warn on unused vars in :refer-clojure :exclude, helping developers maintain cleaner code by identifying unnecessary exclusions.

Improves code quality by detecting redundant exclusions
12
New Linter: destructured-or-always-evaluates

Created a linter to warn on s-expressions in :or defaults in map destructuring, preventing common pitfalls where developers expect lazy evaluation but get eager evaluation.

Prevents subtle bugs in destructuring patterns that are hard to debug
13
Array Type System Support

Added comprehensive type checking support for array operations including to-array, alength, aget, aset, and aclone functions. Introduced new array type for better static analysis.

Enables type checking for Java array interop operations, catching type errors at lint time
14
New Linter: unresolved-excluded-var

Built a linter to warn on non-existing vars in :refer-clojure :exclude, preventing typos and references to non-existent symbols.

Catches namespace configuration errors at analysis time
15
New Linter: unquote-not-syntax-quoted

Developed a linter to warn on ~ and ~@ usage outside syntax-quote (`), catching common macro-related mistakes early in development.

Reduces macro-related errors and improves developer experience
16
Fix :unused-excluded-var False Positive with :refer + :rename

Fixed a false positive where `:refer-clojure :exclude` combined with a `:refer` `:rename` would incorrectly flag the excluded var as unused. The referred-vars map keys by the renamed name while `:name` keeps the original, so the excluded symbol never appeared in the used-vars set. Resolves #2813.

Eliminates spurious warnings when shadowing a core var via :exclude and reintroducing it under a different name via :refer + :rename — a common pattern for working around core/library name clashes
17
Fix definterface Methods with Multiple Arities

Refactored `analyze-defn` to extract a `method-arities-by-name` helper that accumulates all arities per method name and folds the definterface +1 (target object) adjustment inline with `cond->>`. The previous `(into {} meths)` silently dropped earlier entries when a `definterface` declared the same method name with different arities, so only the last arity survived for arity checks. Resolves #2814.

Fixes silent loss of arity information for multi-arity definterface methods, restoring accurate arity warnings for the protocol-method-arity linter
18
Fix Linter-Specific Ignore for Excluded Vars

Fixed linter-specific ignore metadata (e.g., `#_{:clj-kondo/ignore [:invalid-arity]}`) to correctly respect the specified linters instead of suppressing all linters. Modified `utils/ignored?` to accept an optional linter parameter and updated call sites in `linters.clj` and `analyzer/namespace.clj` to pass linter types. Also extended linter-specific ignore support to inline metadata.

Allows developers to selectively suppress specific linter warnings on excluded vars without accidentally silencing unrelated linters
19
Add Type Support for pmap with Arity Checking

Added type support for pmap with proper arity checking, enforcing that pmap receives 2 or more arguments. Also refactored map and mapcat to use a shared type definition for consistency and maintainability in type handling.

Enables type checking for pmap usage, catching incorrect arities at lint time in parallel map operations
20
Performance Improvement: Refactor lint-cond-constants! to Eliminate sexpr Usage

Refactored the lint-cond-constants! function to remove expensive sexpr usage, improving performance in linting operations.

Enhances linting speed and efficiency for conditional expressions
21
Fix Primitive Array Class Syntax Recognition

Resolved regression where primitive array class syntax (e.g., byte/1, int/2) was not recognized in type checking.

Enables proper type checking for Clojure 1.12 array syntax
22
Enhance unreachable-code Linter for Reader Conditionals

Updated the unreachable-code linter to warn when :default does not come last in reader conditionals.

Catches unreachable code in conditional reader forms
23
Add type inst and support for inst-ms types

Introduced a new type `inst` and enhanced type checking for `inst-ms` and `inst-ms*`. These changes ensure that these types are correctly handled in the linter, improving type safety and providing clearer error messages for type mismatches.

Improves type safety and error reporting for instant and millisecond types in Clojure code.
24
Type Checking Support for Clojure Test Functions

Added comprehensive type checking for clojure.test functions like is, testing, deftest, etc., enabling static analysis to catch type mismatches in test code.

Enhances type safety in testing code, preventing runtime type errors
25
Enhanced Type Checking for Collections

Extended type checking support to sorted-map-by, sorted-set, and sorted-set-by functions, improving static analysis coverage for sorted collection operations.

Better type inference and error detection for sorted collection usage
26
Namespaced Maps Analysis

Implemented analysis to report unresolved namespace for namespaced maps with unknown aliases, catching configuration errors in namespaced keyword usage.

Better error reporting for namespaced map syntax
27
Ratio Type Support with Numerator and Denominator functions type checking

Add comprehensive :ratio type support to clj-kondo's type system, enabling type checking for the numerator and denominator functions.

Improves type safety when working with ratios in Clojure code.
28
Add Type Support for Future-Related Functions

Introduced comprehensive type support for functions related to futures, including future, future-call, future-done?, future-cancel, and future-cancelled?. Added tests to ensure correct linting behavior for these types.

Enhances type system coverage for concurrent programming, enabling better static analysis of future-based code
29
Remove Redundant Ignore for Discouraged Var

Removed an unnecessary `#_:clj-kondo/ignore` directive on the regex memoization helper. The discouraged-var warning it suppressed no longer applies, so the ignore was dead code.

Cleans up dead lint suppression and prevents the ignore from masking future discouraged-var regressions in that helper
30
Document Missing :off Linters in Optional Linters Section

Audited the optional-linters documentation and added the entries that were off-by-default but missing from the docs, so every optional linter is now discoverable from the configuration reference.

Makes it easier for users to find and opt into all available linters instead of relying on changelog spelunking
31
Cache Path Separator Regex Pattern

Replaced repeated `re-pattern` calls in `files-count` and `process-file` with a precomputed `path-separator-pat` regex constant, avoiding redundant pattern compilation on every classpath entry processed.

Reduces overhead during classpath analysis on projects with large dependency trees
32
Fix False Positive for Throw with String in CLJS

Fixed a false positive where throwing a string in ClojureScript would incorrectly trigger a type mismatch warning.

Improves accuracy of type checking for throw expressions in CLJS
33
Fix def + defmethod :def-fn Warning Location

Ensured that def + defmethod combinations trigger :def-fn warnings with valid source locations.

Improves accuracy of location reporting for def-fn linter
34
Enhance unused-excluded-var Linter with Location Metadata

Added location metadata to excluded vars in ns-unmap for the unused-excluded-var linter.

Fixes location reporting for unused exclusions
35
Fix Gensym Bindings in Nested Syntax Quotes

Fixed recognition of gensym bindings in nested syntax quotes for proper analysis.

Improves macro analysis accuracy
36
Extend equals-expected-position Linter to not=

Extended the :equals-expected-position linter to also warn for not= when the expected value is not first.

Improves consistency in equality checks
37
Fix False Positive for Throw in CLJS with Non-Throwable Values

Fixed false positive warnings for throw in ClojureScript when throwing non-throwable values.

Reduces false warnings in CLJS throw expressions
38
Fix `:refer-clojure :exclude` handling for ignored vars

Improved handling of `:refer-clojure :exclude` to properly ignore elements with `#_clj-kondo/ignore` metadata.

39
Fix regression for unused binding warnings

Resolved a regression causing false positives for unused binding warnings in `~'~` unquote expressions.

40
Fix unused value linter for `defmethod` bodies

Updated the unused value linter to allow unused values in `defmethod` bodies.

41
Rename Linter for Unresolved Excluded Vars

Renamed the linter from :refer-clojure-exclude-unresolved-var to :unresolved-excluded-var for consistency across the codebase. Updated references in documentation, configuration, and test files.

Improves naming consistency and maintainability in linter definitions
42
Fix Unexpected Recur False Positive

Fixed false positive :unexpected-recur warning when recur is used inside clojure.core.match/match expressions, improving accuracy of control flow analysis.

Eliminates false warnings in legitimate recur usage with pattern matching
43
Type Support for repeatedly function

Added type definitions for repeatedly.

More comprehensive type checking across Clojure core library

cljfmt

Developer Tools

A tool for formatting Clojure code according to consistent style guidelines

ClojureCode FormattingDeveloper Tools

12 Ekarpenak

01
Add :max-column-alignment-gap Option

Introduced a new option :max-column-alignment-gap to limit the maximum number of spaces inserted between a key and its aligned value. This prevents excessive horizontal padding in maps that contain outlier keys while still allowing normal alignment for shorter keys.

Gives developers fine-grained control over alignment padding, avoiding unreadable horizontal stretch in maps with long keys
02
Add :blank-lines-separate-alignment? option

Adds a new configuration option :blank-lines-separate-alignment? that allows column alignment to treat blank lines as group separators. When enabled, alignment groups are separated by blank lines, allowing independent alignment within each group rather than across the entire form. This refactors the column alignment logic to support both the original behavior (aligning across all lines) and the new grouped behavior.

Improves readability by visually grouping related items together, allowing independent alignment of related bindings or map entries separately
03
Ignore .clj config files by default

Ignore .clj configuration files by default for security. Introduce the :read-clj-config-files? option to opt in to reading .clj config files. When a .clj config file is detected but the option is not enabled, emit a warning and fall back to .edn config files if available.

Improves security by avoiding execution of arbitrary Clojure config code while preserving compatibility via an opt-in and fallback to .edn. Provides clearer warnings when .clj files are present.
04
Add :normalize-newlines-at-file-end? option

:normalize-newlines-at-file-end? ensures files end with exactly one newline character. When enabled, cljfmt removes multiple trailing blank lines and guarantees a single newline at EOF for consistent file endings.

Produces consistent file endings across the codebase, reduces accidental trailing blank lines, and prevents spurious diffs in version control.
05
Add Support for :refer Indentation Rules

Added support for indentation rules applied to vars introduced via :refer in namespace declarations. cljfmt now looks up the original module for referred vars and applies any configured indentation rules for the fully-qualified name.

Enables correct indentation for referred vars, respecting their original module indentation configuration without requiring repeated per-namespace setup
06
Configurable Column Alignment

Introduced :align-single-column-lines? configuration option to control column alignment behavior in maps and forms. This prevents excessive horizontal padding when forms contain multi-line values.

Improves formatting consistency and readability for complex data structures
07
Fix split-keypairs Inserting Newline Before First Map Key

Fixed `:split-keypairs-over-multiple-lines?` to no longer insert a stray newline before the first key in a map. The `map-key-without-line-break?` predicate now also requires the key to have a left sibling, so the leading position is excluded from line-break insertion.

Eliminates a spurious blank-line artifact when splitting key-pairs, producing the expected map layout
08
Validate Symbol Key Syntax in Configuration Maps

Added validation for symbol-keyed configuration maps (e.g. `:aligned-forms`, `:extra-blank-line-forms`) so malformed keys are reported with a clear error instead of silently producing wrong output. Resolves issue #405.

Catches typos and quoting mistakes in cljfmt configuration up front instead of letting them silently disable formatting rules
09
Cache find-namespace Result Across Formatting Passes

Cached the namespace name under a `::ns-name` opts key so `indent`, `align-form-columns`, and other passes reuse it instead of each re-running `find-namespace` over the same form. Both `indent` and `align-form-columns` now check the cached value first before falling back to discovery.

Removes redundant namespace lookups from the hot path, speeding up formatting on files where multiple passes touch the same form
10
Improve Performance of Indent Rules

Optimized indent rule processing by compiling indent rules once per file instead of once per node, significantly reducing redundant computation during formatting.

Substantially improves formatting performance on large files by eliminating repeated rule compilation overhead
11
Fix Case-Sensitive Sorting in sort-ns-references

Fixed the :sort-ns-references? option to perform case-insensitive string sorting, preventing uppercase namespace references from sorting before lowercase ones. Modified the node-sort-string function and added a test case.

Improves code formatting consistency by ensuring predictable namespace reference ordering
12
Fix README Examples for Symbol-Keyed Configuration Options

Corrected README examples for `:aligned-forms` and `:extra-blank-line-forms` to use bare symbols (`{let #{0}}`, `{cond :all}`) instead of quoted symbols (`{'let #{0}}`), matching the format the configuration loader actually accepts.

Prevents users from copy-pasting documentation examples that would not parse correctly

Calva

Developer Tools

Clojure & ClojureScript Interactive Programming for VS Code

TypeScriptVS Code ExtensionDeveloper Tools

54 Ekarpenak

01
Configurable Toggle Comment Behavior

Added a new configuration option calva.paredit.toggleCommentBehavior with multiple strategies for toggling comments. When text is selected or cursor is in a line comment, toggles line comments as before. When there is no selection, users can choose between: Toggle Ignore (#_) Current Form, Toggle Ignore (#_) Parent Form, or Toggle Comment (;;) Current Line (default). Implemented toggleIgnoreForm function that triggers when appropriate based on user configuration and cursor context. Updated documentation describing all available options.

Provides users with powerful and configurable comment toggle strategies, enabling structural commenting with #_ instead of just line comments, improving code organization and readability
02
Toggle Line Comments with Indent Preservation

Added a structural toggle comment command that inserts line comments while preserving paredit structure (parentheses and form integrity). Includes command/keybinding integration and integration tests for the new workflow.

Keeps line comment toggles aligned with expected indentation, improving editing consistency
03
Migrate cljfmt 0.16.0

Major migration of Calva's code formatting infrastructure to cljfmt 0.16.0. Updated cljfmt dependency from 0.13.1 to 0.16.0 and migrated formatter to use cljfmt's native alignment capabilities. Removed 4,600+ lines of legacy pez-cljfmt and pez-rewrite-clj code. Added comprehensive tests for align-associative conversion logic to ensure compatibility with new formatting behavior.

Massive code reduction and modernization - cleaner codebase with better maintenance, improved reliability through proven library functionality, and access to two years of upstream cljfmt improvements
04
Fix Text Garbling When Hitting Key Before Indentation

Fixed a race condition where pressing keys before indentation was applied would cause text to be garbled and cursor position to jump. Introduced calculateIndentEdit() function that returns TextEdit objects instead of performing edits directly, reducing timing conflicts. Increased debounce delay from 250ms to 400ms to give users more time between typing and formatting. Refactored FormatOnTypeEditProvider to use the new indent calculation method while maintaining backward compatibility with the old indent engine.

Eliminates disruptive text garbling and cursor jumping during fast typing, significantly improving editor experience during indentation
05
User Customizable Pair Forms and Threading Macros

Introduced comprehensive configuration system for custom pair forms and threading macros, now configurable via VS Code Settings menu. Users can define custom pair forms and threading macros through the VS Code UI settings panel, JSON settings, or config.edn file. Implemented createPareditConfig function that merges custom and default configurations, enabling complete paredit customization.

Provides users with powerful and accessible customization options for pair-aware editing operations through the familiar VS Code Settings UI, greatly enhancing flexibility and enabling library-specific workflows
06
Fix Slurping with Ignored/Commented Expressions

Fixed slurp forward and backward operations to properly handle s-expressions with #_ (ignore marker) comments. Modified forwardSexp and backwardSexp in token-cursor.ts to treat #_(form) as a unified s-expression unit rather than separate tokens, preventing errors during slurp operations.

Enables reliable slurping operations when working with commented-out code, improving workflow for refactoring and structural editing
07
Add Pair/Triple Selection and Dragging Support for condp

Enhanced grow selection and drag sexp to recognize test/result pairs and test/:>>/function triples within condp expressions. Properly handles default values (unpaired elements at the end).

Improves code selection and manipulation experience for condp forms, enabling intuitive pair and triple selection and movement
08
Fix extract-function Command Argument Handling

Fixed the `extract-function` command to always append selection-end coordinates when invoked, since clojure-lsp destructures those args unconditionally. Without them, a 4-arg call would throw IndexOutOfBoundsException, breaking extract-function when no region was selected.

Restores reliable use of the LSP-backed extract-function refactor regardless of selection state
09
Fix Status Bar Stuck on "Launching REPL" After Failed Jack-in

Updated the status bar to react to jack-in task execution and interruption events so a failed or cancelled jack-in no longer leaves the status bar stuck displaying "Launching REPL".

Provides accurate REPL status feedback, eliminating a confusing state that suggested an active connection when none existed
10
Bump cljfmt to 0.16.4 and Fix Format and Align Current Form on Maps

Updated the `dev.weavejester/cljfmt` dependency to 0.16.4 and fixed Calva's "Format and Align Current Form" command for map literals so alignment behaves correctly on top-level maps.

Brings in upstream cljfmt fixes and restores expected align-on-current-form behavior for maps
11
Strip Leading #_ When Evaluating Selection

When the cursor sits at the end of `#_(form)`, evaluate-selection now strips the leading `#_` and sends only `(form)` to the REPL instead of the silently-discarded discard form.

Eliminates the surprising no-op when evaluating discard-prefixed forms, making evaluation match user intent
12
Fix Performance Regression in Rainbow Bracket Highlighting

Hoisted `vscode.workspace.getConfiguration` for comment-form config out of the per-token highlight loop, reading it once before iterating visible ranges instead of on every token. Resolves a multi-second hang on backward navigation and backspace in large files introduced in 2.0.564.

Restores responsive editing in large files, eliminating the multi-second freezes that made navigation unusable
13
Allow Custom Comment Forms

Added configuration support for custom comment forms, allowing users to define their own comment form patterns that Calva recognizes for structural editing. Resolves issue #3117.

Enables library and framework authors to configure custom comment forms for project-specific workflows
14
Current Form Detection for #_ Commented Forms at All Positions

Extended current form detection to correctly identify `#_` (discard) commented forms regardless of where the cursor is positioned within them. Previously cursor position within the commented form affected whether it was included in the current form selection.

Ensures evaluate-current-form and other form-based operations work reliably with discard-commented code at any cursor position
15
Fix: Toggle Comments Structurally with Built-in Formatting

Fixed toggle comment to apply built-in formatting after structurally inserting or removing comment markers, ensuring proper indentation is maintained across the affected form after toggling.

Eliminates formatting drift when toggling structural comments, keeping code consistently formatted
16
Fix Code Navigation After Starting REPL

Fixed Ctrl+click (go to definition) code navigation that would fail after starting a REPL session. Resolved by correcting the initialization order and state used when resolving navigation targets.

Restores reliable code navigation for developers who use the REPL as part of their workflow
17
Customizable Toggle Comment Shortcuts

Extended the toggleLineCommentCommand to accept arguments so separate keyboard shortcuts can be bound for different commenting styles. This allows users to customize behavior for line comments vs structural ignore commands and resolves issue #3100. Updated associated tests and documentation to reflect new parameters.

Gives users flexibility in keybinding comment actions and makes comment toggling more intuitive when using multiple styles.
18
Fix Multi-Line Toggle Comment Structure and Indentation

Additional fixes for multi-line toggle comment: prevents breaking code structure during comment insertion and handles the edge case where comments share the same column as subsequent code, preserving correct indentation after toggling.

Eliminates structural corruption and indentation errors when toggling comments on complex multi-line forms
19
Fix Multi-Line Toggle Comment

Fixed toggle comment operation on multi-line selections to correctly add and remove line comment markers for each selected line, resolving cases where only the first or last line was affected.

Makes toggle comment reliable across multi-line selections, matching expected behavior from other editors
20
Fix Undo After Insert Semicolon

Fixed the insertSemiColon function to perform all edits in a single document model transaction, enabling proper undo behavior. Previously, the semicolon insertion required multiple separate edits that could not be undone as a single operation. Now, inserting and undoing semicolons works seamlessly as an atomic operation.

Improves editor UX by ensuring undo works correctly after inserting semicolons, reducing friction in the editing workflow
21
Error Instrumentation via Command Palette

Improved breakpoint instrumentation error reporting with richer context, fixed token cursor initialization, and corrected document symbol handling. Added debugging examples for projectless test data to validate the workflow.

Reduces friction diagnosing command-palette instrumentation failures with clearer errors and better test coverage
22
Fix Projectless REPL deps.edn Discovery

Corrected deps.edn detection for projectless REPLs by fixing the cljCommandLine condition and removing a redundant stat call. Added integration test coverage in projectless fixtures.

Ensures projectless REPLs find deps.edn reliably, avoiding broken startup configurations
23
Improve Jack-in Dependencies Resolution

Enhanced jack-in dependency version resolution to find and display the latest versions (both release and prerelease) instead of stopping at the first cached version. When a prerelease is found, the UI now displays both the latest stable release and prerelease version side by side, giving developers full visibility into available versions.

Ensures developers see all available dependency versions during REPL startup and can make informed choices between stable and prerelease versions
24
Fix Forward Delete for Discard Comment Tokens

Fixed forward delete operation to delete the entire #_ (discard comment) token in a single keypress when cursor is positioned at the start of the token. Previously, forward delete would only remove the # character, requiring two deletions to fully remove the #_ token.

Improves editing efficiency and consistency when working with discard comments
25
Fix Backspace for Discard Comment Tokens

Fixed backspace operation to delete the entire #_ (discard comment) token in a single keypress when cursor is positioned immediately after the token. Previously, backspace would jump over the token instead of deleting it, treating it like structural delimiters.

Eliminates unexpected jump-over behavior when deleting discard comments
26
Fix Jack-in Dependencies Not Finding Latest Versions

Fixed jack-in dependency version resolution to always refresh from Clojars instead of returning early when dependencies were cached. Removed the early return when all dependencies were cached, ensuring users always see the latest available versions (e.g., nrepl 1.5.2 instead of stale 1.5.1).

Ensures developers always have access to latest library versions during REPL startup
27
Fix Deletion After Ctrl+Backspace in Line Comments

Fixed issue where pressing Ctrl+Backspace inside line comments would prevent subsequent deletions from working correctly. Modified the backspace handler to avoid processing Ctrl+Backspace within line comment contexts.

Restores normal deletion behavior after using Ctrl+Backspace in comments
28
Fix Pair Detection in Regular Vectors Inside Let Body

Resolved issue where regular vectors in let body contexts were incorrectly treated as pair forms during grow selection and drag sexp operations. Enhanced vector detection logic to distinguish between binding vectors and regular vectors by directly comparing opening positions, ensuring accurate pair form behavior.

Fixes grow selection and drag sexp operations for vectors within let bodies, eliminating incorrect pair form treatment
29
Add Pair Selection and Drag Support for Threaded cond->

Enhanced pair selection and drag sexp operations to correctly recognize and handle test/expression pairs within cond-> and cond->> threading macros. Added comprehensive test coverage for nested threading macros (e.g., cond-> with assoc pairs) to ensure proper expansion behavior.

Enables intuitive pair selection and dragging for threaded conditional forms at multiple nesting levels, improving code manipulation workflows
30
Add Pair-Aware Support for assoc Form

Added support for treating assoc form pairs in paredit operations (grow selection and drag sexp). The assoc form has the structure (assoc map key value key value ...) where key-value pairs start after the map argument (offset 2). This brings feature parity with other pair-aware forms like cond, case, and condp.

Enables intuitive key-value pair manipulation in assoc forms, improving code editing efficiency
31
Add Threading Macro Support for Pair Forms

Enhanced pair-aware forms (flatPairForms) to work correctly inside -> threading macros. The fix reduces the offset by 1 when inside a threading context to maintain proper pair calculation without breaking existing functionality.

Enables correct pair selection and dragging for forms like assoc, cond, and case when used inside threading macros
32
Consolidate and Generalize Pair Form Handling in Paredit

Unified the handling of pair forms (like let bindings, cond pairs, and keyword-based modifiers) within the Paredit logic. Introduced PairFormConfig supporting VectorBindingForm, KeywordPairForm, and FlatPairForm styles. Enhanced parent validation and generalized triple handling (like test :>> expression in condp). Replaced hardcoded bindingForms and conditionalForms arrays with defaultPairForms for improved extensibility.

Provides the internal infrastructure for making pair form handling fully configurable, enabling easier addition of similar patterns in the future and improving code maintainability through unified configuration-driven approach
33
Add Selection and Dragging Support for case Form Pairs

Enhanced grow selection and drag sexp to handle value/result pairs in case forms, similar to existing support for cond and binding forms like let.

Expands selections correctly and enables proper pair movement when working with conditional expressions in case statements
34
Add Selection and Dragging Support for :let Binding Pairs

Enhanced grow selection and drag sexp to recognize :let binding pairs within for loops, doseq, and other binding forms. Updated logic to detect :let vectors and expand through binding pairs before selecting the entire vector.

Improves code selection and manipulation experience for :let bindings, aligning behavior with standard let functionality
35
Add Selection and Dragging Support for cond Form Pairs

Implemented pair selection and dragging functionality for cond forms, enabling users to select and move test/expression pairs within conditional forms. Introduced conditionalForms constant and dynamic offset calculation for maintainable architecture.

Accelerates conditional logic navigation and editing, maintaining consistency with existing pair-selection and drag-sexp features
36
Add Selection and Dragging Support for cond-> and cond->> Form Pairs

Extended pair selection and dragging functionality to cond-> and cond->> threading forms, allowing intelligent selection and movement of test/expr pairs in threaded conditionals.

Streamlines code refactoring workflows for threaded conditional forms
37
Fix Test Name Search Pattern Across nREPL Bencode Transport

Switched `testNameSearchPattern` from backslash-escaped regex special characters to character-class syntax (e.g. `[?]` instead of `\?`). Backslashes can be lost or misinterpreted across the nREPL bencode transport layer, causing test discovery to fail for test names containing `?`, `*`, etc.

Restores reliable "Run Test Under Cursor" for Clojure test names containing common predicate punctuation
38
Current Form Includes #_ Commented Forms

Enhanced current form detection to include `#_` (discard) commented forms so that operations like evaluate-current-form correctly identify the full form extent including prefixed discard comments.

Fixes current form detection to include discard-commented forms, enabling correct evaluation and structural operations on commented code
39
Fix Toggle Comment Inside Nested Brackets

Fixed toggle comment behavior when the cursor is positioned inside nested brackets or forms. Previously the comment was applied to the enclosing expression rather than the intended inner form.

Ensures toggle comment targets the correct form at any nesting level, reducing unexpected behavior in deeply nested code
40
Fix Uncomment When Comment Not in First Column

Fixed the uncomment operation to correctly handle comment markers that are not in the first column, preserving the proper leading whitespace/indentation when removing `;;` prefixes.

Ensures uncomment works correctly regardless of indentation level, preventing indentation errors when removing comments from indented code
41
Fix Toggle Comment on Unformatted Partial Selection

Fixed toggle comment to work correctly when the selection is a partial, unformatted fragment rather than a complete Clojure form. Previously the operation would produce incorrect results or corrupt indentation in such cases.

Makes toggle comment reliable for any selection, including partial or unformatted code fragments
42
Fix Toggle Comment Off Indent Glitch

Fixed an indentation glitch that occurred when toggling line comments off (removing `;;` markers). The indentation would shift incorrectly after comment removal, leaving code mis-aligned.

Eliminates spurious indentation shifts when removing line comments, keeping code properly formatted
43
Fix Insert Semicolon at Start of File

Fixed insert semicolon operation when a multi-line form starts at the very beginning of the file (position 0). Previously this edge case caused incorrect semicolon positioning or an error.

Ensures insert semicolon works correctly in all file positions including at the start of file
44
Fix Evaluate Selection in Comment Context Menu

Fixed the "Evaluate selection" option in the editor context menu to work correctly when the selection is within or overlaps a comment form.

Restores reliable evaluate-selection from the context menu when working with commented code
45
Fix Insert Semicolon Breaking Code Structure

Fixed the insert semicolon operation to avoid breaking surrounding code structure when the cursor is positioned at a location where naive semicolon insertion would split a form.

Ensures insert semicolon preserves structural integrity of Clojure forms in all cursor positions
46
Add Default Pair Form Support for js-interop Library

Added comprehensive pair form support for the applied-science/js-interop library, enabling paredit operations (grow selection, drag sexp) for js-interop-specific forms. Introduced vector-binding form support for applied-science.js-interop/let and flat pair form support for applied-science.js-interop/assoc! and applied-science.js-interop/obj. Includes support for aliased forms (e.g., j/let, j/assoc!) with comprehensive test coverage.

Enables intuitive structural editing for ClojureScript developers using the popular js-interop library, improving productivity when working with JavaScript interop code
47
Threading Macros Alias Resolution and Promesa Pair Defaults

Enhanced threading macro detection to support namespace alias resolution, allowing pair forms and threading macros to work correctly when invoked via aliases (e.g., p/-> for promesa.core/->). Added default pair form support for Promesa library forms including promesa.core/plet, promesa.core/loop, promesa.core/doseq, and promesa.core/with-redefs. Added threading macro support for promesa.core/-> and promesa.core/->>.

Enables reliable structural editing for aliased threading macros and Promesa async workflows, improving developer experience for async Clojure code
48
Refactor Structural Prefix Deletion for Consistency

Unified the handling of structural prefix deletion (for both ' and #) to be consistent between backward and forward deletion operations. Refactored backspace and deleteForward functions into smaller, more maintainable functions for better code clarity.

Eliminates inconsistencies in structural prefix deletion behavior, providing predictable and intuitive editing experience
49
Fix Quote Prefix Deletion After Quoted Lists

Fixed structural backspace and deleteForward operations to correctly handle deletion of quote prefixes positioned right after quoted forms. Issue manifested when attempting operations like '()|: now the quote can be deleted properly. Added comprehensive unit tests for quoted lists, nested quoted lists, and quoted vectors.

Improves structural editing experience by enabling proper quote prefix deletion in edge cases with quoted forms
50
Fix Slurp Backward with Ignored/Commented Expressions

Fixed slurp backward operation to properly handle cursor positioning when encountering #_ (ignore marker) comments. After calling backwardSexp to find the previous form, the cursor is now correctly checked if it's preceded by an #_ ignore marker, enabling reliable backward slurping with commented code.

Ensures backward slurping works correctly with ignored expressions, completing the fix for structural editing with #_ comments
51
Fix: Slurp Forward Empty Form

Fixed Slurp Forward command adding an unwanted leading space when slurping into empty or whitespace-only forms. The fix detects when the target form contains no actual content (only whitespace between open and close brackets, or empty strings) and omits the leading space in that case.

Eliminates unwanted spaces in empty forms during slurp operations, improving structural editing precision
52
Fix: Slurp Backward Empty Form

Fixed Slurp Backward command adding unwanted trailing spaces when slurping into empty or whitespace-only forms. The fix detects when the target form contains no actual content and omits the trailing space in that case, bringing consistency with the forward slurp fix.

Ensures consistent slurp behavior for both forward and backward operations on empty forms
53
Improve backspace and deleteForward functions for reader macro hash deletion

Enhanced the backspace and deleteForward functions to correctly handle deletion of reader macro hashes (#) when the cursor is positioned immediately after or before them. This prevents orphaned hashes and maintains code integrity during editing.

Improves editor behavior and user experience when deleting reader macros in Clojure code
54
Add Drag Sexp Tests for Form Pairs and Triples

Comprehensive test coverage for drag sexp functionality across different form types including cond, case, condp, and :let bindings. Tests ensure proper movement of pairs and triples within conditional and binding forms.

Ensures reliability of drag sexp operations for complex form structures

clojure-lsp

Developer Tools

A Language Server Protocol implementation for Clojure powering editor features like go-to-definition, refactoring, and code actions across Calva, Emacs, Vim, and more

ClojureLanguage Server ProtocolDeveloper Tools

4 Ekarpenak

01
Navigate to Existing deftest Instead of Duplicating

Added a `deftest-loc-with-name` helper that locates the first top-level `(deftest <name> ...)` form in the target test file. The "Create test" code action now navigates to an existing deftest with the matching name instead of inserting a duplicate.

Prevents accidental duplicate test definitions when triggering "Create test" on a function that already has a corresponding deftest
02
Preserve Existing Formatting in add-missing-libspec

Detect when the first child of `:require`/`:import` sits on the same line as the keyword and preserve that style during `add-missing-libspec` so auto-clean no longer re-flows the entire ns block. Adjusted the settings update logic for `ns-inner-blocks-indentation` and `keep-require-at-start` to honor user formatting choices.

Stops add-missing-libspec from rewriting unrelated namespace formatting, eliminating noisy diffs in PRs
03
Fix Require Suggestions Crossing Language Boundaries

Added a language filter to require suggestions so a `.clj` file no longer offers refers defined only in `.cljs` files (and vice versa). `.cljc` files continue to see refers from both. Includes test coverage for each language combination.

Eliminates invalid require/refer suggestions that would not resolve at runtime in the target dialect
04
Bump clj-kondo to 2026.04.15

Updated the bundled clj-kondo dependency to 2026.04.15 to pull in upstream linter improvements and bug fixes.

Keeps clojure-lsp users on the latest clj-kondo analysis without manual version pinning

Kit

Web Framework

A lightweight, modular framework for building scalable Clojure web applications. Contributions span the main framework, the modules registry, and the documentation site.

ClojureClojureScriptWeb FrameworkReagent

2 Ekarpenak

01
Reagent Module with React 19 Support

Added a new `:kit/reagent` module to the Kit modules registry that scaffolds Reagent UIs against React 19 via `reagent.dom.client`. Spans three repos: the modules registry (kit-clj/modules#45) adds the module configuration and README entry; the Kit framework (kit-clj/kit#177) bumps React to 19 and Reagent to 2.0.1; and the documentation site (kit-clj/kit-clj.github.io#76) updates the modules page and ClojureScript guide to use the new client-rendering API and notes the legacy `reagent.dom/render` API.

Brings Kit's ClojureScript story onto the modern React 19 / Reagent 2 stack with first-class scaffolding via the modules system
02
Update reitit and ring-core Dependencies

Bumped `reitit` and `ring-core` to current versions in the Kit framework deps.

Keeps Kit projects on supported releases of core HTTP libraries

Logseq

Productivity

A privacy-first, open-source knowledge base that works on top of local plain-text Markdown and Org-mode files

ClojureScriptReactElectronKnowledge Management

3 Ekarpenak

01
Fix Task List Checkbox Toggle Behavior

Resolved edge cases in task list checkbox toggling to preserve expected casing and behavior. Implemented safer replace semantics for consistent checkbox state transitions.

Ensures reliable task management functionality, critical for productivity workflows
02
Autopair Parenthesis Behavior Improvements

Enhanced autopairing logic for parentheses to only trigger in appropriate contexts (e.g., when preceded by whitespace), preventing unwanted insertions in URLs and other patterns.

Significantly improved editor UX by eliminating disruptive autocomplete behavior
03
Fix Image Navigation Order in Maximize Mode

Corrected image navigation logic in maximize (lightbox) mode to maintain proper order when switching between images. Fixed inconsistent index calculations causing confusing navigation.

Enhanced image viewing experience for users working with visual content

Ekarpenen Denbora-lerroa

New Linter: if-x-x-y

PR-a ikusi →

Remove Redundant Ignore for Discouraged Var

PR-a ikusi →

Document Missing :off Linters in Optional Linters Section

PR-a ikusi →

Navigate to Existing deftest Instead of Duplicating

PR-a ikusi →

Preserve Existing Formatting in add-missing-libspec

PR-a ikusi →

Fix extract-function Command Argument Handling

PR-a ikusi →

Fix Require Suggestions Crossing Language Boundaries

PR-a ikusi →

Fix :unused-excluded-var False Positive with :refer + :rename

PR-a ikusi →

Fix definterface Methods with Multiple Arities

PR-a ikusi →

Fix Status Bar Stuck on "Launching REPL" After Failed Jack-in

PR-a ikusi →

Reagent Module with React 19 Support

PR-a ikusi →

Bump cljfmt to 0.16.4 and Fix Format and Align Current Form on Maps

PR-a ikusi →

Update reitit and ring-core Dependencies

PR-a ikusi →

Bump clj-kondo to 2026.04.15

PR-a ikusi →

New Linter: unimplemented-protocol-method-arity

PR-a ikusi →

New Linter: not-nil?

PR-a ikusi →

Fix split-keypairs Inserting Newline Before First Map Key

PR-a ikusi →

Validate Symbol Key Syntax in Configuration Maps

PR-a ikusi →

Fix Test Name Search Pattern Across nREPL Bencode Transport

PR-a ikusi →

Fix README Examples for Symbol-Keyed Configuration Options

PR-a ikusi →

Cache find-namespace Result Across Formatting Passes

PR-a ikusi →

Cache Path Separator Regex Pattern

PR-a ikusi →

Strip Leading #_ When Evaluating Selection

PR-a ikusi →

Fix Performance Regression in Rainbow Bracket Highlighting

PR-a ikusi →

Allow Custom Comment Forms

PR-a ikusi →

Improve Performance of Indent Rules

PR-a ikusi →

Fix Linter-Specific Ignore for Excluded Vars

PR-a ikusi →

Current Form Detection for #_ Commented Forms at All Positions

PR-a ikusi →

Current Form Includes #_ Commented Forms

PR-a ikusi →

Add :max-column-alignment-gap Option

PR-a ikusi →

Fix: Toggle Comments Structurally with Built-in Formatting

PR-a ikusi →

Fix Code Navigation After Starting REPL

PR-a ikusi →

Customizable Toggle Comment Shortcuts

PR-a ikusi →

Fix Toggle Comment Inside Nested Brackets

PR-a ikusi →

Configurable Toggle Comment Behavior

PR-a ikusi →

Fix Uncomment When Comment Not in First Column

PR-a ikusi →

Fix Toggle Comment on Unformatted Partial Selection

PR-a ikusi →

Fix Toggle Comment Off Indent Glitch

PR-a ikusi →

Fix Insert Semicolon at Start of File

PR-a ikusi →

Fix Multi-Line Toggle Comment Structure and Indentation

PR-a ikusi →

Fix Multi-Line Toggle Comment

PR-a ikusi →

Fix Undo After Insert Semicolon

PR-a ikusi →

Error Instrumentation via Command Palette

PR-a ikusi →

Fix Evaluate Selection in Comment Context Menu

PR-a ikusi →

Fix Insert Semicolon Breaking Code Structure

PR-a ikusi →

Toggle Line Comments with Indent Preservation

PR-a ikusi →

Fix Projectless REPL deps.edn Discovery

PR-a ikusi →

Improve Jack-in Dependencies Resolution

PR-a ikusi →

Migrate cljfmt 0.16.0

PR-a ikusi →

Add :blank-lines-separate-alignment? option

PR-a ikusi →

Fix Forward Delete for Discard Comment Tokens

PR-a ikusi →

Fix Backspace for Discard Comment Tokens

PR-a ikusi →

Fix Jack-in Dependencies Not Finding Latest Versions

PR-a ikusi →

Fix Deletion After Ctrl+Backspace in Line Comments

PR-a ikusi →

Add Default Pair Form Support for js-interop Library

PR-a ikusi →

Threading Macros Alias Resolution and Promesa Pair Defaults

PR-a ikusi →

New Linter: redundant-declare

PR-a ikusi →

Fix Text Garbling When Hitting Key Before Indentation

PR-a ikusi →

User Customizable Pair Forms and Threading Macros

PR-a ikusi →

Fix Slurping with Ignored/Commented Expressions

PR-a ikusi →

Fix Pair Detection in Regular Vectors Inside Let Body

PR-a ikusi →

Refactor Structural Prefix Deletion for Consistency

PR-a ikusi →

Fix Quote Prefix Deletion After Quoted Lists

PR-a ikusi →

Fix Slurp Backward with Ignored/Commented Expressions

PR-a ikusi →

Add Pair Selection and Drag Support for Threaded cond->

PR-a ikusi →

Add Pair-Aware Support for assoc Form

PR-a ikusi →

Add Threading Macro Support for Pair Forms

PR-a ikusi →

Fix: Slurp Forward Empty Form

PR-a ikusi →

Fix: Slurp Backward Empty Form

PR-a ikusi →

Add Type Support for pmap with Arity Checking

PR-a ikusi →

Consolidate and Generalize Pair Form Handling in Paredit

PR-a ikusi →

Add Pair/Triple Selection and Dragging Support for condp

PR-a ikusi →

Add Selection and Dragging Support for case Form Pairs

PR-a ikusi →

Add Selection and Dragging Support for :let Binding Pairs

PR-a ikusi →

Add Selection and Dragging Support for cond Form Pairs

PR-a ikusi →

Add Selection and Dragging Support for cond-> and cond->> Form Pairs

PR-a ikusi →

Improve backspace and deleteForward functions for reader macro hash deletion

PR-a ikusi →

Add Drag Sexp Tests for Form Pairs and Triples

PR-a ikusi →

Ignore .clj config files by default

PR-a ikusi →

Add :normalize-newlines-at-file-end? option

PR-a ikusi →

Performance Improvement: Refactor lint-cond-constants! to Eliminate sexpr Usage

PR-a ikusi →

Fix False Positive for Throw with String in CLJS

PR-a ikusi →

Add Support for :refer Indentation Rules

PR-a ikusi →

Fix Case-Sensitive Sorting in sort-ns-references

PR-a ikusi →

New Linter: aliased-referred-var

PR-a ikusi →

New Linter: is-message-not-string

PR-a ikusi →

Fix Primitive Array Class Syntax Recognition

PR-a ikusi →

Enhance unreachable-code Linter for Reader Conditionals

PR-a ikusi →

Fix def + defmethod :def-fn Warning Location

PR-a ikusi →

Enhance unused-excluded-var Linter with Location Metadata

PR-a ikusi →

Fix Gensym Bindings in Nested Syntax Quotes

PR-a ikusi →

Extend equals-expected-position Linter to not=

PR-a ikusi →

Fix False Positive for Throw in CLJS with Non-Throwable Values

PR-a ikusi →

Add duplicate refer linter and tests

PR-a ikusi →

Add type inst and support for inst-ms types

PR-a ikusi →

Add class type and type checking support

PR-a ikusi →

New Linter: Condition Always True for clojure.test/is

PR-a ikusi →

New Linter: Redundant Format

PR-a ikusi →

Type Checking Support for Clojure Test Functions

PR-a ikusi →

Fix `:refer-clojure :exclude` handling for ignored vars

PR-a ikusi →

Fix regression for unused binding warnings

PR-a ikusi →

Fix unused value linter for `defmethod` bodies

PR-a ikusi →

New Linter: unused-excluded-var

PR-a ikusi →

New Linter: destructured-or-always-evaluates

PR-a ikusi →

Rename Linter for Unresolved Excluded Vars

PR-a ikusi →

Array Type System Support

PR-a ikusi →

Enhanced Type Checking for Collections

PR-a ikusi →

Configurable Column Alignment

PR-a ikusi →

New Linter: unresolved-excluded-var

PR-a ikusi →

Namespaced Maps Analysis

PR-a ikusi →

Ratio Type Support with Numerator and Denominator functions type checking

PR-a ikusi →

New Linter: unquote-not-syntax-quoted

PR-a ikusi →

Fix Unexpected Recur False Positive

PR-a ikusi →

Type Support for repeatedly function

PR-a ikusi →

Add Type Support for Future-Related Functions

PR-a ikusi →

Fix Task List Checkbox Toggle Behavior

PR-a ikusi →

Autopair Parenthesis Behavior Improvements

PR-a ikusi →

Fix Image Navigation Order in Maximize Mode

PR-a ikusi →