summaryrefslogtreecommitdiffstats
path: root/indent/javascript.vim
diff options
context:
space:
mode:
authorAdam Stankiewicz <sheerun@sher.pl>2014-12-09 23:09:20 +0100
committerAdam Stankiewicz <sheerun@sher.pl>2014-12-09 23:09:20 +0100
commit4071c094c69ba8ef716f8048cac8415fc7d96e26 (patch)
treeccf17bae58ed7655d62a7bce6104f31480976dc6 /indent/javascript.vim
parent617b01a5b6aa3cadb25b2ff8639e330cfc6cf3c1 (diff)
downloadvim-polyglot-1.10.4.tar.gz
vim-polyglot-1.10.4.zip
Updatev1.10.4
Diffstat (limited to 'indent/javascript.vim')
-rw-r--r--indent/javascript.vim56
1 files changed, 56 insertions, 0 deletions
diff --git a/indent/javascript.vim b/indent/javascript.vim
index 29fba2ba..5cde88d1 100644
--- a/indent/javascript.vim
+++ b/indent/javascript.vim
@@ -15,6 +15,7 @@ setlocal nosmartindent
" Now, set up our indentation expression and keys that trigger it.
setlocal indentexpr=GetJavascriptIndent()
+setlocal formatexpr=Fixedgq(v:lnum,v:count)
setlocal indentkeys=0{,0},0),0],0\,,!^F,o,O,e
" Only define the function once.
@@ -437,3 +438,58 @@ endfunction
let &cpo = s:cpo_save
unlet s:cpo_save
+
+function! Fixedgq(lnum, count)
+ let l:tw = &tw ? &tw : 80;
+
+ let l:count = a:count
+
+ if mode() == 'i' " gq was not pressed, but tw was set
+ return 1
+ endif
+
+ if len(getline(a:lnum)) < l:tw && l:count == 1 " No need for gq
+ return 1
+ endif
+
+ " Put all the lines on one line and do normal spliting after that
+ if l:count > 1
+ while l:count > 1
+ let l:count -= 1
+ normal J
+ endwhile
+ endif
+
+ let l:winview = winsaveview()
+
+ call cursor(a:lnum, l:tw + 1)
+ let orig_breakpoint = searchpairpos(' ', '', '\.', 'bcW', '', a:lnum)
+ call cursor(a:lnum, l:tw + 1)
+ let breakpoint = searchpairpos(' ', '', '\.', 'bcW', s:skip_expr, a:lnum)
+
+ " No need for special treatment, normal gq handles edgecases better
+ if breakpoint[1] == orig_breakpoint[1]
+ call winrestview(l:winview)
+ return 1
+ endif
+
+ " Try breaking after string
+ if breakpoint[1] <= indent(a:lnum)
+ call cursor(a:lnum, l:tw + 1)
+ let breakpoint = searchpairpos('\.', '', ' ', 'cW', s:skip_expr, a:lnum)
+ endif
+
+
+ if breakpoint[1] != 0
+ call feedkeys("r\<CR>")
+ else
+ let l:count = l:count - 1
+ endif
+
+ " run gq on new lines
+ if l:count == 1
+ call feedkeys("gqq")
+ endif
+
+ return 0
+endfunction