From 4ca70b3d6a71effb1e6578c17405c05931eb0640 Mon Sep 17 00:00:00 2001
From: TaDaa <trevor002@gmail.com>
Date: Mon, 10 Dec 2018 11:39:41 -0500
Subject: [PATCH] Fixes indent and adds g:vim_vue_indent_paths for runtime
 indent overrides (example usage {'javascript':
 '../vim-javascript/indent/javascript.vim'}. Docs need updates.

---
 indent/vue.vim | 27 +++++++++++++++++----------
 1 file changed, 17 insertions(+), 10 deletions(-)

diff --git a/indent/vue.vim b/indent/vue.vim
index 24fa37c..d51f982 100644
--- a/indent/vue.vim
+++ b/indent/vue.vim
@@ -9,7 +9,13 @@ endif
 
 function! s:get_indentexpr(language)
   unlet! b:did_indent
-  execute 'runtime! indent/' . a:language . '.vim'
+  let path = ""
+  if exists('g:vim_vue_indent_paths') && has_key(g:vim_vue_indent_paths, a:language)
+    let path = g:vim_vue_indent_paths[a:language]
+  else
+    let path = '/indent/' . a:language . '.vim'
+  endif
+  execute 'runtime! ' . path
   return &indentexpr
 endfunction
 
@@ -21,6 +27,7 @@ let s:languages = [
       \   { 'name': 'css', 'pairs': ['<style', '</style>'] },
       \   { 'name': 'coffee', 'pairs': ['<script lang="coffee"', '</script>'] },
       \   { 'name': 'javascript', 'pairs': ['<script', '</script>'] },
+      \   { 'name': 'typescript', 'pairs': ['<script lang="typescript"', '</script>'] },
       \ ]
 
 for s:language in s:languages
@@ -34,31 +41,31 @@ let s:html_indent = s:get_indentexpr('html')
 
 let b:did_indent = 1
 
-setlocal indentexpr=GetVueIndent()
+setlocal indentexpr=GetVueIndent(v:lnum)
 
 if exists('*GetVueIndent')
   finish
 endif
 
-function! GetVueIndent()
+function! GetVueIndent(lnum)
   for language in s:languages
     let opening_tag_line = searchpair(language.pairs[0], '', language.pairs[1], 'bWr')
 
     if opening_tag_line
-      execute 'let indent = ' . get(language, 'indentexpr', -1)
+      let indent = language.indentexpr
       break
     endif
   endfor
 
   if exists('l:indent')
-    if (opening_tag_line == prevnonblank(v:lnum - 1) || opening_tag_line == v:lnum)
-          \ || getline(v:lnum) =~ '\v^\s*\</(script|style|template)'
+    if (opening_tag_line == prevnonblank(a:lnum - 1) || opening_tag_line == a:lnum)
+          \ || getline(a:lnum) =~ '\v^\s*\</(script|style|template)'
       return 0
     endif
   else
-    " Couldn't find language, fall back to html
-    execute 'let indent = ' . s:html_indent
+    let indent = s:html_indent
   endif
-
-  return indent
+  let g:vim_vue_last_indentexpr = indent
+  execute 'let g:vim_vue_result = ' . indent
+  return g:vim_vue_result
 endfunction