summaryrefslogtreecommitdiffstats
path: root/indent/dart.vim
diff options
context:
space:
mode:
Diffstat (limited to 'indent/dart.vim')
-rw-r--r--indent/dart.vim26
1 files changed, 26 insertions, 0 deletions
diff --git a/indent/dart.vim b/indent/dart.vim
index af4cb7df..601abbb0 100644
--- a/indent/dart.vim
+++ b/indent/dart.vim
@@ -8,6 +8,32 @@ let b:did_indent = 1
setlocal cindent
setlocal cinoptions+=j1,J1
+setlocal indentexpr=DartIndent()
+
let b:undo_indent = 'setl cin< cino<'
+if exists("*DartIndent")
+ finish
+endif
+
+function! DartIndent()
+ " Default to cindent in most cases
+ let indentTo = cindent(v:lnum)
+
+ let previousLine = getline(prevnonblank(v:lnum - 1))
+ let currentLine = getline(v:lnum)
+
+ " Don't indent after an annotation
+ if previousLine =~# '^\s*@.*$'
+ let indentTo = indent(v:lnum - 1)
+ endif
+
+ " Indent after opening List literal
+ if previousLine =~# '\[$' && !(currentLine =~# '^\s*\]')
+ let indentTo = indent(v:lnum - 1) + &shiftwidth
+ endif
+
+ return indentTo
+endfunction
+
endif