From 453e431f57d8b0ae0c85095cf82617de6700ae09 Mon Sep 17 00:00:00 2001 From: dmitry kim Date: Tue, 10 May 2022 21:21:54 +0300 Subject: [PATCH 1/2] cljfmt-compatible indenting for some forms --- doc/clojure.txt | 8 ++++++++ indent/clojure.vim | 15 +++++++++++++++ 2 files changed, 23 insertions(+) diff --git a/doc/clojure.txt b/doc/clojure.txt index eb3566a..1bd6018 100644 --- a/doc/clojure.txt +++ b/doc/clojure.txt @@ -113,6 +113,14 @@ clojure-mode.el: baz) < + *g:clojure_cljfmt_compat* + +Try to be (more) compatible with `cljfmt` Clojure code formatting tool. Turns +on single space indenting for forms starting with `:keywords`, `'symbols`, +`#'variables` and `@dereferences` (it affects, for instance, `(:require ...)` +clause in Clojure `ns` form). + + CLOJURE *ft-clojure-syntax* *g:clojure_syntax_keywords* diff --git a/indent/clojure.vim b/indent/clojure.vim index efe4e4d..6a9a095 100644 --- a/indent/clojure.vim +++ b/indent/clojure.vim @@ -51,6 +51,10 @@ if exists("*searchpairpos") let g:clojure_align_subforms = 0 endif + if !exists('g:clojure_cljfmt_compat') + let g:clojure_cljfmt_compat = 0 + endif + function! s:syn_id_name() return synIDattr(synID(line("."), col("."), 0), "name") endfunction @@ -322,9 +326,20 @@ if exists("*searchpairpos") return [paren[0], paren[1] + (g:clojure_align_subforms ? 0 : &shiftwidth - 1)] elseif w[1] == '_' return paren + elseif w[1] == '''' + if g:clojure_cljfmt_compat + return paren + end endif endif + " Paren indent for keywords, symbols and derefs + if w[0] =~# '[:@'']' + if g:clojure_cljfmt_compat + return paren + end + endif + " Test words without namespace qualifiers and leading reader macro " metacharacters. " From ef5038141ae0a196ef9404e26b6703621afd8ce0 Mon Sep 17 00:00:00 2001 From: dmitry kim Date: Wed, 11 May 2022 23:09:39 +0300 Subject: [PATCH 2/2] Apply suggestions from code review Co-authored-by: Alex Vear --- indent/clojure.vim | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/indent/clojure.vim b/indent/clojure.vim index 6a9a095..dcbef55 100644 --- a/indent/clojure.vim +++ b/indent/clojure.vim @@ -326,18 +326,14 @@ if exists("*searchpairpos") return [paren[0], paren[1] + (g:clojure_align_subforms ? 0 : &shiftwidth - 1)] elseif w[1] == '_' return paren - elseif w[1] == '''' - if g:clojure_cljfmt_compat - return paren - end + elseif w[1] == "'" && g:clojure_cljfmt_compat + return paren endif endif " Paren indent for keywords, symbols and derefs - if w[0] =~# '[:@'']' - if g:clojure_cljfmt_compat - return paren - end + if g:clojure_cljfmt_compat && w[0] =~# "[:@']" + return paren endif " Test words without namespace qualifiers and leading reader macro