Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Browse files

[vim] vim-javascript update

  • Loading branch information...
commit 628bb34222260c0c20b08223463be56e0894c269 1 parent 6094680
@guns authored
View
70 etc/vim/bundle/vim-javascript/README.md
@@ -1,20 +1,30 @@
-# vim-javascript
+# vim-javascript v0.9.0
JavaScript bundle for vim, this bundle provides syntax and indent plugins.
-> Indentation of javascript in vim is terrible, and this is the very end of it.
+## A Quick Note on Regexes
-## Features
+Vim 7.4 was released recently, and unfortunately broke how this plugin
+handles regexes. There was no real easy way for us to fix this unless we
+completely rewrote how regexes work.
-1. very correct indentation for javascript
-2. support javascript indentation in html (provided by [lepture](https://github.com/lepture))
+Good News: There was a recent update to Vim 7.4 that fixes this issue.
+
+Make sure you are at least using Vim 7.4, with patches 1-7.
+
+If you are stuck on an older version of Vim 7.4 with no way to update,
+then simply perform the following commands to fix your current buffer:
+
+```
+:set regexpengine=1
+:syntax enable
+```
## Installation
- Install with [Vundle](https://github.com/gmarik/vundle)
-If you are not using vundle, you really should have a try.
-Edit your vimrc:
+Add to vimrc:
Bundle "pangloss/vim-javascript"
@@ -23,29 +33,49 @@ And install it:
:so ~/.vimrc
:BundleInstall
-
- Install with [pathogen](https://github.com/tpope/vim-pathogen)
-If you prefer tpope's pathogen, that's ok. Just clone it:
-
cd ~/.vim/bundle
git clone https://github.com/pangloss/vim-javascript.git
## Configuration
-[html indentation](http://www.vim.org/scripts/script.php?script_id=2075)
-provided by Andy Wokula is faster. But you need to make some configuration.
+The following variables control certain syntax highlighting features. You can
+add them to your `.vimrc` to enable/disable their features.
-Suggested configuration:
+#### javascript_enable_domhtmlcss
-```vim
-let g:html_indent_inctags = "html,body,head,tbody"
-let g:html_indent_script1 = "inc"
-let g:html_indent_style1 = "inc"
-```
+Enables HTML/CSS syntax highlighting in your JavaScript file.
+
+Default Value: 0
+
+#### b:javascript_fold
+
+Enables JavaScript code folding.
+
+Default Value: 1
+
+#### g:javascript_conceal
+
+Enables concealing characters. For example, `function` is replaced with `ƒ`
+
+Default Value: 0
+
+#### javascript_ignore_javaScriptdoc
+
+Disables JSDoc syntax highlighting
+
+Default Value: 0
+
+## Contributing
-Head over to [vim.org](http://www.vim.org/scripts/script.php?script_id=2075)
-for more information.
+This project uses the [git
+flow](http://nvie.com/posts/a-successful-git-branching-model/) model for
+development. There's [a handy git module for git
+flow](//github.com/nvie/gitflow). If you'd like to be added as a contributor,
+the price of admission is 1 pull request. Please follow the general code style
+guides (read the code) and in your pull request explain the reason for the
+proposed change and how it is valuable.
## Bug report
View
89 etc/vim/bundle/vim-javascript/Rakefile
@@ -1,89 +0,0 @@
-require 'rake'
-require 'rake/clean'
-
-files = ['syntax/javascript.vim', 'indent/javascript.vim']
-
-CLEAN.include 'tmp/*_ctags'
-
-desc "Make zip file"
-file 'javascript.zip' => files do |t|
- File.unlink t.name if File.exists?(t.name)
- system('zip','-q',t.name,*t.prerequisites)
-end
-
-desc "Make vimball"
-file 'javascript.vba' => files do |t|
- File.unlink t.name if File.exists?(t.name)
- File.open(t.name,"w") do |out|
- out.puts '" Vimball Archiver by Charles E. Campbell, Jr., Ph.D.'
- out.puts 'UseVimball'
- out.puts 'finish'
- t.prerequisites.each do |name|
- File.open(name) do |file|
- file.each_line {}
- out.puts name
- out.puts file.lineno
- file.rewind
- file.each_line {|l|out.puts l}
- end
- end
- end
-end
-
-desc "Install"
-task :install do
- vimfiles = if ENV['VIMFILES']
- ENV['VIMFILES']
- elsif RUBY_PLATFORM =~ /(win|w)32$/
- File.expand_path("~/vimfiles")
- else
- File.expand_path("~/.vim")
- end
-
- puts "Installing javascript.vim"
- files.each do |file|
- target_file = File.join(vimfiles, file)
- FileUtils.mkdir_p(File.dirname(target_file))
- FileUtils.rm(target_file) rescue nil
- FileUtils.cp(file, target_file)
- puts " Copied #{file} to #{target_file}"
- end
-end
-
-desc "Copy ~/.ctags to tmp/original_ctags"
-task :get_original_ctags do
- if File.exists?(File.expand_path("~/.ctags"))
- File.unlink('tmp/original_ctags') if File.exists?('tmp/original_ctags')
- FileUtils.cp(File.expand_path("~/.ctags"), 'tmp/original_ctags')
- elsif not File.exists?("tmp/original_ctags")
- File.open("tmp/original_ctags", "w") { }
- end
-end
-
-desc "Combine tmp/original_ctags and extras/ctags"
-file 'tmp/combined_ctags' => ['tmp/original_ctags', 'extras/ctags'] do |t|
- begin_string = '# Begin vim-javascript generated section'
- end_string = '# End vim-javascript generated section'
- File.unlink t.name if File.exists?(t.name)
- File.open(t.name,"w") do |out|
- orig = File.read('tmp/original_ctags')
- orig.each_line.inject(true) do |can_print, line|
- can_print = false if line.chomp == begin_string
- out.puts line if can_print
- can_print or line.chomp == end_string
- end
- out.puts begin_string
- out.puts "# generated at #{ Time.now }"
- out.puts File.read('extras/ctags')
- out.puts end_string
- end
-end
-
-desc "Add better javascript support to ctags"
-task :ctags => [:get_original_ctags, 'tmp/combined_ctags'] do
- FileUtils.cp('tmp/combined_ctags', File.expand_path('~/.ctags'))
-end
-
-task 'zip' => 'javascript.zip'
-task 'vimball' => 'javascript.vba'
-task :default => [:zip, :vimball]
View
7 etc/vim/bundle/vim-javascript/ftdetect/javascript.vim
@@ -2,3 +2,10 @@ au BufNewFile,BufRead *.js setf javascript
au BufNewFile,BufRead *.jsm setf javascript
au BufNewFile,BufRead *.json setf javascript
au BufNewFile,BufRead Jakefile setf javascript
+
+fun! s:SelectJavascript()
+ if getline(1) =~# '^#!.*/bin/env\s\+node\>'
+ set ft=javascript
+ endif
+endfun
+au BufNewFile,BufRead * call s:SelectJavascript()
View
539 etc/vim/bundle/vim-javascript/indent/html.vim
@@ -1,539 +0,0 @@
-" Vim indent script for HTML
-" General: "{{{
-" File: html.vim (Vimscript #2075)
-" Author: Andy Wokula <anwoku@yahoo.de>
-" Last Change: 2012 Jun 05
-" Last Changed By: Hsiaoming Yang <lepture@me.com>
-" Version: 0.8
-" Vim Version: Vim7
-" Description:
-" Improved version of the distributed html indent script, faster on a
-" range of lines.
-"
-" Customization:
-" This section is about variables you can set in your vimrc.
-"
-" - You can set the indent for the first line after <script> and <style>
-" "blocktags" (default "zero"):
-"
-" :let g:html_indent_script1 = "inc"
-" :let g:html_indent_style1 = "inc"
-"
-" VALUE MEANING
-" "zero" zero indent
-" "auto" auto indent (same indent as the blocktag)
-" "inc" auto indent + one indent step
-"
-" - Many tags increase the indent for what follows per default (see
-" "Add Indent Tags" below in this script). You can add further tags with
-"
-" :let g:html_indent_inctags = "html,body,head,tbody"
-"
-" You can also remove such tags with
-"
-" :let g:html_indent_autotags = "th,td,tr,tfoot,thead"
-"
-" Default value is empty for both variables. Note: the initial "inctags"
-" are only defined once per Vim session.
-"
-" User variables are only read when the script is sourced. To enable your
-" changes during a session, you can manually do
-" :call HtmlIndent_CheckUserSettings()
-" if you don't want to reload the html file.
-"
-" Detail:
-" Calculation of indent inside "blocktags" with "alien" content:
-" BLOCKTAG INDENT EXPR WHEN APPLICABLE
-" <script> : {customizable} if first line of block
-" : cindent(v:lnum) if attributes empty or contain "java"
-" : -1 else (vbscript, tcl, ...)
-" <style> : {customizable} if first line of block
-" : GetCSSIndent() else
-" <!-- --> : -1
-"
-" Credits:
-" indent/html.vim (2006 Jun 05) from J. Zellner
-" indent/css.vim (2006 Dec 20) from N. Weibull
-"
-" History:
-" 2011 Sep 09 added HTML5 tags (thx to J. Zuckerman)
-" 2012 Jun 05 added JavaScript Indention (thx to Hsiaoming Yang)
-" }}}
-
-" Init Folklore, check user settings (2nd time ++) "{{{
-if exists("b:did_indent")
- finish
-endif
-
-" Initial indent/javascript before set did_indent = 1
-ru! indent/javascript.vim
-
-let b:did_indent = 1
-
-setlocal indentexpr=HtmlIndent()
-setlocal indentkeys=o,O,<Return>,<>>,{,},!^F
-
-let b:indent = {"lnum": -1}
-let b:undo_indent = "set inde< indk<| unlet b:indent"
-
-" Load Once:
-if exists("*HtmlIndent")
- call HtmlIndent_CheckUserSettings()
- finish
-endif
-
-let s:cpo_save = &cpo
-set cpo-=C
-"}}}
-
-func! HtmlIndent_CheckUserSettings() "{{{
- if exists("g:html_indent_inctags")
- call s:AddITags(split(g:html_indent_inctags, ","))
- endif
- if exists("g:html_indent_autotags")
- call s:RemoveITags(split(g:html_indent_autotags, ","))
- endif
-
- let indone = {"zero": 0
- \,"auto": "indent(prevnonblank(v:lnum-1))"
- \,"inc": "b:indent.blocktagind + &shiftwidth"}
- if exists("g:html_indent_script1")
- let s:js1indent = get(indone, g:html_indent_script1, indone.zero)
- endif
- if exists("g:html_indent_style1")
- let s:css1indent = get(indone, g:html_indent_style1, indone.zero)
- endif
-endfunc "}}}
-
-" Init Script Vars "{{{
-let s:usestate = 1
-let s:css1indent = 0
-let s:js1indent = 0
-" not to be changed:
-let s:endtags = [0,0,0,0,0,0,0,0] " some places unused
-let s:newstate = {}
-let s:countonly = 0
-"}}}
-func! s:AddITags(taglist) "{{{
- for itag in a:taglist
- let s:indent_tags[itag] = 1
- let s:indent_tags['/'.itag] = -1
- endfor
-endfunc "}}}
-func! s:AddBlockTag(tag, id, ...) "{{{
- if !(a:id >= 2 && a:id < 2+len(s:endtags))
- return
- endif
- let s:indent_tags[a:tag] = a:id
- if a:0 == 0
- let s:indent_tags['/'.a:tag] = -a:id
- let s:endtags[a:id-2] = "</".a:tag.">"
- else
- let s:indent_tags[a:1] = -a:id
- let s:endtags[a:id-2] = a:1
- endif
-endfunc "}}}
-func! s:RemoveITags(taglist) "{{{
- " remove itags (protect blocktags from being removed)
- for itag in a:taglist
- if !has_key(s:indent_tags, itag) || s:indent_tags[itag] != 1
- continue
- endif
- unlet s:indent_tags[itag]
- if itag =~ '^\w\+$'
- unlet s:indent_tags["/".itag]
- endif
- endfor
-endfunc "}}}
-" Add Indent Tags: {{{
-if !exists("s:indent_tags")
- let s:indent_tags = {}
-endif
-
-" old tags:
-call s:AddITags(['a', 'abbr', 'acronym', 'address', 'b', 'bdo', 'big',
- \ 'blockquote', 'button', 'caption', 'center', 'cite', 'code', 'colgroup',
- \ 'del', 'dfn', 'dir', 'div', 'dl', 'em', 'fieldset', 'font', 'form',
- \ 'frameset', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'i', 'iframe', 'ins', 'kbd',
- \ 'label', 'legend', 'map', 'menu', 'noframes', 'noscript', 'object', 'ol',
- \ 'optgroup', 'q', 's', 'samp', 'select', 'small', 'span', 'strong', 'sub',
- \ 'sup', 'table', 'textarea', 'title', 'tt', 'u', 'ul', 'var', 'th', 'td',
- \ 'tr', 'tfoot', 'thead'])
-
-" tags added 2011 Sep 09 (especially HTML5 tags):
-call s:AddITags(['area', 'article', 'aside', 'audio', 'bdi', 'canvas',
- \ 'command', 'datalist', 'details', 'embed', 'figure', 'footer',
- \ 'header', 'group', 'keygen', 'mark', 'math', 'meter', 'nav', 'output',
- \ 'progress', 'ruby', 'section', 'svg', 'texture', 'time', 'video',
- \ 'wbr', 'text'])
-
-"}}}
-" Add Block Tags: contain alien content "{{{
-call s:AddBlockTag('pre', 2)
-call s:AddBlockTag('script', 3)
-call s:AddBlockTag('style', 4)
-call s:AddBlockTag('<!--', 5, '-->')
-"}}}
-
-func! s:CountITags(...) "{{{
-
- " relative indent steps for current line [unit &sw]:
- let s:curind = 0
- " relative indent steps for next line [unit &sw]:
- let s:nextrel = 0
-
- if a:0==0
- let s:block = s:newstate.block
- let tmpline = substitute(s:curline, '<\zs\/\=\w\+\>\|<!--\|-->', '\=s:CheckTag(submatch(0))', 'g')
- if s:block == 3
- let s:newstate.scripttype = s:GetScriptType(matchstr(tmpline, '\C.*<SCRIPT\>\zs[^>]*'))
- endif
- let s:newstate.block = s:block
- else
- let s:block = 0 " assume starting outside of a block
- let s:countonly = 1 " don't change state
- let tmpline = substitute(s:altline, '<\zs\/\=\w\+\>\|<!--\|-->', '\=s:CheckTag(submatch(0))', 'g')
- let s:countonly = 0
- endif
-endfunc "}}}
-func! s:CheckTag(itag) "{{{
- " "tag" or "/tag" or "<!--" or "-->"
- let ind = get(s:indent_tags, a:itag)
- if ind == -1
- " closing tag
- if s:block != 0
- " ignore itag within a block
- return "foo"
- endif
- if s:nextrel == 0
- let s:curind -= 1
- else
- let s:nextrel -= 1
- endif
- " if s:curind >= 1
- " let s:curind -= 1
- " else
- " let s:nextrel -= 1
- " endif
- elseif ind == 1
- " opening tag
- if s:block != 0
- return "foo"
- endif
- let s:nextrel += 1
- elseif ind != 0
- " block-tag (opening or closing)
- return s:Blocktag(a:itag, ind)
- endif
- " else ind==0 (other tag found): keep indent
- return "foo" " no matter
-endfunc "}}}
-func! s:Blocktag(blocktag, ind) "{{{
- if a:ind > 0
- " a block starts here
- if s:block != 0
- " already in a block (nesting) - ignore
- " especially ignore comments after other blocktags
- return "foo"
- endif
- let s:block = a:ind " block type
- if s:countonly
- return "foo"
- endif
- let s:newstate.blocklnr = v:lnum
- " save allover indent for the endtag
- let s:newstate.blocktagind = b:indent.baseindent + (s:nextrel + s:curind) * &shiftwidth
- if a:ind == 3
- return "SCRIPT" " all except this must be lowercase
- " line is to be checked again for the type attribute
- endif
- else
- let s:block = 0
- " we get here if starting and closing block-tag on same line
- endif
- return "foo"
-endfunc "}}}
-func! s:GetScriptType(str) "{{{
- if a:str == "" || a:str =~ "java"
- return "javascript"
- else
- return ""
- endif
-endfunc "}}}
-
-func! s:FreshState(lnum) "{{{
- " Look back in the file (lines 1 to a:lnum-1) to calc a state for line
- " a:lnum. A state is to know ALL relevant details about the lines
- " 1..a:lnum-1, initial calculating (here!) can be slow, but updating is
- " fast (incremental).
- " State:
- " lnum last indented line == prevnonblank(a:lnum - 1)
- " block = 0 a:lnum located within special tag: 0:none, 2:<pre>,
- " 3:<script>, 4:<style>, 5:<!--
- " baseindent use this indent for line a:lnum as a start - kind of
- " autoindent (if block==0)
- " scripttype = '' type attribute of a script tag (if block==3)
- " blocktagind indent for current opening (get) and closing (set)
- " blocktag (if block!=0)
- " blocklnr lnum of starting blocktag (if block!=0)
- " inattr line {lnum} starts with attributes of a tag
- let state = {}
- let state.lnum = prevnonblank(a:lnum - 1)
- let state.scripttype = ""
- let state.blocktagind = -1
- let state.block = 0
- let state.baseindent = 0
- let state.blocklnr = 0
- let state.inattr = 0
-
- if state.lnum == 0
- return state
- endif
-
- " Heuristic:
- " remember startline state.lnum
- " look back for <pre, </pre, <script, </script, <style, </style tags
- " remember stopline
- " if opening tag found,
- " assume a:lnum within block
- " else
- " look back in result range (stopline, startline) for comment
- " \ delimiters (<!--, -->)
- " if comment opener found,
- " assume a:lnum within comment
- " else
- " assume usual html for a:lnum
- " if a:lnum-1 has a closing comment
- " look back to get indent of comment opener
- " FI
-
- " look back for blocktag
- call cursor(a:lnum, 1)
- let [stopline, stopcol] = searchpos('\c<\zs\/\=\%(pre\>\|script\>\|style\>\)', "bW")
- " fugly ... why isn't there searchstr()
- let tagline = tolower(getline(stopline))
- let blocktag = matchstr(tagline, '\/\=\%(pre\>\|script\>\|style\>\)', stopcol-1)
- if stopline > 0 && blocktag[0] != "/"
- " opening tag found, assume a:lnum within block
- let state.block = s:indent_tags[blocktag]
- if state.block == 3
- let state.scripttype = s:GetScriptType(matchstr(tagline, '\>[^>]*', stopcol))
- endif
- let state.blocklnr = stopline
- " check preceding tags in the line:
- let s:altline = tagline[: stopcol-2]
- call s:CountITags(1)
- let state.blocktagind = indent(stopline) + (s:curind + s:nextrel) * &shiftwidth
- return state
- elseif stopline == state.lnum
- " handle special case: previous line (= state.lnum) contains a
- " closing blocktag which is preceded by line-noise;
- " blocktag == "/..."
- let swendtag = match(tagline, '^\s*</') >= 0
- if !swendtag
- let [bline, bcol] = searchpos('<'.blocktag[1:].'\>', "bW")
- let s:altline = tolower(getline(bline)[: bcol-2])
- call s:CountITags(1)
- let state.baseindent = indent(bline) + (s:nextrel+s:curline) * &shiftwidth
- return state
- endif
- endif
-
- " else look back for comment
- call cursor(a:lnum, 1)
- let [comline, comcol, found] = searchpos('\(<!--\)\|-->', 'bpW', stopline)
- if found == 2
- " comment opener found, assume a:lnum within comment
- let state.block = 5
- let state.blocklnr = comline
- " check preceding tags in the line:
- let s:altline = tolower(getline(comline)[: comcol-2])
- call s:CountITags(1)
- let state.blocktagind = indent(comline) + (s:curind + s:nextrel) * &shiftwidth
- return state
- endif
-
- " else within usual html
- let s:altline = tolower(getline(state.lnum))
- " check a:lnum-1 for closing comment (we need indent from the opening line)
- let comcol = stridx(s:altline, '-->')
- if comcol >= 0
- call cursor(state.lnum, comcol+1)
- let [comline, comcol] = searchpos('<!--', 'bW')
- if comline == state.lnum
- let s:altline = s:altline[: comcol-2]
- else
- let s:altline = tolower(getline(comline)[: comcol-2])
- endif
- call s:CountITags(1)
- let state.baseindent = indent(comline) + (s:nextrel+s:curline) * &shiftwidth
- return state
- " TODO check tags that follow "-->"
- endif
-
- " else no comments
- call s:CountITags(1)
- let state.baseindent = indent(state.lnum) + s:nextrel * &shiftwidth
- " line starts with end tag
- let swendtag = match(s:altline, '^\s*</') >= 0
- if !swendtag
- let state.baseindent += s:curind * &shiftwidth
- endif
- return state
-endfunc "}}}
-
-func! s:Alien2() "{{{
- " <pre> block
- return -1
-endfunc "}}}
-func! s:Alien3() "{{{
- " <script> javascript
- if prevnonblank(v:lnum-1) == b:indent.blocklnr
- " indent for the first line after <script>
- return eval(s:js1indent)
- endif
- if b:indent.scripttype == "javascript"
- "return cindent(v:lnum)
- return GetJavascriptIndent()
- else
- return -1
- endif
-endfunc "}}}
-func! s:Alien4() "{{{
- " <style>
- if prevnonblank(v:lnum-1) == b:indent.blocklnr
- " indent for first content line
- return eval(s:css1indent)
- endif
- return s:CSSIndent()
-endfunc
-
-func! s:CSSIndent() "{{{
- " adopted $VIMRUNTIME/indent/css.vim
- if getline(v:lnum) =~ '^\s*[*}]'
- return cindent(v:lnum)
- endif
- let minline = b:indent.blocklnr
- let pnum = s:css_prevnoncomment(v:lnum - 1, minline)
- if pnum <= minline
- " < is to catch errors
- " indent for first content line after comments
- return eval(s:css1indent)
- endif
- let ind = indent(pnum) + s:css_countbraces(pnum, 1) * &sw
- let pline = getline(pnum)
- if pline =~ '}\s*$'
- let ind -= (s:css_countbraces(pnum, 0) - (pline =~ '^\s*}')) * &sw
- endif
- return ind
-endfunc "}}}
-func! s:css_prevnoncomment(lnum, stopline) "{{{
- " caller starts from a line a:lnum-1 that is not a comment
- let lnum = prevnonblank(a:lnum)
- let ccol = match(getline(lnum), '\*/')
- if ccol < 0
- return lnum
- endif
- call cursor(lnum, ccol+1)
- let lnum = search('/\*', 'bW', a:stopline)
- if indent(".") == virtcol(".")-1
- return prevnonblank(lnum-1)
- else
- return lnum
- endif
-endfunc "}}}
-func! s:css_countbraces(lnum, count_open) "{{{
- let brs = substitute(getline(a:lnum),'[''"].\{-}[''"]\|/\*.\{-}\*/\|/\*.*$\|[^{}]','','g')
- let n_open = 0
- let n_close = 0
- for brace in split(brs, '\zs')
- if brace == "{"
- let n_open += 1
- elseif brace == "}"
- if n_open > 0
- let n_open -= 1
- else
- let n_close += 1
- endif
- endif
- endfor
- return a:count_open ? n_open : n_close
-endfunc "}}}
-
-"}}}
-func! s:Alien5() "{{{
- " <!-- -->
- return -1
-endfunc "}}}
-
-func! HtmlIndent() "{{{
- let s:curline = tolower(getline(v:lnum))
-
- let s:newstate = {}
- let s:newstate.lnum = v:lnum
-
- " is the first non-blank in the line the start of a tag?
- let swendtag = match(s:curline, '^\s*</') >= 0
-
- if prevnonblank(v:lnum-1) == b:indent.lnum && s:usestate
- " use state (continue from previous line)
- else
- " start over (know nothing)
- let b:indent = s:FreshState(v:lnum)
- endif
-
- if b:indent.block >= 2
- " within block
- let endtag = s:endtags[b:indent.block-2]
- let blockend = stridx(s:curline, endtag)
- if blockend >= 0
- " block ends here
- let s:newstate.block = 0
- " calc indent for REST OF LINE (may start more blocks):
- let s:curline = strpart(s:curline, blockend+strlen(endtag))
- call s:CountITags()
- if swendtag && b:indent.block != 5
- let indent = b:indent.blocktagind + s:curind * &shiftwidth
- let s:newstate.baseindent = indent + s:nextrel * &shiftwidth
- else
- let indent = s:Alien{b:indent.block}()
- let s:newstate.baseindent = b:indent.blocktagind + s:nextrel * &shiftwidth
- endif
- call extend(b:indent, s:newstate, "force")
- return indent
- else
- " block continues
- " indent this line with alien method
- let indent = s:Alien{b:indent.block}()
- call extend(b:indent, s:newstate, "force")
- return indent
- endif
- else
- " not within a block - within usual html
- " if < 2 then always 0
- let s:newstate.block = b:indent.block
- call s:CountITags()
- if swendtag
- let indent = b:indent.baseindent + s:curind * &shiftwidth
- let s:newstate.baseindent = indent + s:nextrel * &shiftwidth
- else
- let indent = b:indent.baseindent
- let s:newstate.baseindent = indent + (s:curind + s:nextrel) * &shiftwidth
- endif
- call extend(b:indent, s:newstate, "force")
- return indent
- endif
-
-endfunc "}}}
-
-" check user settings (first time), clear cpo, Modeline: {{{1
-
-" DEBUG:
-com! -nargs=* IndHtmlLocal <args>
-
-call HtmlIndent_CheckUserSettings()
-
-let &cpo = s:cpo_save
-unlet s:cpo_save
-
-" vim:set fdm=marker ts=8:
View
15 etc/vim/bundle/vim-javascript/indent/javascript.vim
@@ -57,13 +57,16 @@ let s:msl_regex = '\%([\\*+/.:([]\|\%(<%\)\@<![=-]\|\W[|&?]\|||\|&&\)' . s:line_
let s:one_line_scope_regex = '\<\%(if\|else\|for\|while\)\>[^{;]*' . s:line_term
" Regex that defines blocks.
-let s:block_regex = '\%({\)\s*\%(|\%([*@]\=\h\w*,\=\s*\)\%(,\s*[*@]\=\h\w*\)*|\)\=' . s:line_term
+let s:block_regex = '\%([{[]\)\s*\%(|\%([*@]\=\h\w*,\=\s*\)\%(,\s*[*@]\=\h\w*\)*|\)\=' . s:line_term
let s:var_stmt = '^\s*var'
let s:comma_first = '^\s*,'
let s:comma_last = ',\s*$'
+let s:ternary = '^\s\+[?|:]'
+let s:ternary_q = '^\s\+?'
+
" 2. Auxiliary Functions {{{1
" ======================
@@ -79,7 +82,7 @@ endfunction
" Check if the character at lnum:col is inside a multi-line comment.
function s:IsInMultilineComment(lnum, col)
- return synIDattr(synID(a:lnum, a:col, 1), 'name') =~ s:syng_multiline
+ return !s:IsLineComment(a:lnum, a:col) && synIDattr(synID(a:lnum, a:col, 1), 'name') =~ s:syng_multiline
endfunction
" Check if the character at lnum:col is a line comment.
@@ -339,6 +342,14 @@ function GetJavascriptIndent()
return indent(prevline) - &sw
endif
+ if (line =~ s:ternary)
+ if (getline(prevline) =~ s:ternary_q)
+ return indent(prevline)
+ else
+ return indent(prevline) + &sw
+ endif
+ endif
+
" If we are in a multi-line comment, cindent does the right thing.
if s:IsInMultilineComment(v:lnum, 1) && !s:IsLineComment(v:lnum, 1)
return cindent(v:lnum)
View
133 etc/vim/bundle/vim-javascript/syntax/javascript.vim
@@ -1,11 +1,7 @@
" Vim syntax file
" Language: JavaScript
-" Maintainer: Josh Perez <josh at goatslacker.com>
-" Version: 0.7.9
+" Maintainer: vim-javascript community
" URL: https://github.com/pangloss/vim-javascript
-"
-" TODO:
-" - Add the HTML syntax inside the JSDoc
if !exists("main_syntax")
if version < 600
@@ -31,6 +27,15 @@ setlocal iskeyword+=$
syntax sync fromstart
+syntax match jsNoise /\%(:\|,\|\;\|\.\)/
+
+"" Program Keywords
+syntax keyword jsStorageClass const var let
+syntax keyword jsOperator delete instanceof typeof void new in
+syntax match jsOperator /\(!\||\|&\|+\|-\|<\|>\|=\|%\|\/\|*\|\~\|\^\)/
+syntax keyword jsBooleanTrue true
+syntax keyword jsBooleanFalse false
+
"" JavaScript comments
syntax keyword jsCommentTodo TODO FIXME XXX TBD contained
syntax region jsLineComment start=+\/\/+ end=+$+ keepend contains=jsCommentTodo,@Spell
@@ -50,15 +55,15 @@ if !exists("javascript_ignore_javaScriptdoc")
syntax region jsDocComment matchgroup=jsComment start="/\*\*\s*" end="\*/" contains=jsDocTags,jsCommentTodo,jsCvsTag,@jsHtml,@Spell fold
" tags containing a param
- syntax match jsDocTags contained "@\(augments\|base\|borrows\|class\|constructs\|default\|exception\|exports\|extends\|file\|member\|memberOf\|methodOf\|module\|name\|namespace\|optional\|requires\|title\|throws\|version\)\>" nextgroup=jsDocParam skipwhite
+ syntax match jsDocTags contained "@\(alias\|augments\|borrows\|class\|constructs\|default\|defaultvalue\|emits\|exception\|exports\|extends\|file\|fires\|kind\|listens\|member\|memberOf\|mixes\|module\|name\|namespace\|requires\|throws\|var\|variation\|version\)\>" nextgroup=jsDocParam skipwhite
" tags containing type and param
- syntax match jsDocTags contained "@\(argument\|param\|property\)\>" nextgroup=jsDocType skipwhite
+ syntax match jsDocTags contained "@\(arg\|argument\|param\|property\)\>" nextgroup=jsDocType skipwhite
" tags containing type but no param
- syntax match jsDocTags contained "@\(type\|return\|returns\|api\)\>" nextgroup=jsDocTypeNoParam skipwhite
+ syntax match jsDocTags contained "@\(callback\|enum\|external\|this\|type\|typedef\|return\|returns\)\>" nextgroup=jsDocTypeNoParam skipwhite
" tags containing references
- syntax match jsDocTags contained "@\(lends\|link\|see\)\>" nextgroup=jsDocSeeTag skipwhite
+ syntax match jsDocTags contained "@\(lends\|see\)\>" nextgroup=jsDocSeeTag skipwhite
" other tags (no extra syntax)
- syntax match jsDocTags contained "@\(access\|addon\|alias\|author\|beta\|constant\|const\|constructor\|copyright\|deprecated\|description\|event\|example\|exec\|field\|fileOverview\|fileoverview\|function\|global\|ignore\|inner\|license\|overview\|private\|protected\|project\|public\|readonly\|since\|static\)\>"
+ syntax match jsDocTags contained "@\(abstract\|access\|author\|classdesc\|constant\|const\|constructor\|copyright\|deprecated\|desc\|description\|event\|example\|fileOverview\|function\|global\|ignore\|inner\|instance\|license\|method\|mixin\|overview\|private\|protected\|public\|readonly\|since\|static\|todo\|summary\|undocumented\|virtual\)\>"
syntax region jsDocType start="{" end="}" oneline contained nextgroup=jsDocParam skipwhite
syntax match jsDocType contained "\%(#\|\"\|\w\|\.\|:\|\/\)\+" nextgroup=jsDocParam skipwhite
@@ -73,6 +78,7 @@ endif "" JSDoc end
syntax case match
"" Syntax in the JavaScript code
+syntax match jsFuncCall /\k\+\%(\s*(\)\@=/
syntax match jsSpecial "\v\\%(0|\\x\x\{2\}\|\\u\x\{4\}\|\c[A-Z]|.)"
syntax region jsStringD start=+"+ skip=+\\\\\|\\$"+ end=+"+ contains=jsSpecial,@htmlPreproc
syntax region jsStringS start=+'+ skip=+\\\\\|\\$'+ end=+'+ contains=jsSpecial,@htmlPreproc
@@ -83,41 +89,45 @@ syntax match jsRegexpQuantifier "\v\\@<!%([?*+]|\{\d+%(,|,\d+)?})\??" containe
syntax match jsRegexpOr "\v\<@!\|" contained
syntax match jsRegexpMod "\v\(@<=\?[:=!>]" contained
syntax cluster jsRegexpSpecial contains=jsRegexpBoundary,jsRegexpBackRef,jsRegexpQuantifier,jsRegexpOr,jsRegexpMod
-syntax region jsRegexpGroup start="\\\@<!(" matchgroup=jsRegexGroup end="\\\@<!)" contained contains=jsRegexpCharClass,@jsRegexpSpecial
-syntax region jsRegexpString start=+\(\(\(return\|case\)\s\+\)\@<=\|\(\([)\]"']\|\d\|\w\)\s*\)\@<!\)/\(\*\|/\)\@!+ skip=+\\\\\|\\/+ end=+/[gimy]\{,4}+ contains=jsSpecial,jsRegexpCharClass,jsRegexpGroup,@jsRegexpSpecial,@htmlPreproc oneline
+syntax region jsRegexpGroup start="\\\@<!(" end="\\\@<!)" contained contains=jsRegexpCharClass,@jsRegexpSpecial keepend
+syntax region jsRegexpString start=+\(\(\(return\|case\)\s\+\)\@<=\|\(\([)\]"']\|\d\|\w\)\s*\)\@<!\)/\(\*\|/\)\@!+ skip=+\\\\\|\\/+ end=+/[gimy]\{,4}+ contains=jsSpecial,jsRegexpCharClass,jsRegexpGroup,@jsRegexpSpecial,@htmlPreproc oneline keepend
syntax match jsNumber /\<-\=\d\+L\=\>\|\<0[xX]\x\+\>/
+syntax keyword jsNumber Infinity
syntax match jsFloat /\<-\=\%(\d\+\.\d\+\|\d\+\.\|\.\d\+\)\%([eE][+-]\=\d\+\)\=\>/
-syntax match jsLabel /\<[a-zA-Z_$][0-9a-zA-Z_$\-]*\(\s*:\)\@=/
+syntax match jsObjectKey /\<[a-zA-Z_$][0-9a-zA-Z_$]*\(\s*:\)\@=/ contains=jsFunctionKey
+syntax match jsFunctionKey /\<[a-zA-Z_$][0-9a-zA-Z_$]*\(\s*:\s*function\s*\)\@=/ contained
"" JavaScript Prototype
syntax keyword jsPrototype prototype
-"" Program Keywords
-syntax keyword jsSource import export
-syntax keyword jsCommonJS require module exports
-syntax keyword jsType const undefined var void yield
-syntax keyword jsOperator delete new in instanceof let typeof
-syntax keyword jsBoolean true false
-
if g:javascript_conceal == 1
syntax keyword jsNull null conceal cchar=ø
syntax keyword jsThis this conceal cchar=@
syntax keyword jsReturn return conceal cchar=⇚
+ syntax keyword jsUndefined undefined conceal cchar=¿
+ syntax keyword jsNan NaN conceal cchar=ℕ
else
syntax keyword jsNull null
syntax keyword jsThis this
syntax keyword jsReturn return
+ syntax keyword jsUndefined undefined
+ syntax keyword jsNan NaN
endif
"" Statement Keywords
-syntax keyword jsConditional if else
+syntax keyword jsStatement break continue with
+syntax keyword jsConditional if else switch
syntax keyword jsRepeat do while for
-syntax keyword jsBranch break continue switch case default
-syntax keyword jsStatement try catch throw with finally
+syntax keyword jsLabel case default
+syntax keyword jsKeyword yield
+syntax keyword jsException try catch throw finally
+
+syntax keyword jsGlobalObjects Array Boolean Date Function Iterator Number Object RegExp String Proxy ParallelArray ArrayBuffer DataView Float32Array Float64Array Int16Array Int32Array Int8Array Uint16Array Uint32Array Uint8Array Uint8ClampedArray Intl JSON Math console document window
+syntax match jsGlobalObjects /\%(Intl\.\)\@<=\(Collator\|DateTimeFormat\|NumberFormat\)/
-syntax keyword jsGlobalObjects Array Boolean Date Function Infinity JavaArray JavaClass JavaObject JavaPackage Math Number NaN Object Packages RegExp String Undefined java netscape sun
+syntax keyword jsExceptions Error EvalError InternalError RangeError ReferenceError StopIteration SyntaxError TypeError URIError
-syntax keyword jsExceptions Error EvalError RangeError ReferenceError SyntaxError TypeError URIError
+syntax keyword jsBuiltins decodeURI decodeURIComponent encodeURI encodeURIComponent eval isFinite isNaN parseFloat parseInt uneval
syntax keyword jsFutureKeys abstract enum int short boolean export interface static byte extends long super char final native synchronized class float package throws goto private transient debugger implements protected volatile double import public
@@ -171,12 +181,13 @@ endif "DOM/HTML/CSS
"" Code blocks
-syntax cluster jsExpression contains=jsComment,jsLineComment,jsDocComment,jsStringD,jsStringS,jsRegexpString,jsNumber,jsFloat,jsSource,jsCommonJS,jsThis,jsType,jsOperator,jsBoolean,jsNull,jsFunction,jsGlobalObjects,jsExceptions,jsFutureKeys,jsDomErrNo,jsDomNodeConsts,jsHtmlEvents,jsDotNotation,jsBracket,jsParen,jsBlock,jsParenError
-syntax cluster jsAll contains=@jsExpression,jsLabel,jsConditional,jsRepeat,jsBranch,jsReturn,jsStatement,jsTernaryIf
-syntax region jsBracket matchgroup=jsBracket transparent start="\[" end="\]" contains=@jsAll,jsParensErrB,jsParensErrC,jsBracket,jsParen,jsBlock,@htmlPreproc
-syntax region jsParen matchgroup=jsParen transparent start="(" end=")" contains=@jsAll,jsParensErrA,jsParensErrC,jsParen,jsBracket,jsBlock,@htmlPreproc
-syntax region jsBlock matchgroup=jsBlock transparent start="{" end="}" contains=@jsAll,jsParensErrA,jsParensErrB,jsParen,jsBracket,jsBlock,@htmlPreproc
-syntax region jsTernaryIf matchgroup=jsTernaryIfOperator start=+?+ end=+:+ contains=@jsExpression
+syntax cluster jsExpression contains=jsComment,jsLineComment,jsDocComment,jsStringD,jsStringS,jsRegexpString,jsNumber,jsFloat,jsThis,jsOperator,jsBooleanTrue,jsBooleanFalse,jsNull,jsFunction,jsGlobalObjects,jsExceptions,jsFutureKeys,jsDomErrNo,jsDomNodeConsts,jsHtmlEvents,jsDotNotation,jsBracket,jsParen,jsBlock,jsFuncCall,jsUndefined,jsNan,jsKeyword,jsStorageClass,jsPrototype,jsBuiltins,jsNoise
+syntax cluster jsAll contains=@jsExpression,jsLabel,jsConditional,jsRepeat,jsReturn,jsStatement,jsTernaryIf,jsException
+syntax region jsBracket matchgroup=jsBrackets start="\[" end="\]" contains=@jsAll,jsParensErrB,jsParensErrC,jsBracket,jsParen,jsBlock,@htmlPreproc fold
+syntax region jsParen matchgroup=jsParens start="(" end=")" contains=@jsAll,jsParensErrA,jsParensErrC,jsParen,jsBracket,jsBlock,@htmlPreproc fold
+syntax region jsBlock matchgroup=jsBraces start="{" end="}" contains=@jsAll,jsParensErrA,jsParensErrB,jsParen,jsBracket,jsBlock,jsObjectKey,@htmlPreproc fold
+syntax region jsFuncBlock matchgroup=jsFuncBraces start="{" end="}" contains=@jsAll,jsParensErrA,jsParensErrB,jsParen,jsBracket,jsBlock,@htmlPreproc contained fold
+syntax region jsTernaryIf matchgroup=jsTernaryIfOperator start=+?+ end=+:+ contains=@jsExpression,jsTernaryIf
"" catch errors caused by wrong parenthesis
syntax match jsParensError ")\|}\|\]"
@@ -190,26 +201,16 @@ if main_syntax == "javascript"
syntax sync match jsHighlight grouphere jsBlock /{/
endif
-"" Fold control
-if exists("b:javascript_fold")
- if g:javascript_conceal == 1
- syntax match jsFunction /\<function\>/ nextgroup=jsFuncName skipwhite conceal cchar=ƒ
- else
- syntax match jsFunction /\<function\>/ nextgroup=jsFuncName skipwhite
- endif
-
- syntax match jsOpAssign /=\@<!=/ nextgroup=jsFuncBlock skipwhite skipempty
- syntax region jsFuncName contained matchgroup=jsFuncName start=/\%(\$\|\w\)*\s*(/ end=/)/ contains=jsLineComment,jsComment nextgroup=jsFuncBlock skipwhite skipempty
- syntax region jsFuncBlock contained matchgroup=jsFuncBlock start="{" end="}" contains=@jsAll,jsParensErrA,jsParensErrB,jsParen,jsBracket,jsBlock fold
+if g:javascript_conceal == 1
+ syntax match jsFunction /\<function\>/ nextgroup=jsFuncName,jsFuncArgs skipwhite conceal cchar=ƒ
else
- if g:javascript_conceal == 1
- syntax keyword jsFunction function conceal cchar=ƒ
- else
- syntax keyword jsFunction function
- endif
+ syntax match jsFunction /\<function\>/ nextgroup=jsFuncName,jsFuncArgs skipwhite
endif
-
+syntax match jsFuncName contained /\<[a-zA-Z_$][0-9a-zA-Z_$]*/ nextgroup=jsFuncArgs skipwhite
+syntax region jsFuncArgs contained matchgroup=jsFuncParens start='(' end=')' contains=jsFuncArgCommas nextgroup=jsFuncBlock keepend skipwhite skipempty
+syntax match jsFuncArgCommas contained ','
+syntax keyword jsArgsObj arguments contained containedin=jsFuncBlock
" Define the default highlighting.
" For version 5.7 and earlier: only when not done already
@@ -244,32 +245,44 @@ if version >= 508 || !exists("did_javascript_syn_inits")
HiLink jsRegexpGroup jsRegexpString
HiLink jsRegexpCharClass Character
HiLink jsCharacter Character
- HiLink jsPrototype Type
+ HiLink jsPrototype Special
HiLink jsConditional Conditional
HiLink jsBranch Conditional
- HiLink jsReturn Type
+ HiLink jsLabel Label
+ HiLink jsReturn Statement
HiLink jsRepeat Repeat
HiLink jsStatement Statement
- HiLink jsFunction Function
+ HiLink jsException Exception
+ HiLink jsKeyword Keyword
+ HiLink jsFunction Type
+ HiLink jsFuncName Function
+ HiLink jsArgsObj Special
HiLink jsError Error
HiLink jsParensError Error
HiLink jsParensErrA Error
HiLink jsParensErrB Error
HiLink jsParensErrC Error
HiLink jsOperator Operator
- HiLink jsType Type
- HiLink jsThis Type
+ HiLink jsStorageClass StorageClass
+ HiLink jsThis Special
+ HiLink jsNan Number
HiLink jsNull Type
+ HiLink jsUndefined Type
HiLink jsNumber Number
- HiLink jsFloat Number
- HiLink jsBoolean Boolean
- HiLink jsLabel Label
+ HiLink jsFloat Float
+ HiLink jsBooleanTrue Boolean
+ HiLink jsBooleanFalse Boolean
+ HiLink jsNoise Noise
+ HiLink jsBrackets Noise
+ HiLink jsParens Noise
+ HiLink jsBraces Noise
+ HiLink jsFuncBraces Noise
+ HiLink jsFuncParens Noise
HiLink jsSpecial Special
- HiLink jsSource Special
- HiLink jsCommonJS Include
HiLink jsGlobalObjects Special
HiLink jsExceptions Special
HiLink jsFutureKeys Special
+ HiLink jsBuiltins Special
HiLink jsDomErrNo Constant
HiLink jsDomNodeConsts Constant
@@ -288,8 +301,8 @@ endif
" Define the htmlJavaScript for HTML syntax html.vim
"syntax clear htmlJavaScript
"syntax clear jsExpression
-syntax cluster htmlJavaScript contains=@jsAll,jsBracket,jsParen,jsBlock,jsParenError
-syntax cluster javaScriptExpression contains=@jsAll,jsBracket,jsParen,jsBlock,jsParenError,@htmlPreproc
+syntax cluster htmlJavaScript contains=@jsAll,jsBracket,jsParen,jsBlock
+syntax cluster javaScriptExpression contains=@jsAll,jsBracket,jsParen,jsBlock,@htmlPreproc
" Vim's default html.vim highlights all javascript as 'Special'
hi! def link javaScript NONE
View
0  etc/vim/bundle/vim-javascript/tmp/.keep
No changes.
Please sign in to comment.
Something went wrong with that request. Please try again.