mirror of
https://github.com/sheerun/vim-polyglot.git
synced 2025-11-08 11:33:52 -05:00
Compare commits
123 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
63119f09d1 | ||
|
|
f2ef4cedec | ||
|
|
45c1923f43 | ||
|
|
8dd0474feb | ||
|
|
e166f741ef | ||
|
|
d4fcef1aa8 | ||
|
|
7972e8eea1 | ||
|
|
6ed481e463 | ||
|
|
c1e1870a3d | ||
|
|
f0d6ecff07 | ||
|
|
15e5df246e | ||
|
|
94ababe91f | ||
|
|
080b8cdc60 | ||
|
|
e47af23f64 | ||
|
|
8f5134aef8 | ||
|
|
be8d039e02 | ||
|
|
38ce8e9cb6 | ||
|
|
55ad5a982a | ||
|
|
b2055afaa7 | ||
|
|
63a175357a | ||
|
|
25db54573a | ||
|
|
d1bfe50419 | ||
|
|
22e8e01c1e | ||
|
|
30bef582ba | ||
|
|
74d940cda3 | ||
|
|
54d2386262 | ||
|
|
a47c315b01 | ||
|
|
ff0ada0dc3 | ||
|
|
e194de5875 | ||
|
|
012cf89210 | ||
|
|
ac71777dc2 | ||
|
|
23defeb610 | ||
|
|
114a93bb7c | ||
|
|
f3ab28a287 | ||
|
|
bc3b36088e | ||
|
|
5d0150e326 | ||
|
|
cf8e31ff7f | ||
|
|
0df1bfa0c5 | ||
|
|
f7302d9262 | ||
|
|
7e38f4288a | ||
|
|
e521ba3ae2 | ||
|
|
ee4f51587d | ||
|
|
20a388cbc8 | ||
|
|
81e61a3c5d | ||
|
|
5670985b3a | ||
|
|
69eae22ea6 | ||
|
|
f8cee0172b | ||
|
|
c6936aeeb1 | ||
|
|
6bb111eaba | ||
|
|
dfecb63078 | ||
|
|
00015bd105 | ||
|
|
d821de3142 | ||
|
|
a3bdbcdb3c | ||
|
|
34e01b8b62 | ||
|
|
1e533e5982 | ||
|
|
56121b4e27 | ||
|
|
9c3c0bc082 | ||
|
|
8500ae8bb9 | ||
|
|
d09a56a494 | ||
|
|
abca7c2014 | ||
|
|
8b6c06e723 | ||
|
|
a86c0179eb | ||
|
|
22095febb7 | ||
|
|
ff066ee9f0 | ||
|
|
5b38663027 | ||
|
|
f0b38f2c1d | ||
|
|
6676d61f61 | ||
|
|
f0da1a9f4d | ||
|
|
298d6b6356 | ||
|
|
62f004c3da | ||
|
|
c73ea49ecb | ||
|
|
b2be47befc | ||
|
|
de38ccabbd | ||
|
|
f0f49cf0fa | ||
|
|
224a6348f9 | ||
|
|
00c3f02945 | ||
|
|
df34b4b4fa | ||
|
|
f3804b0892 | ||
|
|
685aeaaeb1 | ||
|
|
a9cc6fd218 | ||
|
|
3c47f192b5 | ||
|
|
c8b350432c | ||
|
|
cdb8e233c2 | ||
|
|
ff282f610f | ||
|
|
74cb75bedd | ||
|
|
42529540df | ||
|
|
a688c66a04 | ||
|
|
0a7c62b3b2 | ||
|
|
c7b5826d53 | ||
|
|
1d348d0c2d | ||
|
|
6a15d48ed4 | ||
|
|
24f0581a96 | ||
|
|
33c9484671 | ||
|
|
55287efdf7 | ||
|
|
d757bfd643 | ||
|
|
8ec73a3a89 | ||
|
|
b2ee28374b | ||
|
|
68b2748af1 | ||
|
|
14dc82fc4e | ||
|
|
e86e0ad36e | ||
|
|
45ab4d80dd | ||
|
|
9cd6e8533b | ||
|
|
43ecbfae50 | ||
|
|
f77702c090 | ||
|
|
e558a218c6 | ||
|
|
16774887a3 | ||
|
|
e7dc03dc01 | ||
|
|
aee260a301 | ||
|
|
6b540d7db0 | ||
|
|
35ea4d2b90 | ||
|
|
967486dd71 | ||
|
|
e8454d66ab | ||
|
|
a60e299a3c | ||
|
|
b8a5504021 | ||
|
|
cea0d08a06 | ||
|
|
43085dc02f | ||
|
|
4d8423c962 | ||
|
|
e204a7223b | ||
|
|
7a0f2d974f | ||
|
|
15aeea662e | ||
|
|
d15651463a | ||
|
|
0c79dd3e73 | ||
|
|
4e95df7c7e |
7
.gitattributes
vendored
7
.gitattributes
vendored
@@ -1,7 +0,0 @@
|
|||||||
.gitignore export-ignore
|
|
||||||
.gitattributes export-ignore
|
|
||||||
README.md export-ignore
|
|
||||||
/spec export-ignore
|
|
||||||
Gemfile export-ignore
|
|
||||||
Gemfile.lock export-ignore
|
|
||||||
.travis.yml export-ignore
|
|
||||||
21
.github/workflows/test.yml
vendored
Normal file
21
.github/workflows/test.yml
vendored
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
name: Vim Polyglot CI
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
pull_request:
|
||||||
|
schedule:
|
||||||
|
- cron: '0 0 * * 0' # weekly
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
test:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- name: Install Vim
|
||||||
|
run: |
|
||||||
|
sudo add-apt-repository ppa:jonathonf/vim -y
|
||||||
|
sudo apt-get update -q
|
||||||
|
sudo apt-get install -y vim
|
||||||
|
vim --version
|
||||||
|
- uses: actions/checkout@v2
|
||||||
|
- name: Run Tests
|
||||||
|
run: make test
|
||||||
2
.gitignore
vendored
2
.gitignore
vendored
@@ -1 +1,3 @@
|
|||||||
/tmp
|
/tmp
|
||||||
|
!*ctags*
|
||||||
|
tags
|
||||||
|
|||||||
11
.travis.yml
11
.travis.yml
@@ -1,11 +0,0 @@
|
|||||||
language: ruby
|
|
||||||
rvm:
|
|
||||||
- 2.6
|
|
||||||
sudo: false
|
|
||||||
addons:
|
|
||||||
apt:
|
|
||||||
packages:
|
|
||||||
- vim-gtk
|
|
||||||
before_script:
|
|
||||||
- "./build"
|
|
||||||
script: xvfb-run bundle exec rspec --format=documentation
|
|
||||||
28
Gemfile.lock
28
Gemfile.lock
@@ -1,28 +0,0 @@
|
|||||||
GEM
|
|
||||||
remote: https://rubygems.org/
|
|
||||||
specs:
|
|
||||||
diff-lcs (1.3)
|
|
||||||
rspec (3.8.0)
|
|
||||||
rspec-core (~> 3.8.0)
|
|
||||||
rspec-expectations (~> 3.8.0)
|
|
||||||
rspec-mocks (~> 3.8.0)
|
|
||||||
rspec-core (3.8.0)
|
|
||||||
rspec-support (~> 3.8.0)
|
|
||||||
rspec-expectations (3.8.2)
|
|
||||||
diff-lcs (>= 1.2.0, < 2.0)
|
|
||||||
rspec-support (~> 3.8.0)
|
|
||||||
rspec-mocks (3.8.0)
|
|
||||||
diff-lcs (>= 1.2.0, < 2.0)
|
|
||||||
rspec-support (~> 3.8.0)
|
|
||||||
rspec-support (3.8.0)
|
|
||||||
vimrunner (0.3.4)
|
|
||||||
|
|
||||||
PLATFORMS
|
|
||||||
ruby
|
|
||||||
|
|
||||||
DEPENDENCIES
|
|
||||||
rspec
|
|
||||||
vimrunner
|
|
||||||
|
|
||||||
BUNDLED WITH
|
|
||||||
1.16.2
|
|
||||||
10
Makefile
Normal file
10
Makefile
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
.PHONY: all test dev
|
||||||
|
|
||||||
|
all:
|
||||||
|
@ scripts/build
|
||||||
|
|
||||||
|
test:
|
||||||
|
@ scripts/test
|
||||||
|
|
||||||
|
dev:
|
||||||
|
@ echo "packages.yaml\nheuristics.yaml\nscripts/test\nscripts/build\nscripts/test_extensions.vim" | DEV=1 entr bash -c 'make && make test'
|
||||||
370
README.md
370
README.md
@@ -1,22 +1,20 @@
|
|||||||

|

|
||||||
|
|
||||||
[![Build Status][travis-img-url]][travis-url] []()
|
 []()
|
||||||
|
|
||||||
[travis-img-url]: https://travis-ci.org/sheerun/vim-polyglot.svg
|
|
||||||
[travis-url]: https://travis-ci.org/sheerun/vim-polyglot
|
|
||||||
|
|
||||||
A collection of language packs for Vim.
|
A collection of language packs for Vim.
|
||||||
|
|
||||||
> One to rule them all, one to find them, one to bring them all and in the darkness bind them.
|
> One to rule them all, one to find them, one to bring them all and in the darkness bind them.
|
||||||
|
|
||||||
- It **won't affect your startup time**, as scripts are loaded only on demand\*.
|
- It **won't affect your startup time**, as scripts are loaded only on demand\*.
|
||||||
- It **installs and updates 120+ times faster** than the <!--Package Count-->146<!--/Package Count--> packages it consists of.
|
- It **installs and updates 120+ times faster** than the <!--Package Count-->190<!--/Package Count--> packages it consists of.
|
||||||
|
- It is more secure because scripts loaded for all extensions are generated by vim-polyglot (ftdetect).
|
||||||
- Solid syntax and indentation support (other features skipped). Only the best language packs.
|
- Solid syntax and indentation support (other features skipped). Only the best language packs.
|
||||||
- All unnecessary files are ignored (like enormous documentation from php support).
|
- All unnecessary files are ignored (like enormous documentation from php support).
|
||||||
- No support for esoteric languages, only most popular ones (modern too, like `slim`).
|
- Automatically detect indentation (includes performance-optimized version of [vim-sleuth](https://github.com/tpope/vim-sleuth))
|
||||||
- Each build is tested by automated vimrunner script on CI. See `spec` directory.
|
- Each build is tested by automated vimrunner script on CI. See `spec` directory.
|
||||||
|
|
||||||
\*To be completely honest, concatenated `ftdetect` script takes up to `17ms` to load.
|
\*To be completely honest, optimized `ftdetect` script takes around `19ms` to load.
|
||||||
|
|
||||||
## Installation
|
## Installation
|
||||||
|
|
||||||
@@ -38,189 +36,229 @@ mkdir -p ~/.vim/pack/default/start
|
|||||||
git clone https://github.com/sheerun/vim-polyglot ~/.vim/pack/default/start/vim-polyglot
|
git clone https://github.com/sheerun/vim-polyglot ~/.vim/pack/default/start/vim-polyglot
|
||||||
```
|
```
|
||||||
|
|
||||||
NOTE: Not all features of listed language packs are available. We strip them from functionality slowing vim startup in general (for example we ignore `plugins` folder that is loaded regardless of file type, use `ftplugin` instead).
|
NOTE: Not all features of individual language packs are available. We strip them from functionality slowing vim startup (for example we ignore `plugins` folder that is loaded regardless of file type, instead we prefer `ftplugin` which is loaded lazily).
|
||||||
|
|
||||||
If you need full functionality of any plugin, please use it directly with your plugin manager.
|
If you need full functionality of any plugin, please use it directly with your plugin manager.
|
||||||
|
|
||||||
## Language packs
|
## Language packs
|
||||||
|
|
||||||
<!--Language Packs-->
|
<!--Language Packs-->
|
||||||
- [acpiasl](https://github.com/martinlroth/vim-acpi-asl) (syntax)
|
- [8th](https://github.com/vim/vim/tree/master/runtime)
|
||||||
- [ansible](https://github.com/pearofducks/ansible-vim) (syntax, indent, ftplugin)
|
- [a2ps](https://github.com/vim/vim/tree/master/runtime)
|
||||||
- [apiblueprint](https://github.com/sheerun/apiblueprint.vim) (syntax)
|
- [a65](https://github.com/vim/vim/tree/master/runtime)
|
||||||
- [applescript](https://github.com/mityu/vim-applescript) (syntax, indent)
|
- [aap](https://github.com/vim/vim/tree/master/runtime)
|
||||||
- [arduino](https://github.com/sudar/vim-arduino-syntax) (syntax, indent)
|
- [abap](https://github.com/vim/vim/tree/master/runtime)
|
||||||
- [asciidoc](https://github.com/asciidoc/vim-asciidoc) (syntax)
|
- [abaqus](https://github.com/vim/vim/tree/master/runtime)
|
||||||
- [autohotkey](https://github.com/hnamikaw/vim-autohotkey) (indent)
|
- [abc](https://github.com/vim/vim/tree/master/runtime)
|
||||||
- [blade](https://github.com/jwalton512/vim-blade) (syntax, indent, ftplugin)
|
- [abel](https://github.com/vim/vim/tree/master/runtime)
|
||||||
- [c++11](https://github.com/octol/vim-cpp-enhanced-highlight) (syntax)
|
- [acedb](https://github.com/vim/vim/tree/master/runtime)
|
||||||
- [c/c++](https://github.com/vim-jp/vim-cpp) (syntax)
|
- [acpiasl](https://github.com/martinlroth/vim-acpi-asl)
|
||||||
- [caddyfile](https://github.com/isobit/vim-caddyfile) (syntax, indent, ftplugin)
|
- [ada](https://github.com/vim/vim/tree/master/runtime)
|
||||||
- [carp](https://github.com/hellerve/carp-vim) (syntax)
|
- [ahdl](https://github.com/vim/vim/tree/master/runtime)
|
||||||
- [cjsx](https://github.com/mtscout6/vim-cjsx) (syntax, ftplugin)
|
- [aidl](https://github.com/vim/vim/tree/master/runtime)
|
||||||
- [clojure](https://github.com/guns/vim-clojure-static) (syntax, indent, autoload, ftplugin)
|
- [alsaconf](https://github.com/vim/vim/tree/master/runtime)
|
||||||
- [cmake](https://github.com/pboettch/vim-cmake-syntax) (syntax, indent)
|
- [aml](https://github.com/vim/vim/tree/master/runtime)
|
||||||
- [coffee-script](https://github.com/kchmck/vim-coffee-script) (syntax, compiler, indent, autoload, ftplugin)
|
- [ampl](https://github.com/vim/vim/tree/master/runtime)
|
||||||
- [cql](https://github.com/elubow/cql-vim) (syntax)
|
- [ansible](https://github.com/pearofducks/ansible-vim)
|
||||||
- [cryptol](https://github.com/victoredwardocallaghan/cryptol.vim) (syntax, compiler, ftplugin)
|
- [ant](https://github.com/vim/vim/tree/master/runtime)
|
||||||
- [crystal](https://github.com/rhysd/vim-crystal) (syntax, indent, autoload, ftplugin)
|
- [apache](https://github.com/vim/vim/tree/master/runtime)
|
||||||
- [csv](https://github.com/chrisbra/csv.vim) (syntax, autoload, ftplugin)
|
- [apiblueprint](https://github.com/sheerun/apiblueprint.vim)
|
||||||
- [cucumber](https://github.com/tpope/vim-cucumber) (syntax, indent, compiler, ftplugin)
|
- [applescript](https://github.com/mityu/vim-applescript)
|
||||||
- [cue](https://github.com/mgrabovsky/vim-cuesheet) (syntax)
|
- [aptconf](https://github.com/vim/vim/tree/master/runtime)
|
||||||
- [dart](https://github.com/dart-lang/dart-vim-plugin) (syntax, indent, autoload, ftplugin)
|
- [arch](https://github.com/vim/vim/tree/master/runtime)
|
||||||
- [dhall](https://github.com/vmchale/dhall-vim) (syntax, ftplugin)
|
- [arduino](https://github.com/sudar/vim-arduino-syntax)
|
||||||
- [dlang](https://github.com/JesseKPhillips/d.vim) (syntax, indent)
|
- [art](https://github.com/vim/vim/tree/master/runtime)
|
||||||
- [dockerfile](https://github.com/ekalinin/Dockerfile.vim) (syntax, indent, ftplugin)
|
- [asciidoc](https://github.com/asciidoc/vim-asciidoc)
|
||||||
- [elixir](https://github.com/elixir-lang/vim-elixir) (syntax, indent, compiler, autoload, ftplugin)
|
- [asn](https://github.com/vim/vim/tree/master/runtime)
|
||||||
- [elm](https://github.com/ElmCast/elm-vim) (syntax, indent, autoload, ftplugin)
|
- [aspperl](https://github.com/vim/vim/tree/master/runtime)
|
||||||
- [emberscript](https://github.com/yalesov/vim-ember-script) (syntax, indent, ftplugin)
|
- [aspvbs](https://github.com/vim/vim/tree/master/runtime)
|
||||||
- [emblem](https://github.com/yalesov/vim-emblem) (syntax, indent, ftplugin)
|
- [atlas](https://github.com/vim/vim/tree/master/runtime)
|
||||||
- [erlang](https://github.com/vim-erlang/vim-erlang-runtime) (syntax, indent)
|
- [autohotkey](https://github.com/hnamikaw/vim-autohotkey)
|
||||||
- [ferm](https://github.com/vim-scripts/ferm.vim) (syntax)
|
- [autoit](https://github.com/vim/vim/tree/master/runtime)
|
||||||
- [fish](https://github.com/georgewitteman/vim-fish) (syntax, indent, compiler, autoload, ftplugin)
|
- [automake](https://github.com/vim/vim/tree/master/runtime)
|
||||||
- [flatbuffers](https://github.com/dcharbon/vim-flatbuffers) (syntax)
|
- [ave](https://github.com/vim/vim/tree/master/runtime)
|
||||||
- [fsharp](https://github.com/fsharp/vim-fsharp) (syntax, indent)
|
- [awk](https://github.com/vim/vim/tree/master/runtime)
|
||||||
- [git](https://github.com/tpope/vim-git) (syntax, indent, ftplugin)
|
- [blade](https://github.com/jwalton512/vim-blade)
|
||||||
- [glsl](https://github.com/tikhomirov/vim-glsl) (syntax, indent)
|
- [brewfile](https://github.com/bfontaine/Brewfile.vim)
|
||||||
- [gmpl](https://github.com/maelvalais/gmpl.vim) (syntax)
|
- [c/c++](https://github.com/vim-jp/vim-cpp)
|
||||||
- [gnuplot](https://github.com/vim-scripts/gnuplot-syntax-highlighting) (syntax)
|
- [caddyfile](https://github.com/isobit/vim-caddyfile)
|
||||||
- [go](https://github.com/fatih/vim-go) (syntax, compiler, indent)
|
- [carp](https://github.com/hellerve/carp-vim)
|
||||||
- [gradle](https://github.com/tfnico/vim-gradle) (compiler)
|
- [cjsx](https://github.com/mtscout6/vim-cjsx)
|
||||||
- [graphql](https://github.com/jparise/vim-graphql) (syntax, indent, autoload, ftplugin, after)
|
- [clojure](https://github.com/guns/vim-clojure-static)
|
||||||
- [groovy-indent](https://github.com/vim-scripts/groovyindent-unix) (indent)
|
- [cmake](https://github.com/pboettch/vim-cmake-syntax)
|
||||||
- [groovy](https://github.com/vim-scripts/groovy.vim) (syntax)
|
- [coffee-script](https://github.com/kchmck/vim-coffee-script)
|
||||||
- [haml](https://github.com/sheerun/vim-haml) (syntax, indent, compiler, ftplugin)
|
- [cql](https://github.com/elubow/cql-vim)
|
||||||
- [handlebars](https://github.com/mustache/vim-mustache-handlebars) (syntax, indent, ftplugin)
|
- [cryptol](https://github.com/victoredwardocallaghan/cryptol.vim)
|
||||||
- [haproxy](https://github.com/CH-DanReif/haproxy.vim) (syntax)
|
- [crystal](https://github.com/rhysd/vim-crystal)
|
||||||
- [haskell](https://github.com/neovimhaskell/haskell-vim) (syntax, indent, ftplugin)
|
- [csv](https://github.com/chrisbra/csv.vim)
|
||||||
- [haxe](https://github.com/yaymukund/vim-haxe) (syntax)
|
- [cucumber](https://github.com/tpope/vim-cucumber)
|
||||||
- [hcl](https://github.com/b4b4r07/vim-hcl) (syntax, indent, ftplugin)
|
- [cue](https://github.com/mgrabovsky/vim-cuesheet)
|
||||||
- [helm](https://github.com/towolf/vim-helm) (syntax)
|
- [dart](https://github.com/dart-lang/dart-vim-plugin)
|
||||||
- [hive](https://github.com/zebradil/hive.vim) (syntax, ftplugin)
|
- [dhall](https://github.com/vmchale/dhall-vim)
|
||||||
- [html5](https://github.com/othree/html5.vim) (syntax, indent, autoload, ftplugin)
|
- [dlang](https://github.com/JesseKPhillips/d.vim)
|
||||||
- [i3](https://github.com/mboughaba/i3config.vim) (syntax, ftplugin)
|
- [dockerfile](https://github.com/ekalinin/Dockerfile.vim)
|
||||||
- [idris](https://github.com/idris-hackers/idris-vim) (syntax, indent, ftplugin)
|
- [elf](https://github.com/vim/vim/tree/master/runtime)
|
||||||
- [ion](https://github.com/vmchale/ion-vim) (syntax, ftplugin)
|
- [elixir](https://github.com/elixir-lang/vim-elixir)
|
||||||
- [jasmine](https://github.com/glanotte/vim-jasmine) (syntax)
|
- [elm](https://github.com/andys8/vim-elm-syntax)
|
||||||
- [javascript](https://github.com/pangloss/vim-javascript) (syntax, indent, compiler, ftplugin, extras)
|
- [emberscript](https://github.com/yalesov/vim-ember-script)
|
||||||
- [jenkins](https://github.com/martinda/Jenkinsfile-vim-syntax) (syntax, indent)
|
- [emblem](https://github.com/yalesov/vim-emblem)
|
||||||
- [jinja](https://github.com/lepture/vim-jinja) (syntax, indent)
|
- [erlang](https://github.com/vim-erlang/vim-erlang-runtime)
|
||||||
- [json5](https://github.com/GutenYe/json5.vim) (syntax)
|
- [fennel](https://github.com/bakpakin/fennel.vim)
|
||||||
- [json](https://github.com/elzr/vim-json) (syntax, indent, ftplugin)
|
- [ferm](https://github.com/vim-scripts/ferm.vim)
|
||||||
- [jst](https://github.com/briancollins/vim-jst) (syntax, indent)
|
- [fish](https://github.com/georgewitteman/vim-fish)
|
||||||
- [jsx](https://github.com/MaxMEllon/vim-jsx-pretty) (autoload, after)
|
- [flatbuffers](https://github.com/dcharbon/vim-flatbuffers)
|
||||||
- [julia](https://github.com/JuliaEditorSupport/julia-vim) (syntax, indent, autoload, ftplugin)
|
- [forth](https://github.com/vim/vim/tree/master/runtime)
|
||||||
- [kotlin](https://github.com/udalov/kotlin-vim) (syntax, indent, ftplugin)
|
- [fsharp](https://github.com/ionide/Ionide-vim)
|
||||||
- [latex](https://github.com/LaTeX-Box-Team/LaTeX-Box) (syntax, indent, ftplugin)
|
- [gdscript](https://github.com/calviken/vim-gdscript3)
|
||||||
- [less](https://github.com/groenewege/vim-less) (syntax, indent, ftplugin)
|
- [git](https://github.com/tpope/vim-git)
|
||||||
- [lilypond](https://github.com/anowlcalledjosh/vim-lilypond) (syntax, indent, compiler, ftplugin)
|
- [glsl](https://github.com/tikhomirov/vim-glsl)
|
||||||
- [livescript](https://github.com/gkz/vim-ls) (syntax, indent, compiler, ftplugin)
|
- [gmpl](https://github.com/maelvalais/gmpl.vim)
|
||||||
- [llvm](https://github.com/rhysd/vim-llvm) (syntax, indent, ftplugin)
|
- [gnuplot](https://github.com/vim-scripts/gnuplot-syntax-highlighting)
|
||||||
- [log](https://github.com/MTDL9/vim-log-highlighting) (syntax)
|
- [go](https://github.com/fatih/vim-go)
|
||||||
- [lua](https://github.com/tbastos/vim-lua) (syntax, indent)
|
- [gradle](https://github.com/tfnico/vim-gradle)
|
||||||
- [mako](https://github.com/sophacles/vim-bundle-mako) (syntax, indent, ftplugin)
|
- [graphql](https://github.com/jparise/vim-graphql)
|
||||||
- [markdown](https://github.com/plasticboy/vim-markdown) (syntax, indent)
|
- [grub](https://github.com/vim/vim/tree/master/runtime)
|
||||||
- [mathematica](https://github.com/voldikss/vim-mma) (syntax, ftplugin)
|
- [haml](https://github.com/sheerun/vim-haml)
|
||||||
- [mdx](https://github.com/jxnblk/vim-mdx-js) (syntax)
|
- [handlebars](https://github.com/sheerun/vim-mustache-handlebars)
|
||||||
- [meson](https://github.com/mesonbuild/meson) (syntax, indent, ftplugin)
|
- [haproxy](https://github.com/CH-DanReif/haproxy.vim)
|
||||||
- [moonscript](https://github.com/leafo/moonscript-vim) (syntax, indent, ftplugin)
|
- [haskell](https://github.com/neovimhaskell/haskell-vim)
|
||||||
- [nginx](https://github.com/chr4/nginx.vim) (syntax, indent, ftplugin)
|
- [haxe](https://github.com/yaymukund/vim-haxe)
|
||||||
- [nim](https://github.com/zah/nim.vim) (syntax, compiler, indent)
|
- [hcl](https://github.com/b4b4r07/vim-hcl)
|
||||||
- [nix](https://github.com/LnL7/vim-nix) (syntax, indent, compiler, ftplugin)
|
- [helm](https://github.com/towolf/vim-helm)
|
||||||
- [objc](https://github.com/b4winckler/vim-objc) (ftplugin, syntax, indent)
|
- [help](https://github.com/vim/vim/tree/master/runtime)
|
||||||
- [ocaml](https://github.com/rgrinberg/vim-ocaml) (syntax, indent, compiler, ftplugin)
|
- [hive](https://github.com/zebradil/hive.vim)
|
||||||
- [octave](https://github.com/McSinyx/vim-octave) (syntax, indent)
|
- [html5](https://github.com/othree/html5.vim)
|
||||||
- [opencl](https://github.com/petRUShka/vim-opencl) (syntax, indent, ftplugin)
|
- [i3](https://github.com/mboughaba/i3config.vim)
|
||||||
- [perl](https://github.com/vim-perl/vim-perl) (syntax, indent, ftplugin)
|
- [icalendar](https://github.com/chutzpah/icalendar.vim)
|
||||||
- [pgsql](https://github.com/lifepillar/pgsql.vim) (syntax, indent)
|
- [idris](https://github.com/idris-hackers/idris-vim)
|
||||||
- [php](https://github.com/StanAngeloff/php.vim) (syntax)
|
- [ion](https://github.com/vmchale/ion-vim)
|
||||||
- [plantuml](https://github.com/aklt/plantuml-syntax) (syntax, indent, ftplugin)
|
- [javascript-sql](https://github.com/statico/vim-javascript-sql)
|
||||||
- [pony](https://github.com/jakwings/vim-pony) (syntax, indent, autoload, ftplugin)
|
- [javascript](https://github.com/pangloss/vim-javascript)
|
||||||
- [powershell](https://github.com/PProvost/vim-ps1) (syntax, indent, ftplugin)
|
- [jenkins](https://github.com/martinda/Jenkinsfile-vim-syntax)
|
||||||
- [protobuf](https://github.com/uarun/vim-protobuf) (syntax, indent)
|
- [jinja](https://github.com/lepture/vim-jinja)
|
||||||
- [pug](https://github.com/digitaltoad/vim-pug) (syntax, indent, ftplugin)
|
- [jq](https://github.com/vito-c/jq.vim)
|
||||||
- [puppet](https://github.com/rodjek/vim-puppet) (syntax, indent, autoload, ftplugin)
|
- [json5](https://github.com/GutenYe/json5.vim)
|
||||||
- [purescript](https://github.com/purescript-contrib/purescript-vim) (syntax, indent, ftplugin)
|
- [json](https://github.com/elzr/vim-json)
|
||||||
- [python-compiler](https://github.com/aliev/vim-compiler-python) (compiler, autoload)
|
- [jsonnet](https://github.com/google/vim-jsonnet)
|
||||||
- [python-indent](https://github.com/Vimjas/vim-python-pep8-indent) (indent)
|
- [jst](https://github.com/briancollins/vim-jst)
|
||||||
- [python](https://github.com/vim-python/python-syntax) (syntax)
|
- [jsx](https://github.com/MaxMEllon/vim-jsx-pretty)
|
||||||
- [qmake](https://github.com/artoj/qmake-syntax-vim) (syntax)
|
- [julia](https://github.com/JuliaEditorSupport/julia-vim)
|
||||||
- [qml](https://github.com/peterhoeg/vim-qml) (syntax, indent, ftplugin)
|
- [kotlin](https://github.com/udalov/kotlin-vim)
|
||||||
- [r-lang](https://github.com/vim-scripts/R.vim) (syntax)
|
- [ledger](https://github.com/ledger/vim-ledger)
|
||||||
- [racket](https://github.com/wlangstroth/vim-racket) (syntax, indent, ftplugin)
|
- [less](https://github.com/groenewege/vim-less)
|
||||||
- [ragel](https://github.com/jneen/ragel.vim) (syntax)
|
- [lilypond](https://github.com/anowlcalledjosh/vim-lilypond)
|
||||||
- [raml](https://github.com/IN3D/vim-raml) (syntax, ftplugin)
|
- [livescript](https://github.com/gkz/vim-ls)
|
||||||
- [reason](https://github.com/reasonml-editor/vim-reason-plus) (syntax, indent)
|
- [llvm](https://github.com/rhysd/vim-llvm)
|
||||||
- [rspec](https://github.com/sheerun/rspec.vim) (syntax)
|
- [log](https://github.com/MTDL9/vim-log-highlighting)
|
||||||
- [rst](https://github.com/marshallward/vim-restructuredtext) (syntax, autoload, ftplugin)
|
- [lua](https://github.com/tbastos/vim-lua)
|
||||||
- [ruby](https://github.com/vim-ruby/vim-ruby) (syntax, indent, compiler, autoload, ftplugin)
|
- [m4](https://github.com/vim/vim/tree/master/runtime)
|
||||||
- [rust](https://github.com/rust-lang/rust.vim) (syntax, indent, compiler, autoload, ftplugin)
|
- [mako](https://github.com/sophacles/vim-bundle-mako)
|
||||||
- [sbt](https://github.com/derekwyatt/vim-sbt) (syntax)
|
- [markdown](https://github.com/plasticboy/vim-markdown)
|
||||||
- [scala](https://github.com/derekwyatt/vim-scala) (syntax, indent, compiler, ftplugin)
|
- [mathematica](https://github.com/voldikss/vim-mma)
|
||||||
- [scss](https://github.com/cakebaker/scss-syntax.vim) (syntax, indent, ftplugin)
|
- [mdx](https://github.com/jxnblk/vim-mdx-js)
|
||||||
- [slim](https://github.com/slim-template/vim-slim) (syntax, indent, ftplugin)
|
- [meson](https://github.com/mesonbuild/meson/tree/master/data/syntax-highlighting/vim)
|
||||||
- [slime](https://github.com/slime-lang/vim-slime-syntax) (syntax, indent)
|
- [moonscript](https://github.com/leafo/moonscript-vim)
|
||||||
- [smt2](https://github.com/bohlender/vim-smt2) (syntax, autoload, ftplugin)
|
- [murphi](https://github.com/vim/vim/tree/master/runtime)
|
||||||
- [solidity](https://github.com/tomlion/vim-solidity) (syntax, indent, ftplugin)
|
- [nginx](https://github.com/chr4/nginx.vim)
|
||||||
- [stylus](https://github.com/wavded/vim-stylus) (syntax, indent, ftplugin)
|
- [nim](https://github.com/zah/nim.vim)
|
||||||
- [svelte](https://github.com/evanleck/vim-svelte) (syntax, indent)
|
- [nix](https://github.com/LnL7/vim-nix)
|
||||||
- [svg-indent](https://github.com/jasonshell/vim-svg-indent) (indent)
|
- [objc](https://github.com/b4winckler/vim-objc)
|
||||||
- [svg](https://github.com/vim-scripts/svg.vim) (syntax)
|
- [ocaml](https://github.com/rgrinberg/vim-ocaml)
|
||||||
- [swift](https://github.com/keith/swift.vim) (syntax, indent, ftplugin)
|
- [octave](https://github.com/McSinyx/vim-octave)
|
||||||
- [sxhkd](https://github.com/baskerville/vim-sxhkdrc) (syntax)
|
- [opencl](https://github.com/petRUShka/vim-opencl)
|
||||||
- [systemd](https://github.com/wgwoods/vim-systemd-syntax) (syntax, ftplugin)
|
- [perl](https://github.com/vim-perl/vim-perl)
|
||||||
- [terraform](https://github.com/hashivim/vim-terraform) (syntax, indent, autoload, ftplugin)
|
- [pgsql](https://github.com/lifepillar/pgsql.vim)
|
||||||
- [textile](https://github.com/timcharper/textile.vim) (syntax, ftplugin)
|
- [php](https://github.com/StanAngeloff/php.vim)
|
||||||
- [thrift](https://github.com/solarnz/thrift.vim) (syntax)
|
- [plantuml](https://github.com/aklt/plantuml-syntax)
|
||||||
- [tmux](https://github.com/ericpruitt/tmux.vim) (syntax, ftplugin)
|
- [pony](https://github.com/jakwings/vim-pony)
|
||||||
- [tomdoc](https://github.com/wellbredgrapefruit/tomdoc.vim) (syntax)
|
- [powershell](https://github.com/PProvost/vim-ps1)
|
||||||
- [toml](https://github.com/cespare/vim-toml) (syntax, ftplugin)
|
- [protobuf](https://github.com/uarun/vim-protobuf)
|
||||||
- [tptp](https://github.com/c-cube/vim-tptp) (syntax)
|
- [pug](https://github.com/digitaltoad/vim-pug)
|
||||||
- [twig](https://github.com/lumiliet/vim-twig) (syntax, indent, ftplugin)
|
- [puppet](https://github.com/rodjek/vim-puppet)
|
||||||
- [typescript](https://github.com/HerringtonDarkholme/yats.vim) (syntax, indent, compiler, ftplugin)
|
- [purescript](https://github.com/purescript-contrib/purescript-vim)
|
||||||
- [vala](https://github.com/arrufat/vala.vim) (syntax, indent)
|
- [python-compiler](https://github.com/aliev/vim-compiler-python)
|
||||||
- [vbnet](https://github.com/vim-scripts/vbnet.vim) (syntax)
|
- [python-indent](https://github.com/Vimjas/vim-python-pep8-indent)
|
||||||
- [vcl](https://github.com/smerrill/vcl-vim-plugin) (syntax)
|
- [python](https://github.com/vim-python/python-syntax)
|
||||||
- [vifm](https://github.com/vifm/vifm.vim) (syntax, autoload, ftplugin)
|
- [qmake](https://github.com/artoj/qmake-syntax-vim)
|
||||||
- [vm](https://github.com/lepture/vim-velocity) (syntax, indent)
|
- [qml](https://github.com/peterhoeg/vim-qml)
|
||||||
- [vue](https://github.com/posva/vim-vue) (syntax, indent, ftplugin)
|
- [r-lang](https://github.com/vim-scripts/R.vim)
|
||||||
- [xdc](https://github.com/amal-khailtash/vim-xdc-syntax) (syntax)
|
- [racket](https://github.com/wlangstroth/vim-racket)
|
||||||
- [xls](https://github.com/vim-scripts/XSLT-syntax) (syntax)
|
- [ragel](https://github.com/jneen/ragel.vim)
|
||||||
- [xml](https://github.com/amadeus/vim-xml) (syntax)
|
- [raku](https://github.com/Raku/vim-raku)
|
||||||
- [yaml](https://github.com/stephpy/vim-yaml) (syntax, ftplugin)
|
- [raml](https://github.com/IN3D/vim-raml)
|
||||||
- [yard](https://github.com/sheerun/vim-yardoc) (syntax)
|
- [razor](https://github.com/adamclerk/vim-razor)
|
||||||
- [zephir](https://github.com/xwsoul/vim-zephir) (syntax)
|
- [reason](https://github.com/reasonml-editor/vim-reason-plus)
|
||||||
- [zig](https://github.com/ziglang/zig.vim) (syntax, autoload, ftplugin)
|
- [requirements](https://github.com/raimon49/requirements.txt.vim)
|
||||||
|
- [rspec](https://github.com/keith/rspec.vim)
|
||||||
|
- [rst](https://github.com/marshallward/vim-restructuredtext)
|
||||||
|
- [ruby](https://github.com/vim-ruby/vim-ruby)
|
||||||
|
- [rust](https://github.com/rust-lang/rust.vim)
|
||||||
|
- [sbt](https://github.com/derekwyatt/vim-sbt)
|
||||||
|
- [scala](https://github.com/derekwyatt/vim-scala)
|
||||||
|
- [scss](https://github.com/cakebaker/scss-syntax.vim)
|
||||||
|
- [sh](https://github.com/arzg/vim-sh)
|
||||||
|
- [slim](https://github.com/slim-template/vim-slim)
|
||||||
|
- [slime](https://github.com/slime-lang/vim-slime-syntax)
|
||||||
|
- [smt2](https://github.com/bohlender/vim-smt2)
|
||||||
|
- [solidity](https://github.com/tomlion/vim-solidity)
|
||||||
|
- [stylus](https://github.com/wavded/vim-stylus)
|
||||||
|
- [svelte](https://github.com/evanleck/vim-svelte/tree/main)
|
||||||
|
- [svg-indent](https://github.com/jasonshell/vim-svg-indent)
|
||||||
|
- [svg](https://github.com/vim-scripts/svg.vim)
|
||||||
|
- [swift](https://github.com/keith/swift.vim)
|
||||||
|
- [sxhkd](https://github.com/baskerville/vim-sxhkdrc)
|
||||||
|
- [systemd](https://github.com/wgwoods/vim-systemd-syntax)
|
||||||
|
- [terraform](https://github.com/hashivim/vim-terraform)
|
||||||
|
- [textile](https://github.com/timcharper/textile.vim)
|
||||||
|
- [thrift](https://github.com/solarnz/thrift.vim)
|
||||||
|
- [tmux](https://github.com/ericpruitt/tmux.vim/tree/master/vim)
|
||||||
|
- [toml](https://github.com/cespare/vim-toml)
|
||||||
|
- [tptp](https://github.com/c-cube/vim-tptp)
|
||||||
|
- [trasys](https://github.com/vim/vim/tree/master/runtime)
|
||||||
|
- [twig](https://github.com/lumiliet/vim-twig)
|
||||||
|
- [typescript](https://github.com/HerringtonDarkholme/yats.vim)
|
||||||
|
- [unison](https://github.com/unisonweb/unison/tree/trunk/editor-support/vim)
|
||||||
|
- [v](https://github.com/ollykel/v-vim)
|
||||||
|
- [vala](https://github.com/arrufat/vala.vim)
|
||||||
|
- [vbnet](https://github.com/vim-scripts/vbnet.vim)
|
||||||
|
- [vcl](https://github.com/smerrill/vcl-vim-plugin)
|
||||||
|
- [velocity](https://github.com/lepture/vim-velocity)
|
||||||
|
- [vmasm](https://github.com/vim/vim/tree/master/runtime)
|
||||||
|
- [vue](https://github.com/posva/vim-vue)
|
||||||
|
- [xdc](https://github.com/amal-khailtash/vim-xdc-syntax)
|
||||||
|
- [xml](https://github.com/amadeus/vim-xml)
|
||||||
|
- [xsl](https://github.com/vim-scripts/XSLT-syntax)
|
||||||
|
- [yaml](https://github.com/stephpy/vim-yaml)
|
||||||
|
- [yard](https://github.com/sheerun/vim-yardoc)
|
||||||
|
- [zephir](https://github.com/xwsoul/vim-zephir)
|
||||||
|
- [zig](https://github.com/ziglang/zig.vim)
|
||||||
|
- [zinit](https://github.com/zinit-zsh/zplugin-vim-syntax)
|
||||||
<!--/Language Packs-->
|
<!--/Language Packs-->
|
||||||
|
|
||||||
## Updating
|
## Updating
|
||||||
|
|
||||||
You can either wait for new patch release with updates or run the `./build` script by yourself.
|
You can either wait for new patch release with updates or run `make` by yourself.
|
||||||
|
|
||||||
## Troubleshooting
|
## Troubleshooting
|
||||||
|
|
||||||
Please make sure you have `syntax on` in your `.vimrc`, otherwise syntax files are not loaded at all.
|
Please make sure you have `syntax on` in your `.vimrc` (or use something like [sheerun/vimrc](https://github.com/sheerun/vimrc))
|
||||||
|
|
||||||
Individual language packs can be disabled by setting `g:polyglot_disabled` as follows:
|
Individual language packs can be disabled by setting `g:polyglot_disabled` as follows:
|
||||||
|
|
||||||
```viml
|
```viml
|
||||||
" ~/.vimrc
|
|
||||||
let g:polyglot_disabled = ['css']
|
let g:polyglot_disabled = ['css']
|
||||||
```
|
```
|
||||||
|
|
||||||
Note that disabling languages won't make in general your vim startup any faster / slower (only for specific file type). Vim-polyglot is selection of language plugins that are loaded only on demand.
|
*Please declare this variable before polyglot is loaded (at the top of .vimrc)*
|
||||||
|
|
||||||
|
Please note that disabling a language won't make in your vim startup any faster / slower (only for specific this specific filetype). All plugins are loaded lazily, on demand.
|
||||||
|
|
||||||
## Contributing
|
## Contributing
|
||||||
|
|
||||||
Language packs are periodically updated using automated `build` script.
|
Language packs are periodically updated using automated `scripts/build` script.
|
||||||
|
|
||||||
Feel free to add your language, and send pull-request. In your pull request, please include:
|
Feel free to add your language to `packages.yaml`, and send pull-request. Please don't run `make` and include that in your PR, send just changes to `packages.yaml` and build scripts if really necessary. You can run `make test` to run rough tests.
|
||||||
1. How you chose the particular repo from which to pull support for this language.
|
|
||||||
2. An updated https://github.com/sheerun/vim-polyglot/blob/master/build .
|
|
||||||
3. If at all possible, absolutely nothing else (in particular, please don't run `build` and include that in your PR).
|
|
||||||
|
|
||||||
The easier it is to validate that the new language won't do anything wacky, the faster it'll be merged. In particular, languages that utilize global plugins (loaded for every filetype), or plugins with dangerous features (like `call` based on the contents of a file being edited), will never be merged, as they will be slow or dangerous, respectively.
|
|
||||||
|
|
||||||
## License
|
## License
|
||||||
|
|
||||||
See linked repositories for detailed license information.
|
See linked repositories for detailed license information. This repository is MIT-licensed.
|
||||||
|
|||||||
@@ -14,7 +14,7 @@ else
|
|||||||
endif
|
endif
|
||||||
|
|
||||||
endif
|
endif
|
||||||
if !exists('g:polyglot_disabled') || !(index(g:polyglot_disabled, 'typescript') != -1 || index(g:polyglot_disabled, 'typescript') != -1 || index(g:polyglot_disabled, 'jsx') != -1)
|
if !exists('g:polyglot_disabled') || (index(g:polyglot_disabled, 'javascript') == -1 && index(g:polyglot_disabled, 'jsx') == -1)
|
||||||
|
|
||||||
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
|
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
|
||||||
" Vim ftplugin file
|
" Vim ftplugin file
|
||||||
@@ -39,11 +39,11 @@ if exists("loaded_matchup")
|
|||||||
let b:match_skip = 's:comment\|string'
|
let b:match_skip = 's:comment\|string'
|
||||||
endif
|
endif
|
||||||
|
|
||||||
let b:original_commentstring = &l:commentstring
|
let b:jsx_pretty_old_cms = &l:commentstring
|
||||||
|
|
||||||
augroup jsx_comment
|
augroup jsx_comment
|
||||||
autocmd! CursorMoved <buffer>
|
autocmd! CursorMoved <buffer>
|
||||||
autocmd CursorMoved <buffer> call jsx_pretty#comment#update_commentstring(b:original_commentstring)
|
autocmd CursorMoved <buffer> call jsx_pretty#comment#update_commentstring(b:jsx_pretty_old_cms)
|
||||||
augroup end
|
augroup end
|
||||||
|
|
||||||
setlocal suffixesadd+=.jsx
|
setlocal suffixesadd+=.jsx
|
||||||
|
|||||||
5
after/ftplugin/javascriptreact.vim
Normal file
5
after/ftplugin/javascriptreact.vim
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
if !exists('g:polyglot_disabled') || (index(g:polyglot_disabled, 'javascript') == -1 && index(g:polyglot_disabled, 'jsx') == -1)
|
||||||
|
|
||||||
|
source <sfile>:h/javascript.vim
|
||||||
|
|
||||||
|
endif
|
||||||
@@ -57,7 +57,7 @@ function! s:is_section_delim(line, func_delim) abort
|
|||||||
return 0
|
return 0
|
||||||
endif
|
endif
|
||||||
let kind = sec[0]
|
let kind = sec[0]
|
||||||
return kind == s:KIND_BLOCK_PREC || kind == s:KIND_BLOCK_FOLLOW || kind == func_delim
|
return kind == s:KIND_BLOCK_PREC || kind == s:KIND_BLOCK_FOLLOW || kind == a:func_delim
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
function! s:next_section(stop_func_begin) abort
|
function! s:next_section(stop_func_begin) abort
|
||||||
@@ -85,11 +85,16 @@ function! s:prev_section(stop_func_begin) abort
|
|||||||
endwhile
|
endwhile
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
|
nnoremap <buffer><Plug>(llvm-next-section-begin) :<C-u>call <SID>next_section(1)<CR>
|
||||||
|
nnoremap <buffer><Plug>(llvm-prev-section-begin) :<C-u>call <SID>prev_section(1)<CR>
|
||||||
|
nnoremap <buffer><Plug>(llvm-next-section-end) :<C-u>call <SID>next_section(0)<CR>
|
||||||
|
nnoremap <buffer><Plug>(llvm-prev-section-end) :<C-u>call <SID>prev_section(0)<CR>
|
||||||
|
|
||||||
if !g:llvm_ext_no_mapping
|
if !g:llvm_ext_no_mapping
|
||||||
nnoremap <buffer><silent>]] :<C-u>call <SID>next_section(1)<CR>
|
nmap <buffer><silent>]] <Plug>(llvm-next-section-begin)
|
||||||
nnoremap <buffer><silent>[[ :<C-u>call <SID>prev_section(1)<CR>
|
nmap <buffer><silent>[[ <Plug>(llvm-prev-section-begin)
|
||||||
nnoremap <buffer><silent>][ :<C-u>call <SID>next_section(0)<CR>
|
nmap <buffer><silent>][ <Plug>(llvm-next-section-end)
|
||||||
nnoremap <buffer><silent>[] :<C-u>call <SID>prev_section(0)<CR>
|
nmap <buffer><silent>[] <Plug>(llvm-prev-section-end)
|
||||||
endif
|
endif
|
||||||
|
|
||||||
function! s:function_range_at(linum) abort
|
function! s:function_range_at(linum) abort
|
||||||
@@ -222,9 +227,12 @@ function! s:move_to_following_block() abort
|
|||||||
endtry
|
endtry
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
|
nnoremap <buffer><Plug>(llvm-move-block-prev) :<C-u>call <SID>move_to_pred_block()<CR>
|
||||||
|
nnoremap <buffer><Plug>(llvm-move-block-next) :<C-u>call <SID>move_to_following_block()<CR>
|
||||||
|
|
||||||
if !g:llvm_ext_no_mapping
|
if !g:llvm_ext_no_mapping
|
||||||
nnoremap <buffer><silent>[b :<C-u>call <SID>move_to_pred_block()<CR>
|
nmap <buffer><silent>[b <Plug>(llvm-move-block-prev)
|
||||||
nnoremap <buffer><silent>]b :<C-u>call <SID>move_to_following_block()<CR>
|
nmap <buffer><silent>]b <Plug>(llvm-move-block-next)
|
||||||
endif
|
endif
|
||||||
|
|
||||||
function! s:get_func_identifiers(line) abort
|
function! s:get_func_identifiers(line) abort
|
||||||
@@ -438,8 +446,10 @@ function! s:goto_definition() abort
|
|||||||
echom "No definition for '" . ident . "' found"
|
echom "No definition for '" . ident . "' found"
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
|
nnoremap <buffer><Plug>(llvm-goto-definition) :<C-u>call <SID>goto_definition()<CR>
|
||||||
|
|
||||||
if !g:llvm_ext_no_mapping
|
if !g:llvm_ext_no_mapping
|
||||||
nnoremap <buffer><silent>K :<C-u>call <SID>goto_definition()<CR>
|
nmap <buffer><silent>K <Plug>(llvm-goto-definition)
|
||||||
endif
|
endif
|
||||||
|
|
||||||
function! s:run_lli(...) abort
|
function! s:run_lli(...) abort
|
||||||
|
|||||||
@@ -1,7 +1,12 @@
|
|||||||
if !exists('g:polyglot_disabled') || !(index(g:polyglot_disabled, 'typescript') != -1 || index(g:polyglot_disabled, 'typescript') != -1 || index(g:polyglot_disabled, 'jsx') != -1)
|
if !exists('g:polyglot_disabled') || (index(g:polyglot_disabled, 'javascript') == -1 && index(g:polyglot_disabled, 'jsx') == -1)
|
||||||
|
|
||||||
" modified from html.vim
|
" modified from html.vim
|
||||||
" For matchit plugin
|
" For matchit plugin
|
||||||
|
|
||||||
|
if get(g:, 'vim_jsx_pretty_disable_tsx', 0)
|
||||||
|
finish
|
||||||
|
endif
|
||||||
|
|
||||||
if exists("loaded_matchit")
|
if exists("loaded_matchit")
|
||||||
let b:match_ignorecase = 0
|
let b:match_ignorecase = 0
|
||||||
let b:match_words = '(:),\[:\],{:},<:>,' .
|
let b:match_words = '(:),\[:\],{:},<:>,' .
|
||||||
@@ -15,11 +20,11 @@ if exists("loaded_matchup")
|
|||||||
let b:match_skip = 's:comment\|string'
|
let b:match_skip = 's:comment\|string'
|
||||||
endif
|
endif
|
||||||
|
|
||||||
let b:original_commentstring = &l:commentstring
|
let b:jsx_pretty_old_cms = &l:commentstring
|
||||||
|
|
||||||
augroup jsx_comment
|
augroup jsx_comment
|
||||||
autocmd! CursorMoved <buffer>
|
autocmd! CursorMoved <buffer>
|
||||||
autocmd CursorMoved <buffer> call jsx_pretty#comment#update_commentstring(b:original_commentstring)
|
autocmd CursorMoved <buffer> call jsx_pretty#comment#update_commentstring(b:jsx_pretty_old_cms)
|
||||||
augroup end
|
augroup end
|
||||||
|
|
||||||
setlocal suffixesadd+=.tsx
|
setlocal suffixesadd+=.tsx
|
||||||
5
after/ftplugin/typescriptreact.vim
Normal file
5
after/ftplugin/typescriptreact.vim
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
if !exists('g:polyglot_disabled') || (index(g:polyglot_disabled, 'javascript') == -1 && index(g:polyglot_disabled, 'jsx') == -1)
|
||||||
|
|
||||||
|
source <sfile>:h/tsx.vim
|
||||||
|
|
||||||
|
endif
|
||||||
@@ -1,4 +1,51 @@
|
|||||||
if !exists('g:polyglot_disabled') || !(index(g:polyglot_disabled, 'typescript') != -1 || index(g:polyglot_disabled, 'typescript') != -1 || index(g:polyglot_disabled, 'jsx') != -1)
|
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'graphql') == -1
|
||||||
|
|
||||||
|
" Copyright (c) 2016-2020 Jon Parise <jon@indelible.org>
|
||||||
|
"
|
||||||
|
" Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
" of this software and associated documentation files (the "Software"), to
|
||||||
|
" deal in the Software without restriction, including without limitation the
|
||||||
|
" rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
|
||||||
|
" sell copies of the Software, and to permit persons to whom the Software is
|
||||||
|
" furnished to do so, subject to the following conditions:
|
||||||
|
"
|
||||||
|
" The above copyright notice and this permission notice shall be included in
|
||||||
|
" all copies or substantial portions of the Software.
|
||||||
|
"
|
||||||
|
" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
" IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
" FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
" AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
" LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||||
|
" FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
|
||||||
|
" IN THE SOFTWARE.
|
||||||
|
"
|
||||||
|
" Language: GraphQL
|
||||||
|
" Maintainer: Jon Parise <jon@indelible.org>
|
||||||
|
|
||||||
|
runtime! indent/graphql.vim
|
||||||
|
|
||||||
|
" Don't redefine our function and also require the standard Javascript indent
|
||||||
|
" function to exist.
|
||||||
|
if exists('*GetJavascriptGraphQLIndent') || !exists('*GetJavascriptIndent')
|
||||||
|
finish
|
||||||
|
endif
|
||||||
|
|
||||||
|
" Set the indentexpr with our own version that will call GetGraphQLIndent when
|
||||||
|
" we're inside of a GraphQL string and otherwise defer to GetJavascriptIndent.
|
||||||
|
setlocal indentexpr=GetJavascriptGraphQLIndent()
|
||||||
|
|
||||||
|
function GetJavascriptGraphQLIndent()
|
||||||
|
let l:stack = map(synstack(v:lnum, 1), "synIDattr(v:val,'name')")
|
||||||
|
if !empty(l:stack) && l:stack[0] ==# 'graphqlTemplateString'
|
||||||
|
return GetGraphQLIndent()
|
||||||
|
endif
|
||||||
|
|
||||||
|
return GetJavascriptIndent()
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
endif
|
||||||
|
if !exists('g:polyglot_disabled') || (index(g:polyglot_disabled, 'javascript') == -1 && index(g:polyglot_disabled, 'jsx') == -1)
|
||||||
|
|
||||||
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
|
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
|
||||||
" Vim indent file
|
" Vim indent file
|
||||||
@@ -21,7 +68,7 @@ if exists('s:did_indent')
|
|||||||
endif
|
endif
|
||||||
|
|
||||||
setlocal indentexpr=GetJsxIndent()
|
setlocal indentexpr=GetJsxIndent()
|
||||||
setlocal indentkeys=0{,0},0),0],0\,,!^F,o,O,e,*<Return>,<>>,<<>,/
|
setlocal indentkeys=0.,0{,0},0),0],0?,0\*,0\,,!^F,:,<:>,o,O,e,<>>,=*/
|
||||||
|
|
||||||
function! GetJsxIndent()
|
function! GetJsxIndent()
|
||||||
return jsx_pretty#indent#get(function('GetJavascriptIndent'))
|
return jsx_pretty#indent#get(function('GetJavascriptIndent'))
|
||||||
|
|||||||
5
after/indent/javascriptreact.vim
Normal file
5
after/indent/javascriptreact.vim
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
if !exists('g:polyglot_disabled') || (index(g:polyglot_disabled, 'javascript') == -1 && index(g:polyglot_disabled, 'jsx') == -1)
|
||||||
|
|
||||||
|
source <sfile>:h/javascript.vim
|
||||||
|
|
||||||
|
endif
|
||||||
40
after/indent/tsx.vim
Normal file
40
after/indent/tsx.vim
Normal file
@@ -0,0 +1,40 @@
|
|||||||
|
if !exists('g:polyglot_disabled') || (index(g:polyglot_disabled, 'javascript') == -1 && index(g:polyglot_disabled, 'jsx') == -1)
|
||||||
|
|
||||||
|
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
|
||||||
|
" Vim indent file
|
||||||
|
"
|
||||||
|
" Language: typescript.jsx
|
||||||
|
" Maintainer: MaxMellon <maxmellon1994@gmail.com>
|
||||||
|
" Depends: leafgarland/typescript-vim
|
||||||
|
"
|
||||||
|
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
|
||||||
|
|
||||||
|
if get(g:, 'vim_jsx_pretty_disable_tsx', 0)
|
||||||
|
finish
|
||||||
|
endif
|
||||||
|
|
||||||
|
if exists('b:did_indent')
|
||||||
|
let s:did_indent = b:did_indent
|
||||||
|
unlet b:did_indent
|
||||||
|
endif
|
||||||
|
|
||||||
|
let s:keepcpo = &cpo
|
||||||
|
set cpo&vim
|
||||||
|
|
||||||
|
if exists('s:did_indent')
|
||||||
|
let b:did_indent = s:did_indent
|
||||||
|
endif
|
||||||
|
|
||||||
|
runtime! indent/typescript.vim
|
||||||
|
|
||||||
|
setlocal indentexpr=GetJsxIndent()
|
||||||
|
setlocal indentkeys=0.,0{,0},0),0],0?,0\*,0\,,!^F,:,<:>,o,O,e,<>>,=*/
|
||||||
|
|
||||||
|
function! GetJsxIndent()
|
||||||
|
return jsx_pretty#indent#get(function('GetTypescriptIndent'))
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
let &cpo = s:keepcpo
|
||||||
|
unlet s:keepcpo
|
||||||
|
|
||||||
|
endif
|
||||||
@@ -1,34 +1,47 @@
|
|||||||
if !exists('g:polyglot_disabled') || !(index(g:polyglot_disabled, 'typescript') != -1 || index(g:polyglot_disabled, 'typescript') != -1 || index(g:polyglot_disabled, 'jsx') != -1)
|
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'graphql') == -1
|
||||||
|
|
||||||
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
|
" Copyright (c) 2016-2020 Jon Parise <jon@indelible.org>
|
||||||
" Vim indent file
|
|
||||||
"
|
"
|
||||||
" Language: typescript.jsx
|
" Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
" Maintainer: MaxMellon <maxmellon1994@gmail.com>
|
" of this software and associated documentation files (the "Software"), to
|
||||||
" Depends: leafgarland/typescript-vim
|
" deal in the Software without restriction, including without limitation the
|
||||||
|
" rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
|
||||||
|
" sell copies of the Software, and to permit persons to whom the Software is
|
||||||
|
" furnished to do so, subject to the following conditions:
|
||||||
"
|
"
|
||||||
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
|
" The above copyright notice and this permission notice shall be included in
|
||||||
|
" all copies or substantial portions of the Software.
|
||||||
|
"
|
||||||
|
" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
" IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
" FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
" AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
" LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||||
|
" FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
|
||||||
|
" IN THE SOFTWARE.
|
||||||
|
"
|
||||||
|
" Language: GraphQL
|
||||||
|
" Maintainer: Jon Parise <jon@indelible.org>
|
||||||
|
|
||||||
if exists('b:did_indent')
|
runtime! indent/graphql.vim
|
||||||
let s:did_indent = b:did_indent
|
|
||||||
unlet b:did_indent
|
" Don't redefine our function and also require the standard Typescript indent
|
||||||
|
" function to exist.
|
||||||
|
if exists('*GetTypescriptGraphQLIndent') || !exists('*GetTypescriptIndent')
|
||||||
|
finish
|
||||||
endif
|
endif
|
||||||
|
|
||||||
let s:keepcpo = &cpo
|
" Set the indentexpr with our own version that will call GetGraphQLIndent when
|
||||||
set cpo&vim
|
" we're inside of a GraphQL string and otherwise defer to GetTypescriptIndent.
|
||||||
|
setlocal indentexpr=GetTypescriptGraphQLIndent()
|
||||||
|
|
||||||
if exists('s:did_indent')
|
function GetTypescriptGraphQLIndent()
|
||||||
let b:did_indent = s:did_indent
|
let l:stack = map(synstack(v:lnum, 1), "synIDattr(v:val,'name')")
|
||||||
endif
|
if !empty(l:stack) && l:stack[0] ==# 'graphqlTemplateString'
|
||||||
|
return GetGraphQLIndent()
|
||||||
|
endif
|
||||||
|
|
||||||
setlocal indentexpr=GetJsxIndent()
|
return GetTypescriptIndent()
|
||||||
setlocal indentkeys=0{,0},0),0],0\,,!^F,o,O,e,*<Return>,<>>,<<>,/
|
|
||||||
|
|
||||||
function! GetJsxIndent()
|
|
||||||
return jsx_pretty#indent#get(function('GetTypescriptIndent'))
|
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
let &cpo = s:keepcpo
|
|
||||||
unlet s:keepcpo
|
|
||||||
|
|
||||||
endif
|
endif
|
||||||
|
|||||||
5
after/indent/typescriptreact.vim
Normal file
5
after/indent/typescriptreact.vim
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
if !exists('g:polyglot_disabled') || (index(g:polyglot_disabled, 'javascript') == -1 && index(g:polyglot_disabled, 'jsx') == -1)
|
||||||
|
|
||||||
|
source <sfile>:h/tsx.vim
|
||||||
|
|
||||||
|
endif
|
||||||
@@ -1,308 +0,0 @@
|
|||||||
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'c++11') == -1
|
|
||||||
|
|
||||||
" Vim syntax file
|
|
||||||
" Language: C Additions
|
|
||||||
" Maintainer: Jon Haggblad <jon@haeggblad.com>
|
|
||||||
" Contributor: Mikhail Wolfson <mywolfson@gmail.com>
|
|
||||||
" URL: http://www.haeggblad.com
|
|
||||||
" Last Change: 6 Sep 2014
|
|
||||||
" Version: 0.3
|
|
||||||
" Changelog:
|
|
||||||
" 0.3 - integration of aftersyntaxc.vim
|
|
||||||
" 0.2 - Cleanup
|
|
||||||
" 0.1 - initial version.
|
|
||||||
"
|
|
||||||
" Syntax highlighting for functions in C.
|
|
||||||
"
|
|
||||||
" Based on:
|
|
||||||
" http://stackoverflow.com/questions/736701/class-function-names-highlighting-in-vim
|
|
||||||
|
|
||||||
" -----------------------------------------------------------------------------
|
|
||||||
" Highlight function names.
|
|
||||||
" -----------------------------------------------------------------------------
|
|
||||||
if !exists('g:cpp_no_function_highlight')
|
|
||||||
syn match cCustomParen transparent "(" contains=cParen contains=cCppParen
|
|
||||||
syn match cCustomFunc "\w\+\s*(\@=" contains=cCustomParen
|
|
||||||
hi def link cCustomFunc Function
|
|
||||||
endif
|
|
||||||
|
|
||||||
" -----------------------------------------------------------------------------
|
|
||||||
" Highlight member variable names.
|
|
||||||
" -----------------------------------------------------------------------------
|
|
||||||
if exists('g:cpp_member_variable_highlight') && g:cpp_member_variable_highlight
|
|
||||||
syn match cCustomDot "\." contained
|
|
||||||
syn match cCustomPtr "->" contained
|
|
||||||
syn match cCustomMemVar "\(\.\|->\)\h\w*" contains=cCustomDot,cCustomPtr
|
|
||||||
hi def link cCustomMemVar Function
|
|
||||||
endif
|
|
||||||
|
|
||||||
" -----------------------------------------------------------------------------
|
|
||||||
" Source: aftersyntaxc.vim
|
|
||||||
" -----------------------------------------------------------------------------
|
|
||||||
|
|
||||||
" Common ANSI-standard functions
|
|
||||||
syn keyword cAnsiFunction MULU_ DIVU_ MODU_ MUL_ DIV_ MOD_
|
|
||||||
syn keyword cAnsiFunction main typeof
|
|
||||||
syn keyword cAnsiFunction open close read write lseek dup dup2
|
|
||||||
syn keyword cAnsiFunction fcntl ioctl
|
|
||||||
syn keyword cAnsiFunction wctrans towctrans towupper
|
|
||||||
syn keyword cAnsiFunction towlower wctype iswctype
|
|
||||||
syn keyword cAnsiFunction iswxdigit iswupper iswspace
|
|
||||||
syn keyword cAnsiFunction iswpunct iswprint iswlower
|
|
||||||
syn keyword cAnsiFunction iswgraph iswdigit iswcntrl
|
|
||||||
syn keyword cAnsiFunction iswalpha iswalnum wcsrtombs
|
|
||||||
syn keyword cAnsiFunction mbsrtowcs wcrtomb mbrtowc
|
|
||||||
syn keyword cAnsiFunction mbrlen mbsinit wctob
|
|
||||||
syn keyword cAnsiFunction btowc wcsfxtime wcsftime
|
|
||||||
syn keyword cAnsiFunction wmemset wmemmove wmemcpy
|
|
||||||
syn keyword cAnsiFunction wmemcmp wmemchr wcstok
|
|
||||||
syn keyword cAnsiFunction wcsstr wcsspn wcsrchr
|
|
||||||
syn keyword cAnsiFunction wcspbrk wcslen wcscspn
|
|
||||||
syn keyword cAnsiFunction wcschr wcsxfrm wcsncmp
|
|
||||||
syn keyword cAnsiFunction wcscoll wcscmp wcsncat
|
|
||||||
syn keyword cAnsiFunction wcscat wcsncpy wcscpy
|
|
||||||
syn keyword cAnsiFunction wcstoull wcstoul wcstoll
|
|
||||||
syn keyword cAnsiFunction wcstol wcstold wcstof
|
|
||||||
syn keyword cAnsiFunction wcstod ungetwc putwchar
|
|
||||||
syn keyword cAnsiFunction putwc getwchar getwc
|
|
||||||
syn keyword cAnsiFunction fwide fputws fputwc
|
|
||||||
syn keyword cAnsiFunction fgetws fgetwc wscanf
|
|
||||||
syn keyword cAnsiFunction wprintf vwscanf vwprintf
|
|
||||||
syn keyword cAnsiFunction vswscanf vswprintf vfwscanf
|
|
||||||
syn keyword cAnsiFunction vfwprintf swscanf swprintf
|
|
||||||
syn keyword cAnsiFunction fwscanf fwprintf zonetime
|
|
||||||
syn keyword cAnsiFunction strfxtime strftime localtime
|
|
||||||
syn keyword cAnsiFunction gmtime ctime asctime
|
|
||||||
syn keyword cAnsiFunction time mkxtime mktime
|
|
||||||
syn keyword cAnsiFunction difftime clock strlen
|
|
||||||
syn keyword cAnsiFunction strerror memset strtok
|
|
||||||
syn keyword cAnsiFunction strstr strspn strrchr
|
|
||||||
syn keyword cAnsiFunction strpbrk strcspn strchr
|
|
||||||
syn keyword cAnsiFunction memchr strxfrm strncmp
|
|
||||||
syn keyword cAnsiFunction strcoll strcmp memcmp
|
|
||||||
syn keyword cAnsiFunction strncat strcat strncpy
|
|
||||||
syn keyword cAnsiFunction strcpy memmove memcpy
|
|
||||||
syn keyword cAnsiFunction wcstombs mbstowcs wctomb
|
|
||||||
syn keyword cAnsiFunction mbtowc mblen lldiv
|
|
||||||
syn keyword cAnsiFunction ldiv div llabs
|
|
||||||
syn keyword cAnsiFunction labs abs qsort
|
|
||||||
"syn keyword cAnsiFunction bsearch system getenv
|
|
||||||
syn keyword cAnsiFunction bsearch getenv
|
|
||||||
syn keyword cAnsiFunction exit atexit abort
|
|
||||||
syn keyword cAnsiFunction realloc malloc free
|
|
||||||
syn keyword cAnsiFunction calloc srand rand
|
|
||||||
syn keyword cAnsiFunction strtoull strtoul strtoll
|
|
||||||
syn keyword cAnsiFunction strtol strtold strtof
|
|
||||||
syn keyword cAnsiFunction strtod atoll atol
|
|
||||||
syn keyword cAnsiFunction atoi atof perror
|
|
||||||
syn keyword cAnsiFunction ferror feof clearerr
|
|
||||||
syn keyword cAnsiFunction rewind ftell fsetpos
|
|
||||||
syn keyword cAnsiFunction fseek fgetpos fwrite
|
|
||||||
syn keyword cAnsiFunction fread ungetc puts
|
|
||||||
syn keyword cAnsiFunction putchar putc gets
|
|
||||||
syn keyword cAnsiFunction getchar getc fputs
|
|
||||||
syn keyword cAnsiFunction fputc fgets fgetc
|
|
||||||
syn keyword cAnsiFunction vsscanf vsprintf vsnprintf
|
|
||||||
syn keyword cAnsiFunction vscanf vprintf vfscanf
|
|
||||||
syn keyword cAnsiFunction vfprintf sscanf sprintf
|
|
||||||
syn keyword cAnsiFunction snprintf scanf printf
|
|
||||||
syn keyword cAnsiFunction fscanf fprintf setvbuf
|
|
||||||
syn keyword cAnsiFunction setbuf freopen fopen
|
|
||||||
syn keyword cAnsiFunction fflush fclose tmpnam
|
|
||||||
syn keyword cAnsiFunction tmpfile rename remove
|
|
||||||
syn keyword cAnsiFunction offsetof va_start va_end
|
|
||||||
syn keyword cAnsiFunction va_copy va_arg raise signal
|
|
||||||
syn keyword cAnsiFunction longjmp setjmp isunordered
|
|
||||||
syn keyword cAnsiFunction islessgreater islessequal isless
|
|
||||||
syn keyword cAnsiFunction isgreaterequal isgreater fmal
|
|
||||||
syn keyword cAnsiFunction fmaf fma fminl
|
|
||||||
syn keyword cAnsiFunction fminf fmin fmaxl
|
|
||||||
syn keyword cAnsiFunction fmaxf fmax fdiml
|
|
||||||
syn keyword cAnsiFunction fdimf fdim nextafterxl
|
|
||||||
syn keyword cAnsiFunction nextafterxf nextafterx nextafterl
|
|
||||||
syn keyword cAnsiFunction nextafterf nextafter nanl
|
|
||||||
syn keyword cAnsiFunction nanf nan copysignl
|
|
||||||
syn keyword cAnsiFunction copysignf copysign remquol
|
|
||||||
syn keyword cAnsiFunction remquof remquo remainderl
|
|
||||||
syn keyword cAnsiFunction remainderf remainder fmodl
|
|
||||||
syn keyword cAnsiFunction fmodf fmod truncl
|
|
||||||
syn keyword cAnsiFunction truncf trunc llroundl
|
|
||||||
syn keyword cAnsiFunction llroundf llround lroundl
|
|
||||||
syn keyword cAnsiFunction lroundf lround roundl
|
|
||||||
syn keyword cAnsiFunction roundf round llrintl
|
|
||||||
syn keyword cAnsiFunction llrintf llrint lrintl
|
|
||||||
syn keyword cAnsiFunction lrintf lrint rintl
|
|
||||||
syn keyword cAnsiFunction rintf rint nearbyintl
|
|
||||||
syn keyword cAnsiFunction nearbyintf nearbyint floorl
|
|
||||||
syn keyword cAnsiFunction floorf floor ceill
|
|
||||||
syn keyword cAnsiFunction ceilf ceil tgammal
|
|
||||||
syn keyword cAnsiFunction tgammaf tgamma lgammal
|
|
||||||
syn keyword cAnsiFunction lgammaf lgamma erfcl
|
|
||||||
syn keyword cAnsiFunction erfcf erfc erfl
|
|
||||||
syn keyword cAnsiFunction erff erf sqrtl
|
|
||||||
syn keyword cAnsiFunction sqrtf sqrt powl
|
|
||||||
syn keyword cAnsiFunction powf pow hypotl
|
|
||||||
syn keyword cAnsiFunction hypotf hypot fabsl
|
|
||||||
syn keyword cAnsiFunction fabsf fabs cbrtl
|
|
||||||
syn keyword cAnsiFunction cbrtf cbrt scalblnl
|
|
||||||
syn keyword cAnsiFunction scalblnf scalbln scalbnl
|
|
||||||
syn keyword cAnsiFunction scalbnf scalbn modfl
|
|
||||||
syn keyword cAnsiFunction modff modf logbl
|
|
||||||
syn keyword cAnsiFunction logbf logb log2l
|
|
||||||
syn keyword cAnsiFunction log2f log2 log1pl
|
|
||||||
syn keyword cAnsiFunction log1pf log1p log10l
|
|
||||||
syn keyword cAnsiFunction log10f log10 logl
|
|
||||||
syn keyword cAnsiFunction logf log ldexpl
|
|
||||||
syn keyword cAnsiFunction ldexpf ldexp ilogbl
|
|
||||||
syn keyword cAnsiFunction ilogbf ilogb frexpl
|
|
||||||
syn keyword cAnsiFunction frexpf frexp expm1l
|
|
||||||
syn keyword cAnsiFunction expm1f expm1 exp2l
|
|
||||||
syn keyword cAnsiFunction exp2f exp2 expl
|
|
||||||
syn keyword cAnsiFunction expf exp tanhl
|
|
||||||
syn keyword cAnsiFunction tanhf tanh sinhl
|
|
||||||
syn keyword cAnsiFunction sinhf sinh coshl
|
|
||||||
syn keyword cAnsiFunction coshf cosh atanhl
|
|
||||||
syn keyword cAnsiFunction atanhf atanh asinhl
|
|
||||||
syn keyword cAnsiFunction asinhf asinh acoshl
|
|
||||||
syn keyword cAnsiFunction acoshf acosh tanl
|
|
||||||
syn keyword cAnsiFunction tanf tan sinl
|
|
||||||
syn keyword cAnsiFunction sinf sin cosl
|
|
||||||
syn keyword cAnsiFunction cosf cos atan2l
|
|
||||||
syn keyword cAnsiFunction atan2f atan2 atanl
|
|
||||||
syn keyword cAnsiFunction atanf atan asinl
|
|
||||||
syn keyword cAnsiFunction asinf asin acosl
|
|
||||||
syn keyword cAnsiFunction acosf acos signbit
|
|
||||||
syn keyword cAnsiFunction isnormal isnan isinf
|
|
||||||
syn keyword cAnsiFunction isfinite fpclassify localeconv
|
|
||||||
syn keyword cAnsiFunction setlocale wcstoumax wcstoimax
|
|
||||||
syn keyword cAnsiFunction strtoumax strtoimax feupdateenv
|
|
||||||
syn keyword cAnsiFunction fesetenv feholdexcept fegetenv
|
|
||||||
syn keyword cAnsiFunction fesetround fegetround fetestexcept
|
|
||||||
syn keyword cAnsiFunction fesetexceptflag feraiseexcept fegetexceptflag
|
|
||||||
syn keyword cAnsiFunction feclearexcept toupper tolower
|
|
||||||
syn keyword cAnsiFunction isxdigit isupper isspace
|
|
||||||
syn keyword cAnsiFunction ispunct isprint islower
|
|
||||||
syn keyword cAnsiFunction isgraph isdigit iscntrl
|
|
||||||
syn keyword cAnsiFunction isalpha isalnum creall
|
|
||||||
syn keyword cAnsiFunction crealf creal cprojl
|
|
||||||
syn keyword cAnsiFunction cprojf cproj conjl
|
|
||||||
syn keyword cAnsiFunction conjf conj cimagl
|
|
||||||
syn keyword cAnsiFunction cimagf cimag cargl
|
|
||||||
syn keyword cAnsiFunction cargf carg csqrtl
|
|
||||||
syn keyword cAnsiFunction csqrtf csqrt cpowl
|
|
||||||
syn keyword cAnsiFunction cpowf cpow cabsl
|
|
||||||
syn keyword cAnsiFunction cabsf cabs clogl
|
|
||||||
syn keyword cAnsiFunction clogf clog cexpl
|
|
||||||
syn keyword cAnsiFunction cexpf cexp ctanhl
|
|
||||||
syn keyword cAnsiFunction ctanhf ctanh csinhl
|
|
||||||
syn keyword cAnsiFunction csinhf csinh ccoshl
|
|
||||||
syn keyword cAnsiFunction ccoshf ccosh catanhl
|
|
||||||
syn keyword cAnsiFunction catanhf catanh casinhl
|
|
||||||
syn keyword cAnsiFunction casinhf casinh cacoshl
|
|
||||||
syn keyword cAnsiFunction cacoshf cacosh ctanl
|
|
||||||
syn keyword cAnsiFunction ctanf ctan csinl
|
|
||||||
syn keyword cAnsiFunction csinf csin ccosl
|
|
||||||
syn keyword cAnsiFunction ccosf ccos catanl
|
|
||||||
syn keyword cAnsiFunction catanf catan casinl
|
|
||||||
syn keyword cAnsiFunction casinf casin cacosl
|
|
||||||
syn keyword cAnsiFunction cacosf cacos assert
|
|
||||||
syn keyword cAnsiFunction UINTMAX_C INTMAX_C UINT64_C
|
|
||||||
syn keyword cAnsiFunction UINT32_C UINT16_C UINT8_C
|
|
||||||
syn keyword cAnsiFunction INT64_C INT32_C INT16_C INT8_C
|
|
||||||
|
|
||||||
" Common ANSI-standard Names
|
|
||||||
syn keyword cAnsiName PRId8 PRIi16 PRIo32 PRIu64
|
|
||||||
syn keyword cAnsiName PRId16 PRIi32 PRIo64 PRIuLEAST8
|
|
||||||
syn keyword cAnsiName PRId32 PRIi64 PRIoLEAST8 PRIuLEAST16
|
|
||||||
syn keyword cAnsiName PRId64 PRIiLEAST8 PRIoLEAST16 PRIuLEAST32
|
|
||||||
syn keyword cAnsiName PRIdLEAST8 PRIiLEAST16 PRIoLEAST32 PRIuLEAST64
|
|
||||||
syn keyword cAnsiName PRIdLEAST16 PRIiLEAST32 PRIoLEAST64 PRIuFAST8
|
|
||||||
syn keyword cAnsiName PRIdLEAST32 PRIiLEAST64 PRIoFAST8 PRIuFAST16
|
|
||||||
syn keyword cAnsiName PRIdLEAST64 PRIiFAST8 PRIoFAST16 PRIuFAST32
|
|
||||||
syn keyword cAnsiName PRIdFAST8 PRIiFAST16 PRIoFAST32 PRIuFAST64
|
|
||||||
syn keyword cAnsiName PRIdFAST16 PRIiFAST32 PRIoFAST64 PRIuMAX
|
|
||||||
syn keyword cAnsiName PRIdFAST32 PRIiFAST64 PRIoMAX PRIuPTR
|
|
||||||
syn keyword cAnsiName PRIdFAST64 PRIiMAX PRIoPTR PRIx8
|
|
||||||
syn keyword cAnsiName PRIdMAX PRIiPTR PRIu8 PRIx16
|
|
||||||
syn keyword cAnsiName PRIdPTR PRIo8 PRIu16 PRIx32
|
|
||||||
syn keyword cAnsiName PRIi8 PRIo16 PRIu32 PRIx64
|
|
||||||
|
|
||||||
syn keyword cAnsiName PRIxLEAST8 SCNd8 SCNiFAST32 SCNuLEAST32
|
|
||||||
syn keyword cAnsiName PRIxLEAST16 SCNd16 SCNiFAST64 SCNuLEAST64
|
|
||||||
syn keyword cAnsiName PRIxLEAST32 SCNd32 SCNiMAX SCNuFAST8
|
|
||||||
syn keyword cAnsiName PRIxLEAST64 SCNd64 SCNiPTR SCNuFAST16
|
|
||||||
syn keyword cAnsiName PRIxFAST8 SCNdLEAST8 SCNo8 SCNuFAST32
|
|
||||||
syn keyword cAnsiName PRIxFAST16 SCNdLEAST16 SCNo16 SCNuFAST64
|
|
||||||
syn keyword cAnsiName PRIxFAST32 SCNdLEAST32 SCNo32 SCNuMAX
|
|
||||||
syn keyword cAnsiName PRIxFAST64 SCNdLEAST64 SCNo64 SCNuPTR
|
|
||||||
syn keyword cAnsiName PRIxMAX SCNdFAST8 SCNoLEAST8 SCNx8
|
|
||||||
syn keyword cAnsiName PRIxPTR SCNdFAST16 SCNoLEAST16 SCNx16
|
|
||||||
syn keyword cAnsiName PRIX8 SCNdFAST32 SCNoLEAST32 SCNx32
|
|
||||||
syn keyword cAnsiName PRIX16 SCNdFAST64 SCNoLEAST64 SCNx64
|
|
||||||
syn keyword cAnsiName PRIX32 SCNdMAX SCNoFAST8 SCNxLEAST8
|
|
||||||
syn keyword cAnsiName PRIX64 SCNdPTR SCNoFAST16 SCNxLEAST16
|
|
||||||
syn keyword cAnsiName PRIXLEAST8 SCNi8 SCNoFAST32 SCNxLEAST32
|
|
||||||
syn keyword cAnsiName PRIXLEAST16 SCNi16 SCNoFAST64 SCNxLEAST64
|
|
||||||
syn keyword cAnsiName PRIXLEAST32 SCNi32 SCNoMAX SCNxFAST8
|
|
||||||
syn keyword cAnsiName PRIXLEAST64 SCNi64 SCNoPTR SCNxFAST16
|
|
||||||
syn keyword cAnsiName PRIXFAST8 SCNiLEAST8 SCNu8 SCNxFAST32
|
|
||||||
syn keyword cAnsiName PRIXFAST16 SCNiLEAST16 SCNu16 SCNxFAST64
|
|
||||||
syn keyword cAnsiName PRIXFAST32 SCNiLEAST32 SCNu32 SCNxMAX
|
|
||||||
syn keyword cAnsiName PRIXFAST64 SCNiLEAST64 SCNu64 SCNxPTR
|
|
||||||
syn keyword cAnsiName PRIXMAX SCNiFAST8 SCNuLEAST8
|
|
||||||
syn keyword cAnsiName PRIXPTR SCNiFAST16 SCNuLEAST16
|
|
||||||
|
|
||||||
syn keyword cAnsiName errno environ
|
|
||||||
|
|
||||||
syn keyword cAnsiName STDC CX_LIMITED_RANGE
|
|
||||||
syn keyword cAnsiName STDC FENV_ACCESS
|
|
||||||
syn keyword cAnsiName STDC FP_CONTRACT
|
|
||||||
|
|
||||||
syn keyword cAnsiName and bitor not_eq xor
|
|
||||||
syn keyword cAnsiName and_eq compl or xor_eq
|
|
||||||
syn keyword cAnsiName bitand not or_eq
|
|
||||||
|
|
||||||
hi def link cAnsiFunction cFunction
|
|
||||||
hi def link cAnsiName cIdentifier
|
|
||||||
hi def link cFunction Function
|
|
||||||
hi def link cIdentifier Identifier
|
|
||||||
|
|
||||||
" Booleans
|
|
||||||
syn keyword cBoolean true false TRUE FALSE
|
|
||||||
hi def link cBoolean Boolean
|
|
||||||
|
|
||||||
" -----------------------------------------------------------------------------
|
|
||||||
" Additional optional highlighting
|
|
||||||
" -----------------------------------------------------------------------------
|
|
||||||
|
|
||||||
" Operators
|
|
||||||
"syn match cOperator "\(<<\|>>\|[-+*/%&^|<>!=]\)="
|
|
||||||
"syn match cOperator "<<\|>>\|&&\|||\|++\|--\|->"
|
|
||||||
"syn match cOperator "[.!~*&%<>^|=,+-]"
|
|
||||||
"syn match cOperator "/[^/*=]"me=e-1
|
|
||||||
"syn match cOperator "/$"
|
|
||||||
"syn match cOperator "&&\|||"
|
|
||||||
"syn match cOperator "[][]"
|
|
||||||
"
|
|
||||||
"" Preprocs
|
|
||||||
"syn keyword cDefined defined contained containedin=cDefine
|
|
||||||
"hi def link cDefined cDefine
|
|
||||||
|
|
||||||
"" Functions
|
|
||||||
"syn match cUserFunction "\<\h\w*\>\(\s\|\n\)*("me=e-1 contains=cType,cDelimiter,cDefine
|
|
||||||
"syn match cUserFunctionPointer "(\s*\*\s*\h\w*\s*)\(\s\|\n\)*(" contains=cDelimiter,cOperator
|
|
||||||
"
|
|
||||||
"hi def link cUserFunction cFunction
|
|
||||||
"hi def link cUserFunctionPointer cFunction
|
|
||||||
"
|
|
||||||
"" Delimiters
|
|
||||||
"syn match cDelimiter "[();\\]"
|
|
||||||
"" foldmethod=syntax fix, courtesy of Ivan Freitas
|
|
||||||
"syn match cBraces display "[{}]"
|
|
||||||
|
|
||||||
" Links
|
|
||||||
"hi def link cDelimiter Delimiter
|
|
||||||
" foldmethod=syntax fix, courtesy of Ivan Freitas
|
|
||||||
"hi def link cBraces Delimiter
|
|
||||||
|
|
||||||
endif
|
|
||||||
2105
after/syntax/cpp.vim
2105
after/syntax/cpp.vim
File diff suppressed because it is too large
Load Diff
@@ -1,4 +1,4 @@
|
|||||||
if !exists('g:polyglot_disabled') || !(index(g:polyglot_disabled, 'typescript') != -1 || index(g:polyglot_disabled, 'typescript') != -1 || index(g:polyglot_disabled, 'jsx') != -1)
|
if !exists('g:polyglot_disabled') || (index(g:polyglot_disabled, 'javascript') == -1 && index(g:polyglot_disabled, 'jsx') == -1)
|
||||||
|
|
||||||
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
|
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
|
||||||
" Vim syntax file
|
" Vim syntax file
|
||||||
@@ -22,34 +22,31 @@ if exists('s:current_syntax')
|
|||||||
let b:current_syntax = s:current_syntax
|
let b:current_syntax = s:current_syntax
|
||||||
endif
|
endif
|
||||||
|
|
||||||
if hlexists("jsNoise") " pangloss/vim-javascript
|
if hlexists("jsDebugger") || hlexists("jsNoise") " yuezk/vim-js or pangloss/vim-javascript
|
||||||
syntax cluster jsExpression add=jsxRegion
|
syntax cluster jsExpression add=jsxRegion
|
||||||
elseif hlexists("javascriptOpSymbols") " othree/yajs.vim
|
elseif hlexists("javascriptOpSymbols") " othree/yajs.vim
|
||||||
" refine the javascript line comment
|
" refine the javascript line comment
|
||||||
syntax region javascriptLineComment start=+//+ end=/$/ contains=@Spell,javascriptCommentTodo extend keepend
|
syntax region javascriptLineComment start=+//+ end=/$/ contains=@Spell,javascriptCommentTodo extend keepend
|
||||||
syntax cluster javascriptValue add=jsxRegion
|
syntax cluster javascriptValue add=jsxRegion
|
||||||
syntax cluster javascriptNoReserved add=jsxElement,jsxTag
|
syntax cluster javascriptNoReserved add=jsxElement,jsxTag
|
||||||
|
|
||||||
" add support to arrow function which returns a tagged template string, e.g.
|
|
||||||
" () => html`<div></div>`
|
|
||||||
syntax cluster afterArrowFunc add=javascriptTagRef
|
|
||||||
else " build-in javascript syntax
|
else " build-in javascript syntax
|
||||||
" refine the javascript line comment
|
" refine the javascript line comment
|
||||||
syntax region javaScriptLineComment start=+//+ end=/$/ contains=@Spell,javascriptCommentTodo extend keepend
|
syntax region javaScriptLineComment start=+//+ end=/$/ contains=@Spell,javascriptCommentTodo extend keepend
|
||||||
|
|
||||||
|
" refine the template string syntax
|
||||||
|
syntax region javaScriptEmbed matchgroup=javaScriptEmbedBraces start=+\${+ end=+}+ contained contains=@javaScriptEmbededExpr
|
||||||
|
|
||||||
" add a javaScriptBlock group for build-in syntax
|
" add a javaScriptBlock group for build-in syntax
|
||||||
syntax region javaScriptBlockBuildIn
|
syntax region javaScriptBlock
|
||||||
\ contained
|
|
||||||
\ matchgroup=javaScriptBraces
|
\ matchgroup=javaScriptBraces
|
||||||
\ start="{"
|
\ start="{"
|
||||||
\ end="}"
|
\ end="}"
|
||||||
|
\ contained
|
||||||
\ extend
|
\ extend
|
||||||
\ contains=javaScriptBlockBuildIn,@javaScriptEmbededExpr,javaScript.*
|
\ contains=javaScriptBlock,@javaScriptEmbededExpr,javaScript.*
|
||||||
\ fold
|
\ fold
|
||||||
syntax cluster javaScriptEmbededExpr add=jsxRegion
|
|
||||||
|
|
||||||
" refine the template string syntax
|
syntax cluster javaScriptEmbededExpr add=jsxRegion,javaScript.*
|
||||||
syntax region javaScriptStringT start=+`+ skip=+\\\\\|\\`+ end=+`+ contains=javaScriptSpecial,javaScriptEmbed,@htmlPreproc extend
|
|
||||||
syntax region javaScriptEmbed matchgroup=javaScriptEmbedBraces start=+\${+ end=+}+ contained contains=@javaScriptEmbededExpr,javaScript.*
|
|
||||||
endif
|
endif
|
||||||
|
|
||||||
runtime syntax/jsx_pretty.vim
|
runtime syntax/jsx_pretty.vim
|
||||||
|
|||||||
@@ -1,5 +1,28 @@
|
|||||||
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'graphql') == -1
|
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'graphql') == -1
|
||||||
|
|
||||||
|
" Copyright (c) 2016-2020 Jon Parise <jon@indelible.org>
|
||||||
|
"
|
||||||
|
" Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
" of this software and associated documentation files (the "Software"), to
|
||||||
|
" deal in the Software without restriction, including without limitation the
|
||||||
|
" rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
|
||||||
|
" sell copies of the Software, and to permit persons to whom the Software is
|
||||||
|
" furnished to do so, subject to the following conditions:
|
||||||
|
"
|
||||||
|
" The above copyright notice and this permission notice shall be included in
|
||||||
|
" all copies or substantial portions of the Software.
|
||||||
|
"
|
||||||
|
" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
" IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
" FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
" AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
" LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||||
|
" FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
|
||||||
|
" IN THE SOFTWARE.
|
||||||
|
"
|
||||||
|
" Language: GraphQL
|
||||||
|
" Maintainer: Jon Parise <jon@indelible.org>
|
||||||
|
|
||||||
if exists('b:current_syntax')
|
if exists('b:current_syntax')
|
||||||
let s:current_syntax = b:current_syntax
|
let s:current_syntax = b:current_syntax
|
||||||
unlet b:current_syntax
|
unlet b:current_syntax
|
||||||
@@ -11,17 +34,31 @@ endif
|
|||||||
|
|
||||||
let s:tags = '\%(' . join(graphql#javascript_tags(), '\|') . '\)'
|
let s:tags = '\%(' . join(graphql#javascript_tags(), '\|') . '\)'
|
||||||
|
|
||||||
exec 'syntax region graphqlTemplateString start=+' . s:tags . '\@20<=`+ skip=+\\`+ end=+`+ contains=@GraphQLSyntax,jsTemplateExpression,jsSpecial extend'
|
if graphql#has_syntax_group('jsTemplateExpression')
|
||||||
exec 'syntax match graphqlTaggedTemplate +' . s:tags . '\ze`+ nextgroup=graphqlTemplateString'
|
" pangloss/vim-javascript
|
||||||
|
exec 'syntax region graphqlTemplateString start=+' . s:tags . '\@20<=`+ skip=+\\\\\|\\`+ end=+`+ contains=@GraphQLSyntax,jsTemplateExpression,jsSpecial extend'
|
||||||
|
exec 'syntax match graphqlTaggedTemplate +' . s:tags . '\ze`+ nextgroup=graphqlTemplateString'
|
||||||
|
syntax region graphqlTemplateExpression start=+${+ end=+}+ contained contains=jsTemplateExpression containedin=graphqlFold keepend
|
||||||
|
|
||||||
" Support expression interpolation ((${...})) inside template strings.
|
hi def link graphqlTemplateString jsTemplateString
|
||||||
syntax region graphqlTemplateExpression start=+${+ end=+}+ contained contains=jsTemplateExpression containedin=graphqlFold keepend
|
hi def link graphqlTaggedTemplate jsTaggedTemplate
|
||||||
|
hi def link graphqlTemplateExpression jsTemplateExpression
|
||||||
|
|
||||||
hi def link graphqlTemplateString jsTemplateString
|
syn cluster jsExpression add=graphqlTaggedTemplate
|
||||||
hi def link graphqlTaggedTemplate jsTaggedTemplate
|
syn cluster graphqlTaggedTemplate add=graphqlTemplateString
|
||||||
hi def link graphqlTemplateExpression jsTemplateExpression
|
elseif graphql#has_syntax_group('javaScriptStringT')
|
||||||
|
" runtime/syntax/javascript.vim
|
||||||
|
exec 'syntax region graphqlTemplateString start=+' . s:tags . '\@20<=`+ skip=+\\\\\|\\`+ end=+`+ contains=@GraphQLSyntax,javaScriptSpecial,javaScriptEmbed,@htmlPreproc extend'
|
||||||
|
exec 'syntax match graphqlTaggedTemplate +' . s:tags . '\ze`+ nextgroup=graphqlTemplateString'
|
||||||
|
syntax region graphqlTemplateExpression start=+${+ end=+}+ contained contains=@javaScriptEmbededExpr containedin=graphqlFold keepend
|
||||||
|
|
||||||
syn cluster jsExpression add=graphqlTaggedTemplate
|
hi def link graphqlTemplateString javaScriptStringT
|
||||||
syn cluster graphqlTaggedTemplate add=graphqlTemplateString
|
hi def link graphqlTaggedTemplate javaScriptEmbed
|
||||||
|
hi def link graphqlTemplateExpression javaScriptEmbed
|
||||||
|
|
||||||
|
syn cluster htmlJavaScript add=graphqlTaggedTemplate
|
||||||
|
syn cluster javaScriptEmbededExpr add=graphqlTaggedTemplate
|
||||||
|
syn cluster graphqlTaggedTemplate add=graphqlTemplateString
|
||||||
|
endif
|
||||||
|
|
||||||
endif
|
endif
|
||||||
|
|||||||
26
after/syntax/javascript/sql.vim
Normal file
26
after/syntax/javascript/sql.vim
Normal file
@@ -0,0 +1,26 @@
|
|||||||
|
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'javascript-sql') == -1
|
||||||
|
|
||||||
|
" Vim plugin
|
||||||
|
" Language: JavaScript
|
||||||
|
" Maintainer: Ian Langworth <ian@langworth.com>
|
||||||
|
|
||||||
|
if exists('b:current_syntax')
|
||||||
|
let s:current_syntax = b:current_syntax
|
||||||
|
unlet b:current_syntax
|
||||||
|
endif
|
||||||
|
|
||||||
|
exec 'syntax include @SQLSyntax syntax/' . g:javascript_sql_dialect . '.vim'
|
||||||
|
if exists('s:current_syntax')
|
||||||
|
let b:current_syntax = s:current_syntax
|
||||||
|
endif
|
||||||
|
|
||||||
|
syntax region sqlTemplateString start=+`+ skip=+\\\(`\|$\)+ end=+`+ contains=@SQLSyntax,jsTemplateExpression,jsSpecial extend
|
||||||
|
exec 'syntax match sqlTaggedTemplate +\%(SQL\)\%(`\)\@=+ nextgroup=sqlTemplateString'
|
||||||
|
|
||||||
|
hi def link sqlTemplateString jsTemplateString
|
||||||
|
hi def link sqlTaggedTemplate jsTaggedTemplate
|
||||||
|
|
||||||
|
syn cluster jsExpression add=sqlTaggedTemplate
|
||||||
|
syn cluster sqlTaggedTemplate add=sqlTemplateString
|
||||||
|
|
||||||
|
endif
|
||||||
5
after/syntax/javascriptreact.vim
Normal file
5
after/syntax/javascriptreact.vim
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
if !exists('g:polyglot_disabled') || (index(g:polyglot_disabled, 'javascript') == -1 && index(g:polyglot_disabled, 'jsx') == -1)
|
||||||
|
|
||||||
|
source <sfile>:h/javascript.vim
|
||||||
|
|
||||||
|
endif
|
||||||
5
after/syntax/javascriptreact/graphql.vim
Normal file
5
after/syntax/javascriptreact/graphql.vim
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'graphql') == -1
|
||||||
|
|
||||||
|
runtime! after/syntax/javascript/graphql.vim
|
||||||
|
|
||||||
|
endif
|
||||||
@@ -1,7 +1,13 @@
|
|||||||
if !exists('g:polyglot_disabled') || !(index(g:polyglot_disabled, 'typescript') != -1 || index(g:polyglot_disabled, 'typescript') != -1 || index(g:polyglot_disabled, 'jsx') != -1)
|
if !exists('g:polyglot_disabled') || (index(g:polyglot_disabled, 'javascript') == -1 && index(g:polyglot_disabled, 'jsx') == -1)
|
||||||
|
|
||||||
let s:highlight_close_tag = get(g:, 'vim_jsx_pretty_highlight_close_tag', 0)
|
let s:highlight_close_tag = get(g:, 'vim_jsx_pretty_highlight_close_tag', 0)
|
||||||
|
|
||||||
|
" detect jsx region
|
||||||
|
syntax region jsxRegion
|
||||||
|
\ start=+\%(\%(\_[([,?:=+\-*/>{}]\|<\s\+\|&&\|||\|=>\|\<return\|\<default\|\<await\|\<yield\)\_s*\)\@<=<\_s*\%(>\|\z(\%(script\|\s*\<T\>\)\@!\<[_$A-Za-z][-:._$A-Za-z0-9]*\>\)\%(\_s*\%([-+*)\]}&|?,]\|/\%([/*]\|\_s*>\)\@!\)\)\@!\)+
|
||||||
|
\ end=++
|
||||||
|
\ contains=jsxElement
|
||||||
|
|
||||||
" <tag id="sample">
|
" <tag id="sample">
|
||||||
" ~~~~~~~~~~~~~~~~~
|
" ~~~~~~~~~~~~~~~~~
|
||||||
" and self close tag
|
" and self close tag
|
||||||
@@ -12,11 +18,14 @@ syntax region jsxTag
|
|||||||
\ matchgroup=jsxOpenPunct
|
\ matchgroup=jsxOpenPunct
|
||||||
\ end=+>+
|
\ end=+>+
|
||||||
\ matchgroup=NONE
|
\ matchgroup=NONE
|
||||||
\ end=+\(/\_s*>\)\@=+
|
\ end=+\%(/\_s*>\)\@=+
|
||||||
\ contained
|
\ contained
|
||||||
\ contains=jsxOpenTag,jsxEscapeJs,jsxAttrib,jsComment,@javascriptComments,javaScriptLineComment,javaScriptComment,typescriptLineComment,typescriptComment,jsxSpreadOperator
|
\ contains=jsxOpenTag,jsxAttrib,jsxExpressionBlock,jsxSpreadOperator,jsComment,@javascriptComments,javaScriptLineComment,javaScriptComment,typescriptLineComment,typescriptComment
|
||||||
\ keepend
|
\ keepend
|
||||||
\ extend
|
\ extend
|
||||||
|
\ skipwhite
|
||||||
|
\ skipempty
|
||||||
|
\ nextgroup=jsxCloseString
|
||||||
|
|
||||||
" <tag></tag>
|
" <tag></tag>
|
||||||
" ~~~~~~~~~~~
|
" ~~~~~~~~~~~
|
||||||
@@ -27,30 +36,15 @@ syntax region jsxTag
|
|||||||
" <tag />
|
" <tag />
|
||||||
" ~~~~~~~
|
" ~~~~~~~
|
||||||
syntax region jsxElement
|
syntax region jsxElement
|
||||||
\ start=+<\_s*\(>\|\${\|\z(\<[-:_\.\$0-9A-Za-z]\+\>\)\)+
|
\ start=+<\_s*\%(>\|\${\|\z(\<[-:._$A-Za-z0-9]\+\>\)\)+
|
||||||
\ end=+/\_s*>+
|
\ end=+/\_s*>+
|
||||||
\ end=+<\_s*/\_s*\z1\_s*>+
|
\ end=+<\_s*/\_s*\z1\_s*>+
|
||||||
\ contains=jsxElement,jsxEscapeJs,jsxTag,jsxComment,jsxCloseString,jsxCloseTag,@Spell
|
\ contains=jsxElement,jsxTag,jsxExpressionBlock,jsxComment,jsxCloseTag,@Spell
|
||||||
\ keepend
|
\ keepend
|
||||||
\ extend
|
\ extend
|
||||||
\ contained
|
\ contained
|
||||||
\ fold
|
\ fold
|
||||||
|
|
||||||
" detect jsx region
|
|
||||||
syntax region jsxRegion
|
|
||||||
\ start=+\(\(\_[([,?:=+\-*/<>{}]\|&&\|||\|=>\|\<return\|\<default\|\<await\|\<yield\)\_s*\)\@<=<\_s*\(>\|\z(\(script\)\@!\<[_\$A-Za-z][-:_\.\$0-9A-Za-z]*\>\)\(\_s*\([-+*)\]}&|?,]\|/\([/*]\|\_s*>\)\@!\)\)\@!\)+
|
|
||||||
\ end=++
|
|
||||||
\ contains=jsxElement
|
|
||||||
|
|
||||||
" <tag key={this.props.key}>
|
|
||||||
" ~~~~~~~~~~~~~~~~
|
|
||||||
syntax region jsxEscapeJs
|
|
||||||
\ start=+{+
|
|
||||||
\ end=++
|
|
||||||
\ extend
|
|
||||||
\ contained
|
|
||||||
\ contains=jsBlock,javascriptBlock,javaScriptBlockBuildIn,typescriptBlock
|
|
||||||
|
|
||||||
" <tag key={this.props.key}>
|
" <tag key={this.props.key}>
|
||||||
" ~~~~
|
" ~~~~
|
||||||
" and fragment start tag
|
" and fragment start tag
|
||||||
@@ -66,19 +60,31 @@ exe 'syntax region jsxOpenTag
|
|||||||
\ contains=jsxTagName
|
\ contains=jsxTagName
|
||||||
\ nextgroup=jsxAttrib
|
\ nextgroup=jsxAttrib
|
||||||
\ skipwhite
|
\ skipwhite
|
||||||
\ skipempty ' .(s:highlight_close_tag ? 'transparent' : '')
|
\ skipempty
|
||||||
|
\ ' .(s:highlight_close_tag ? 'transparent' : '')
|
||||||
|
|
||||||
|
|
||||||
|
" <tag key={this.props.key}>
|
||||||
|
" ~~~~~~~~~~~~~~~~
|
||||||
|
syntax region jsxExpressionBlock
|
||||||
|
\ matchgroup=jsxBraces
|
||||||
|
\ start=+{+
|
||||||
|
\ end=+}+
|
||||||
|
\ contained
|
||||||
|
\ extend
|
||||||
|
\ contains=@jsExpression,jsSpreadExpression,@javascriptExpression,javascriptSpreadOp,@javaScriptEmbededExpr,@typescriptExpression,typescriptObjectSpread,jsComment,@javascriptComments,javaScriptLineComment,javaScriptComment,typescriptLineComment,typescriptComment
|
||||||
|
|
||||||
" <foo.bar>
|
" <foo.bar>
|
||||||
" ~
|
" ~
|
||||||
syntax match jsxDot +\.+ contained display
|
syntax match jsxDot +\.+ contained
|
||||||
|
|
||||||
" <foo:bar>
|
" <foo:bar>
|
||||||
" ~
|
" ~
|
||||||
syntax match jsxNamespace +:+ contained display
|
syntax match jsxNamespace +:+ contained
|
||||||
|
|
||||||
" <tag id="sample">
|
" <tag id="sample">
|
||||||
" ~
|
" ~
|
||||||
syntax match jsxEqual +=+ contained display nextgroup=jsxString,jsxEscapeJs,jsxRegion skipwhite
|
syntax match jsxEqual +=+ contained skipwhite skipempty nextgroup=jsxString,jsxExpressionBlock,jsxRegion
|
||||||
|
|
||||||
" <tag />
|
" <tag />
|
||||||
" ~~
|
" ~~
|
||||||
@@ -99,13 +105,12 @@ syntax region jsxCloseTag
|
|||||||
" <tag key={this.props.key}>
|
" <tag key={this.props.key}>
|
||||||
" ~~~
|
" ~~~
|
||||||
syntax match jsxAttrib
|
syntax match jsxAttrib
|
||||||
\ +\<[-A-Za-z_][-:_\$0-9A-Za-z]*\>+
|
\ +\<[_$A-Za-z][-:_$A-Za-z0-9]*\>+
|
||||||
\ contained
|
\ contained
|
||||||
\ nextgroup=jsxEqual
|
\ nextgroup=jsxEqual
|
||||||
\ skipwhite
|
\ skipwhite
|
||||||
\ skipempty
|
\ skipempty
|
||||||
\ contains=jsxAttribKeyword
|
\ contains=jsxAttribKeyword,jsxNamespace
|
||||||
\ display
|
|
||||||
|
|
||||||
" <MyComponent ...>
|
" <MyComponent ...>
|
||||||
" ~~~~~~~~~~~
|
" ~~~~~~~~~~~
|
||||||
@@ -113,67 +118,71 @@ syntax match jsxAttrib
|
|||||||
" <someCamel ...>
|
" <someCamel ...>
|
||||||
" ~~~~~
|
" ~~~~~
|
||||||
exe 'syntax match jsxComponentName
|
exe 'syntax match jsxComponentName
|
||||||
\ +\<[A-Z][\$0-9A-Za-z]\+\>+
|
\ +\<[_$]\?[A-Z][-_$A-Za-z0-9]*\>+
|
||||||
\ contained
|
\ contained
|
||||||
\ display ' .(s:highlight_close_tag ? 'transparent' : '')
|
\ ' .(s:highlight_close_tag ? 'transparent' : '')
|
||||||
|
|
||||||
" <tag key={this.props.key}>
|
" <tag key={this.props.key}>
|
||||||
" ~~~
|
" ~~~
|
||||||
exe 'syntax match jsxTagName
|
exe 'syntax match jsxTagName
|
||||||
\ +\<[-:_\.\$0-9A-Za-z]\+\>+
|
\ +\<[-:._$A-Za-z0-9]\+\>+
|
||||||
\ contained
|
\ contained
|
||||||
\ contains=jsxComponentName,jsxDot,jsxNamespace
|
\ contains=jsxComponentName,jsxDot,jsxNamespace
|
||||||
\ nextgroup=jsxAttrib
|
\ nextgroup=jsxAttrib
|
||||||
\ skipempty
|
\ skipempty
|
||||||
\ skipwhite
|
\ skipwhite
|
||||||
\ display ' .(s:highlight_close_tag ? 'transparent' : '')
|
\ ' .(s:highlight_close_tag ? 'transparent' : '')
|
||||||
|
|
||||||
" <tag id="sample">
|
" <tag id="sample">
|
||||||
" ~~~~~~~~
|
" ~~~~~~~~
|
||||||
" and
|
" and
|
||||||
" <tag id='sample'>
|
" <tag id='sample'>
|
||||||
" ~~~~~~~~
|
" ~~~~~~~~
|
||||||
syntax region jsxString start=+\z(["']\)+ skip=+\\\%(\z1\|$\)+ end=+\z1+ contained contains=@Spell display
|
syntax region jsxString start=+\z(["']\)+ skip=+\\\\\|\\\z1\|\\\n+ end=+\z1+ contained contains=@Spell
|
||||||
|
|
||||||
let s:tags = get(g:, 'vim_jsx_pretty_template_tags', ['html', 'raw'])
|
let s:tags = get(g:, 'vim_jsx_pretty_template_tags', ['html', 'jsx'])
|
||||||
let s:enable_tagged_jsx = !empty(s:tags)
|
let s:enable_tagged_jsx = !empty(s:tags)
|
||||||
|
|
||||||
" add support to JSX inside the tagged template string
|
" add support to JSX inside the tagged template string
|
||||||
" https://github.com/developit/htm
|
" https://github.com/developit/htm
|
||||||
if s:enable_tagged_jsx
|
if s:enable_tagged_jsx
|
||||||
exe 'syntax region jsxTaggedRegion
|
exe 'syntax match jsxRegion +\%(' . join(s:tags, '\|') . '\)\%(\_s*`\)\@=+ contains=jsTemplateStringTag,jsTaggedTemplate,javascriptTagRef skipwhite skipempty nextgroup=jsxTaggedRegion'
|
||||||
\ start=+\%('. join(s:tags, '\|') .'\)\@<=`+ms=s+1
|
|
||||||
\ end=+`+me=e-1
|
|
||||||
\ extend
|
|
||||||
\ contained
|
|
||||||
\ containedin=jsTemplateString,javascriptTemplate,javaScriptStringT,typescriptStringB
|
|
||||||
\ contains=jsxElement'
|
|
||||||
|
|
||||||
syntax region jsxEscapeJs
|
syntax region jsxTaggedRegion
|
||||||
\ start=+\${+
|
\ matchgroup=jsxBackticks
|
||||||
\ end=++
|
\ start=+`+
|
||||||
|
\ end=+`+
|
||||||
\ extend
|
\ extend
|
||||||
\ contained
|
\ contained
|
||||||
\ contains=jsTemplateExpression,javascriptTemplateSubstitution,javaScriptEmbed,typescriptInterpolation
|
\ contains=jsxElement,jsxExpressionBlock
|
||||||
|
\ transparent
|
||||||
|
|
||||||
|
syntax region jsxExpressionBlock
|
||||||
|
\ matchgroup=jsxBraces
|
||||||
|
\ start=+\${+
|
||||||
|
\ end=+}+
|
||||||
|
\ extend
|
||||||
|
\ contained
|
||||||
|
\ contains=@jsExpression,jsSpreadExpression,@javascriptExpression,javascriptSpreadOp,@javaScriptEmbededExpr,@typescriptExpression,typescriptObjectSpread
|
||||||
|
|
||||||
syntax region jsxOpenTag
|
syntax region jsxOpenTag
|
||||||
\ matchgroup=jsxOpenPunct
|
\ matchgroup=jsxOpenPunct
|
||||||
\ start=+<\%(\${\)\@=+
|
\ start=+<\%(\${\)\@=+
|
||||||
\ matchgroup=NONE
|
\ matchgroup=NONE
|
||||||
\ end=++
|
\ end=+}\@1<=+
|
||||||
\ contained
|
\ contained
|
||||||
\ contains=jsxEscapeJs
|
\ contains=jsxExpressionBlock
|
||||||
\ nextgroup=jsxAttrib,jsxSpreadOperator
|
|
||||||
\ skipwhite
|
\ skipwhite
|
||||||
\ skipempty
|
\ skipempty
|
||||||
|
\ nextgroup=jsxAttrib,jsxSpreadOperator
|
||||||
|
|
||||||
syntax keyword jsxAttribKeyword class contained display
|
syntax keyword jsxAttribKeyword class contained
|
||||||
|
|
||||||
syntax match jsxSpreadOperator +\.\.\.+ contained display nextgroup=jsxEscapeJs skipwhite
|
syntax match jsxSpreadOperator +\.\.\.+ contained nextgroup=jsxExpressionBlock skipwhite
|
||||||
|
|
||||||
syntax match jsxCloseTag +<//>+ display
|
syntax match jsxCloseTag +<//>+ contained
|
||||||
|
|
||||||
syntax match jsxComment +<!--\_.\{-}-->+ display
|
syntax match jsxComment +<!--\_.\{-}-->+
|
||||||
endif
|
endif
|
||||||
|
|
||||||
" Highlight the tag name
|
" Highlight the tag name
|
||||||
@@ -183,10 +192,14 @@ highlight def link jsxComponentName Function
|
|||||||
|
|
||||||
highlight def link jsxAttrib Type
|
highlight def link jsxAttrib Type
|
||||||
highlight def link jsxAttribKeyword jsxAttrib
|
highlight def link jsxAttribKeyword jsxAttrib
|
||||||
highlight def link jsxEqual Operator
|
|
||||||
highlight def link jsxString String
|
highlight def link jsxString String
|
||||||
|
highlight def link jsxComment Comment
|
||||||
|
|
||||||
highlight def link jsxDot Operator
|
highlight def link jsxDot Operator
|
||||||
highlight def link jsxNamespace Operator
|
highlight def link jsxNamespace Operator
|
||||||
|
highlight def link jsxEqual Operator
|
||||||
|
highlight def link jsxSpreadOperator Operator
|
||||||
|
highlight def link jsxBraces Special
|
||||||
|
|
||||||
if s:highlight_close_tag
|
if s:highlight_close_tag
|
||||||
highlight def link jsxCloseString Identifier
|
highlight def link jsxCloseString Identifier
|
||||||
@@ -201,9 +214,6 @@ highlight def link jsxPunct jsxCloseString
|
|||||||
highlight def link jsxClosePunct jsxPunct
|
highlight def link jsxClosePunct jsxPunct
|
||||||
highlight def link jsxCloseTag jsxCloseString
|
highlight def link jsxCloseTag jsxCloseString
|
||||||
|
|
||||||
highlight def link jsxComment Comment
|
|
||||||
highlight def link jsxSpreadOperator Operator
|
|
||||||
|
|
||||||
let s:vim_jsx_pretty_colorful_config = get(g:, 'vim_jsx_pretty_colorful_config', 0)
|
let s:vim_jsx_pretty_colorful_config = get(g:, 'vim_jsx_pretty_colorful_config', 0)
|
||||||
|
|
||||||
if s:vim_jsx_pretty_colorful_config == 1
|
if s:vim_jsx_pretty_colorful_config == 1
|
||||||
@@ -212,5 +222,4 @@ if s:vim_jsx_pretty_colorful_config == 1
|
|||||||
highlight def link jsFuncArgs Type
|
highlight def link jsFuncArgs Type
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
|
||||||
endif
|
endif
|
||||||
|
|||||||
@@ -2,17 +2,13 @@ if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'mathematica') =
|
|||||||
|
|
||||||
"Vim conceal file
|
"Vim conceal file
|
||||||
" Language: Mathematica
|
" Language: Mathematica
|
||||||
" Maintainer: Voldikss <dyzplus@gmail.com>
|
" Maintainer: R. Menon <rsmenon@icloud.com>
|
||||||
" Last Change: 2019 Jan 23 by Voldikss
|
" Last Change: Feb 25, 2013
|
||||||
" Source: https://github.com/voldikss/vim-mma/after/syntax/mma.vim
|
|
||||||
" Credits:
|
|
||||||
" Rsmenon: https://github.com/rsmenon
|
|
||||||
|
|
||||||
if (exists('g:mma_candy') && g:mma_candy == 0) || !has('conceal') || &enc != 'utf-8'
|
if (exists('g:mma_candy') && g:mma_candy == 0) || !has('conceal') || &enc != 'utf-8'
|
||||||
finish
|
finish
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
|
||||||
"These are fairly safe and straightforward conceals
|
"These are fairly safe and straightforward conceals
|
||||||
if exists('g:mma_candy') && g:mma_candy > 0
|
if exists('g:mma_candy') && g:mma_candy > 0
|
||||||
"Rules
|
"Rules
|
||||||
|
|||||||
37
after/syntax/reason/graphql.vim
Normal file
37
after/syntax/reason/graphql.vim
Normal file
@@ -0,0 +1,37 @@
|
|||||||
|
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'graphql') == -1
|
||||||
|
|
||||||
|
" Copyright (c) 2016-2020 Jon Parise <jon@indelible.org>
|
||||||
|
"
|
||||||
|
" Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
" of this software and associated documentation files (the "Software"), to
|
||||||
|
" deal in the Software without restriction, including without limitation the
|
||||||
|
" rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
|
||||||
|
" sell copies of the Software, and to permit persons to whom the Software is
|
||||||
|
" furnished to do so, subject to the following conditions:
|
||||||
|
"
|
||||||
|
" The above copyright notice and this permission notice shall be included in
|
||||||
|
" all copies or substantial portions of the Software.
|
||||||
|
"
|
||||||
|
" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
" IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
" FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
" AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
" LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||||
|
" FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
|
||||||
|
" IN THE SOFTWARE.
|
||||||
|
"
|
||||||
|
" Language: GraphQL
|
||||||
|
" Maintainer: Jon Parise <jon@indelible.org>
|
||||||
|
|
||||||
|
if exists('b:current_syntax')
|
||||||
|
let s:current_syntax = b:current_syntax
|
||||||
|
unlet b:current_syntax
|
||||||
|
endif
|
||||||
|
syn include @GraphQLSyntax syntax/graphql.vim
|
||||||
|
if exists('s:current_syntax')
|
||||||
|
let b:current_syntax = s:current_syntax
|
||||||
|
endif
|
||||||
|
|
||||||
|
syntax region graphqlMultilineString matchgroup=reasonMultilineString start=+graphql\_s*\zs{|+ end=+|}+ contains=@GraphQLSyntax,reasonEscape,reasonEscapeUnicode,reasonEscapeError,reasonStringContinuation keepend
|
||||||
|
|
||||||
|
endif
|
||||||
@@ -9,26 +9,183 @@ if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'rspec') == -1
|
|||||||
runtime! syntax/ruby.vim
|
runtime! syntax/ruby.vim
|
||||||
unlet! b:current_syntax
|
unlet! b:current_syntax
|
||||||
|
|
||||||
syntax keyword rspecGroupMethods context describe example it its let it_should_behave_like shared_examples_for subject it_behaves_like pending specify When Then Given Invariant feature scenario given
|
setlocal commentstring=#\ %s
|
||||||
highlight link rspecGroupMethods Type
|
|
||||||
|
|
||||||
syntax keyword rspecBeforeAndAfter after after_suite_parts append_after append_before before before_suite_parts prepend_after prepend_before around
|
syntax keyword rspecGroupMethods
|
||||||
highlight link rspecBeforeAndAfter Statement
|
\ aggregate_failures
|
||||||
|
\ context
|
||||||
|
\ describe
|
||||||
|
\ example
|
||||||
|
\ feature
|
||||||
|
\ fcontext
|
||||||
|
\ fdescribe
|
||||||
|
\ fexample
|
||||||
|
\ fit
|
||||||
|
\ focus
|
||||||
|
\ fspecify
|
||||||
|
\ Given
|
||||||
|
\ given\!
|
||||||
|
\ include_context
|
||||||
|
\ include_examples
|
||||||
|
\ Invariant
|
||||||
|
\ it
|
||||||
|
\ it_behaves_like
|
||||||
|
\ it_should_behave_like
|
||||||
|
\ its
|
||||||
|
\ let
|
||||||
|
\ let\!
|
||||||
|
\ pending
|
||||||
|
\ scenario
|
||||||
|
\ shared_examples
|
||||||
|
\ shared_examples_for
|
||||||
|
\ skip
|
||||||
|
\ specify
|
||||||
|
\ subject
|
||||||
|
\ Then
|
||||||
|
\ When
|
||||||
|
|
||||||
syntax keyword rspecMocks double mock stub stub_chain
|
syntax keyword rspecBeforeAndAfter
|
||||||
highlight link rspecMocks Constant
|
\ after
|
||||||
|
\ after_suite_parts
|
||||||
|
\ append_after
|
||||||
|
\ append_before
|
||||||
|
\ around
|
||||||
|
\ before
|
||||||
|
\ before_suite_parts
|
||||||
|
\ prepend_after
|
||||||
|
\ prepend_before
|
||||||
|
|
||||||
syntax keyword rspecMockMethods and_raise and_return and_throw and_yield build_child called_max_times expected_args invoke matches
|
syntax keyword rspecMocks
|
||||||
highlight link rspecMockMethods Function
|
\ double
|
||||||
|
\ instance_double
|
||||||
|
\ instance_spy
|
||||||
|
\ mock
|
||||||
|
\ spy
|
||||||
|
\ stub
|
||||||
|
\ stub_chain
|
||||||
|
\ stub_const
|
||||||
|
|
||||||
syntax keyword rspecKeywords should should_not should_not_receive should_receive
|
syntax keyword rspecMockMethods
|
||||||
highlight link rspecKeywords Constant
|
\ and_call_original
|
||||||
|
\ and_raise
|
||||||
|
\ and_return
|
||||||
|
\ and_throw
|
||||||
|
\ and_yield
|
||||||
|
\ build_child
|
||||||
|
\ called_max_times
|
||||||
|
\ expected_args
|
||||||
|
\ invoke
|
||||||
|
\ matches
|
||||||
|
|
||||||
|
syntax keyword rspecKeywords
|
||||||
|
\ should
|
||||||
|
\ should_not
|
||||||
|
\ should_not_receive
|
||||||
|
\ should_receive
|
||||||
|
|
||||||
|
syntax keyword rspecMatchers
|
||||||
|
\ all
|
||||||
|
\ allow
|
||||||
|
\ allow_any_instance_of
|
||||||
|
\ assigns
|
||||||
|
\ be
|
||||||
|
\ change
|
||||||
|
\ described_class
|
||||||
|
\ eq
|
||||||
|
\ eql
|
||||||
|
\ equal
|
||||||
|
\ errors_on
|
||||||
|
\ exist
|
||||||
|
\ expect
|
||||||
|
\ expect_any_instance_of
|
||||||
|
\ have
|
||||||
|
\ have_at_least
|
||||||
|
\ have_at_most
|
||||||
|
\ have_exactly
|
||||||
|
\ include
|
||||||
|
\ is_expected
|
||||||
|
\ match
|
||||||
|
\ match_array
|
||||||
|
\ matcher
|
||||||
|
\ not_to
|
||||||
|
\ raise_error
|
||||||
|
\ raise_exception
|
||||||
|
\ receive
|
||||||
|
\ receive_messages
|
||||||
|
\ receive_message_chain
|
||||||
|
\ respond_to
|
||||||
|
\ satisfy
|
||||||
|
\ throw_symbol
|
||||||
|
\ to
|
||||||
|
\ to_not
|
||||||
|
\ when
|
||||||
|
\ wrap_expectation
|
||||||
|
|
||||||
|
" rspec-mongoid exclusive matchers
|
||||||
|
syntax keyword rspecMatchers
|
||||||
|
\ accept_nested_attributes_for
|
||||||
|
\ belong_to
|
||||||
|
\ custom_validate
|
||||||
|
\ embed_many
|
||||||
|
\ embed_one
|
||||||
|
\ validate_associated
|
||||||
|
\ validate_exclusion_of
|
||||||
|
\ validate_format_of
|
||||||
|
\ validate_inclusion_of
|
||||||
|
\ validate_length_of
|
||||||
|
|
||||||
|
" shoulda matchers
|
||||||
|
syntax keyword rspecMatchers
|
||||||
|
\ allow_mass_assignment_of
|
||||||
|
\ allow_value
|
||||||
|
\ ensure_exclusion_of
|
||||||
|
\ ensure_length_of
|
||||||
|
\ have_secure_password
|
||||||
|
\ validate_absence_of
|
||||||
|
\ validate_acceptance_of
|
||||||
|
\ validate_confirmation_of
|
||||||
|
\ validate_numericality_of
|
||||||
|
\ validate_presence_of
|
||||||
|
\ validate_uniqueness_of
|
||||||
|
|
||||||
|
syntax keyword rspecMessageExpectation
|
||||||
|
\ advise
|
||||||
|
\ any_args
|
||||||
|
\ any_number_of_times
|
||||||
|
\ anything
|
||||||
|
\ at_least
|
||||||
|
\ at_most
|
||||||
|
\ exactly
|
||||||
|
\ expected_messages_received
|
||||||
|
\ generate_error
|
||||||
|
\ hash_including
|
||||||
|
\ hash_not_including
|
||||||
|
\ ignoring_args
|
||||||
|
\ instance_of
|
||||||
|
\ matches_at_least_count
|
||||||
|
\ matches_at_most_count
|
||||||
|
\ matches_exact_count
|
||||||
|
\ matches_name_but_not_args
|
||||||
|
\ negative_expectation_for
|
||||||
|
\ never
|
||||||
|
\ no_args
|
||||||
|
\ once
|
||||||
|
\ ordered
|
||||||
|
\ similar_messages
|
||||||
|
\ times
|
||||||
|
\ twice
|
||||||
|
\ verify_messages_received
|
||||||
|
\ with
|
||||||
|
|
||||||
syntax keyword rspecMatchers be change eql equal exist expect have have_at_least have_at_most have_exactly include match matcher raise_error raise_exception respond_to satisfy throw_symbol to to_not not_to when wrap_expectation
|
|
||||||
syntax match rspecMatchers /\<\(be\|have\)_\w\+\>/
|
syntax match rspecMatchers /\<\(be\|have\)_\w\+\>/
|
||||||
highlight link rspecMatchers Function
|
syntax match rspecGroupMethods /\.describe/
|
||||||
|
|
||||||
syntax keyword rspecMessageExpectation advise any_args any_number_of_times anything at_least at_most exactly expected_messages_received generate_error hash_including hash_not_including ignoring_args instance_of matches_at_least_count matches_at_most_count matches_exact_count matches_name_but_not_args negative_expectation_for never no_args once ordered similar_messages times twice verify_messages_received with
|
highlight link rspecGroupMethods Statement
|
||||||
|
highlight link rspecBeforeAndAfter Identifier
|
||||||
|
highlight link rspecMocks Constant
|
||||||
|
highlight link rspecMockMethods Function
|
||||||
|
highlight link rspecKeywords Constant
|
||||||
|
highlight link rspecMatchers Function
|
||||||
highlight link rspecMessageExpectation Function
|
highlight link rspecMessageExpectation Function
|
||||||
|
|
||||||
let b:current_syntax = 'rspec'
|
let b:current_syntax = 'rspec'
|
||||||
|
|||||||
@@ -1,13 +0,0 @@
|
|||||||
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'latex') == -1
|
|
||||||
|
|
||||||
" adds support for cleverref package
|
|
||||||
" \Cref, \cref, \cpageref, \labelcref, \labelcpageref
|
|
||||||
syn region texRefZone matchgroup=texStatement start="\\Cref{" end="}\|%stopzone\>" contains=@texRefGroup
|
|
||||||
syn region texRefZone matchgroup=texStatement start="\\\(label\|\)c\(page\|\)ref{" end="}\|%stopzone\>" contains=@texRefGroup
|
|
||||||
|
|
||||||
" adds support for listings package
|
|
||||||
syn region texZone start="\\begin{lstlisting}" end="\\end{lstlisting}\|%stopzone\>"
|
|
||||||
syn match texInputFile "\\lstinputlisting\s*\(\[.*\]\)\={.\{-}}" contains=texStatement,texInputCurlies,texInputFileOpt
|
|
||||||
syn match texZone "\\lstinline\s*\(\[.*\]\)\={.\{-}}"
|
|
||||||
|
|
||||||
endif
|
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
if !exists('g:polyglot_disabled') || !(index(g:polyglot_disabled, 'typescript') != -1 || index(g:polyglot_disabled, 'typescript') != -1 || index(g:polyglot_disabled, 'jsx') != -1)
|
if !exists('g:polyglot_disabled') || (index(g:polyglot_disabled, 'javascript') == -1 && index(g:polyglot_disabled, 'jsx') == -1)
|
||||||
|
|
||||||
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
|
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
|
||||||
" Vim syntax file
|
" Vim syntax file
|
||||||
@@ -9,6 +9,10 @@ if !exists('g:polyglot_disabled') || !(index(g:polyglot_disabled, 'typescript')
|
|||||||
"
|
"
|
||||||
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
|
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
|
||||||
|
|
||||||
|
if get(g:, 'vim_jsx_pretty_disable_tsx', 0)
|
||||||
|
finish
|
||||||
|
endif
|
||||||
|
|
||||||
let s:jsx_cpo = &cpo
|
let s:jsx_cpo = &cpo
|
||||||
set cpo&vim
|
set cpo&vim
|
||||||
|
|
||||||
@@ -26,6 +30,12 @@ endif
|
|||||||
" refine the typescript line comment
|
" refine the typescript line comment
|
||||||
syntax region typescriptLineComment start=+//+ end=/$/ contains=@Spell,typescriptCommentTodo,typescriptRef extend keepend
|
syntax region typescriptLineComment start=+//+ end=/$/ contains=@Spell,typescriptCommentTodo,typescriptRef extend keepend
|
||||||
|
|
||||||
|
for syntax_name in ['tsxRegion', 'tsxFragment']
|
||||||
|
if hlexists(syntax_name)
|
||||||
|
exe 'syntax clear ' . syntax_name
|
||||||
|
endif
|
||||||
|
endfor
|
||||||
|
|
||||||
if !hlexists('typescriptTypeCast')
|
if !hlexists('typescriptTypeCast')
|
||||||
" add a typescriptBlock group for typescript
|
" add a typescriptBlock group for typescript
|
||||||
syntax region typescriptBlock
|
syntax region typescriptBlock
|
||||||
@@ -36,11 +46,14 @@ if !hlexists('typescriptTypeCast')
|
|||||||
\ extend
|
\ extend
|
||||||
\ contains=@typescriptExpression,typescriptBlock
|
\ contains=@typescriptExpression,typescriptBlock
|
||||||
\ fold
|
\ fold
|
||||||
|
hi def link typescriptTypeBrackets typescriptOpSymbols
|
||||||
endif
|
endif
|
||||||
|
|
||||||
syntax cluster typescriptExpression add=jsxRegion,typescriptParens
|
|
||||||
|
|
||||||
runtime syntax/jsx_pretty.vim
|
runtime syntax/jsx_pretty.vim
|
||||||
|
syntax cluster typescriptExpression add=jsxRegion,typescriptParens
|
||||||
|
" Fix type casting ambiguity with JSX syntax
|
||||||
|
syntax match typescriptTypeBrackets +[<>]+ contained
|
||||||
|
syntax match typescriptTypeCast +<\([_$A-Za-z0-9]\+\)>\%(\s*\%([_$A-Za-z0-9]\+\s*;\?\|(\)\%(\_[^<]*</\1>\)\@!\)\@=+ contains=typescriptTypeBrackets,@typescriptType,typescriptType nextgroup=@typescriptExpression
|
||||||
|
|
||||||
let b:current_syntax = 'typescript.tsx'
|
let b:current_syntax = 'typescript.tsx'
|
||||||
|
|
||||||
@@ -1,5 +1,28 @@
|
|||||||
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'graphql') == -1
|
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'graphql') == -1
|
||||||
|
|
||||||
|
" Copyright (c) 2016-2020 Jon Parise <jon@indelible.org>
|
||||||
|
"
|
||||||
|
" Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
" of this software and associated documentation files (the "Software"), to
|
||||||
|
" deal in the Software without restriction, including without limitation the
|
||||||
|
" rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
|
||||||
|
" sell copies of the Software, and to permit persons to whom the Software is
|
||||||
|
" furnished to do so, subject to the following conditions:
|
||||||
|
"
|
||||||
|
" The above copyright notice and this permission notice shall be included in
|
||||||
|
" all copies or substantial portions of the Software.
|
||||||
|
"
|
||||||
|
" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
" IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
" FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
" AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
" LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||||
|
" FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
|
||||||
|
" IN THE SOFTWARE.
|
||||||
|
"
|
||||||
|
" Language: GraphQL
|
||||||
|
" Maintainer: Jon Parise <jon@indelible.org>
|
||||||
|
|
||||||
if exists('b:current_syntax')
|
if exists('b:current_syntax')
|
||||||
let s:current_syntax = b:current_syntax
|
let s:current_syntax = b:current_syntax
|
||||||
unlet b:current_syntax
|
unlet b:current_syntax
|
||||||
|
|||||||
5
after/syntax/typescriptreact.vim
Normal file
5
after/syntax/typescriptreact.vim
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
if !exists('g:polyglot_disabled') || (index(g:polyglot_disabled, 'javascript') == -1 && index(g:polyglot_disabled, 'jsx') == -1)
|
||||||
|
|
||||||
|
source <sfile>:h/tsx.vim
|
||||||
|
|
||||||
|
endif
|
||||||
5
after/syntax/typescriptreact/graphql.vim
Normal file
5
after/syntax/typescriptreact/graphql.vim
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'graphql') == -1
|
||||||
|
|
||||||
|
runtime! after/syntax/typescript/graphql.vim
|
||||||
|
|
||||||
|
endif
|
||||||
5
after/syntax/vue/graphql.vim
Normal file
5
after/syntax/vue/graphql.vim
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'graphql') == -1
|
||||||
|
|
||||||
|
runtime! after/syntax/javascript/graphql.vim
|
||||||
|
|
||||||
|
endif
|
||||||
@@ -42,8 +42,8 @@ syn keyword yamlConstant NULL Null null NONE None none NIL Nil nil
|
|||||||
syn keyword yamlConstant TRUE True true YES Yes yes ON On on
|
syn keyword yamlConstant TRUE True true YES Yes yes ON On on
|
||||||
syn keyword yamlConstant FALSE False false NO No no OFF Off off
|
syn keyword yamlConstant FALSE False false NO No no OFF Off off
|
||||||
|
|
||||||
syn match yamlKey "^\s*\zs[^ \t\"]\+\ze\s*:"
|
syn match yamlKey "^\s*\zs[^ \t\"\'#]\+\ze\s*:"
|
||||||
syn match yamlKey "^\s*-\s*\zs[^ \t\"\']\+\ze\s*:"
|
syn match yamlKey "^\s*-\s*\zs[^ \t\"\'#]\+\ze\s*:"
|
||||||
syn match yamlAnchor "&\S\+"
|
syn match yamlAnchor "&\S\+"
|
||||||
syn match yamlAlias "*\S\+"
|
syn match yamlAlias "*\S\+"
|
||||||
|
|
||||||
|
|||||||
126
after/syntax/zsh.vim
Normal file
126
after/syntax/zsh.vim
Normal file
@@ -0,0 +1,126 @@
|
|||||||
|
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'zinit') == -1
|
||||||
|
|
||||||
|
" Copyright (c) 2019 Sebastian Gniazdowski
|
||||||
|
"
|
||||||
|
" Syntax highlighting for Zinit commands in any file of type `zsh'.
|
||||||
|
" It adds definitions for the Zinit syntax to the ones from the
|
||||||
|
" existing zsh.vim definitions-file.
|
||||||
|
|
||||||
|
" Main Zinit command.
|
||||||
|
" Should be the only TOP rule for the whole syntax.
|
||||||
|
syntax match ZinitCommand /\<zinit\>\s/me=e-1
|
||||||
|
\ skipwhite
|
||||||
|
\ nextgroup=ZinitSubCommands,ZinitPluginSubCommands,ZinitSnippetSubCommands
|
||||||
|
\ contains=ZinitSubCommands,ZinitPluginSubCommands,ZinitSnippetSubCommands
|
||||||
|
|
||||||
|
" TODO: add options for e.g. light
|
||||||
|
syntax match ZinitSubCommands /\s\<\%(ice\|compinit\|env-whitelist\|cdreplay\|cdclear\|update\)\>\s/ms=s+1,me=e-1
|
||||||
|
\ contained
|
||||||
|
|
||||||
|
syntax match ZinitPluginSubCommands /\s\<\%(light\|load\)\>\s/ms=s+1,me=e-1
|
||||||
|
\ skipwhite nextgroup=ZinitPlugin1,ZinitPlugin2,ZinitPlugin3
|
||||||
|
\ contains=ZinitPlugin1,ZinitPlugin2,ZinitPlugin3
|
||||||
|
|
||||||
|
syntax match ZinitSnippetSubCommands /\s\<\%(snippet\)\>\s/ms=s+1,me=e-1
|
||||||
|
\ skipwhite
|
||||||
|
\ nextgroup=ZinitSnippetShorthands1,ZinitSnippetShorthands2
|
||||||
|
\ contains=ZinitSnippetShorthands1,ZinitSnippetShorthands2
|
||||||
|
|
||||||
|
" "user/plugin"
|
||||||
|
syntax match ZinitPlugin1 /\s["]\%([!-_]*\%(\/[!-_]\+\)\+\|[!-_]\+\)["]/ms=s+1,hs=s+2,he=e-1
|
||||||
|
\ contained
|
||||||
|
\ nextgroup=ZinitTrailingWhiteSpace
|
||||||
|
\ contains=ZinitTrailingWhiteSpace
|
||||||
|
|
||||||
|
" 'user/plugin'
|
||||||
|
syntax match ZinitPlugin2 /\s[']\%([!-_]*\%(\/[!-_]\+\)\+\|[!-_]\+\)[']/ms=s+1,hs=s+2,he=e-1
|
||||||
|
\ contained
|
||||||
|
\ nextgroup=ZinitTrailingWhiteSpace
|
||||||
|
\ contains=ZinitTrailingWhiteSpace
|
||||||
|
|
||||||
|
" user/plugin
|
||||||
|
syntax match ZinitPlugin3 /\s\%([!-_]*\%(\/[!-_]\+\)\+\|[!-_]\+\)/ms=s+1,me=e+2
|
||||||
|
\ contained
|
||||||
|
\ nextgroup=ZinitTrailingWhiteSpace
|
||||||
|
\ contains=ZinitTrailingWhiteSpace
|
||||||
|
|
||||||
|
" OMZ:: or PZT::
|
||||||
|
" TODO: 'OMZ:: or 'PZT::
|
||||||
|
syntax match ZinitSnippetShorthands1 /\s\<\%(\%(OMZ\|PZT\)\>::\|\)/hs=s+1,he=e-2
|
||||||
|
\ contained
|
||||||
|
\ skipwhite
|
||||||
|
\ nextgroup=ZinitSnippetUrl1,ZinitSnippetUrl2
|
||||||
|
\ contains=ZinitSnippetUrl1,ZinitSnippetUrl2
|
||||||
|
|
||||||
|
" "OMZ:: or "PZT::
|
||||||
|
syntax match ZinitSnippetShorthands2 /\s["]\%(\%(OMZ\|PZT\)\>::\|\)/hs=s+2,he=e-2
|
||||||
|
\ contained
|
||||||
|
\ skipwhite
|
||||||
|
\ nextgroup=ZinitSnippetUrl3,ZinitSnippetUrl4
|
||||||
|
\ contains=ZinitSnippetUrl3,ZinitSnippetUrl4
|
||||||
|
|
||||||
|
syntax match ZinitSnippetUrl3 /\<\%(http:\/\/\|https:\/\/\|ftp:\/\/\|\$HOME\|\/\)[!-_]\+\%(\/[!-_]\+\)*\/\?["]/he=e-1
|
||||||
|
\ contained
|
||||||
|
\ nextgroup=ZinitTrailingWhiteSpace
|
||||||
|
\ contains=ZinitTrailingWhiteSpace
|
||||||
|
|
||||||
|
" TODO: Fix ZinitTrailingWhiteSpace not matching
|
||||||
|
syntax match ZinitSnippetUrl4 /\%(\%(OMZ\|PZT\)::\)[!-_]\+\%(\/[!-_]\+\)*\/\?["]/hs=s+5,he=e-1
|
||||||
|
\ contained
|
||||||
|
\ nextgroup=ZinitTrailingWhiteSpace
|
||||||
|
\ contains=ZinitTrailingWhiteSpace
|
||||||
|
|
||||||
|
" http://… or https://… or ftp://… or $HOME/… or /…
|
||||||
|
" TODO: Fix $HOME/… and /… not matching
|
||||||
|
syntax match ZinitSnippetUrl1 /\<\%(http:\/\/\|https:\/\/\|ftp:\/\/\|\$HOME\|\/\)[!-_]\+\%(\/[!-_]\+\)*\/\?/
|
||||||
|
\ contained
|
||||||
|
\ nextgroup=ZinitTrailingWhiteSpace
|
||||||
|
\ contains=ZinitTrailingWhiteSpace
|
||||||
|
|
||||||
|
" TODO: Fix ZinitTrailingWhiteSpace not matching
|
||||||
|
syntax match ZinitSnippetUrl2 /\<\%(\%(OMZ\|PZT\)::\)[!-_]\+\%(\/[!-_]\+\)*\/\?/hs=s+5
|
||||||
|
\ contained
|
||||||
|
\ nextgroup=ZinitTrailingWhiteSpace
|
||||||
|
\ contains=ZinitTrailingWhiteSpace
|
||||||
|
|
||||||
|
syntax match ZinitTrailingWhiteSpace /[[:space:]]\+$/ contained
|
||||||
|
|
||||||
|
" TODO: differentiate the no-value ices
|
||||||
|
" TODO: use contained
|
||||||
|
syntax match ZinitIceSubCommand /\sice\s/ms=s+1,me=e-1 nextgroup=ZinitIceModifiers
|
||||||
|
syntax match ZinitIceModifiers /\s\<\%(svn\|proto\|from\|teleid\|bindmap\|cloneopts\|id-as\|depth\|if\|wait\|load\)\>/ms=s+1
|
||||||
|
syntax match ZinitIceModifiers /\s\<\%(unload\|blockf\|on-update-of\|subscribe\|pick\|bpick\|src\|as\|ver\|silent\)\>/ms=s+1
|
||||||
|
syntax match ZinitIceModifiers /\s\<\%(lucid\|notify\|mv\|cp\|atinit\|atclone\|atload\|atpull\|nocd\|run-atpull\|has\)\>/ms=s+1
|
||||||
|
syntax match ZinitIceModifiers /\s\<\%(cloneonly\|make\|service\|trackbinds\|multisrc\|compile\|nocompile\)\>/ms=s+1
|
||||||
|
syntax match ZinitIceModifiers /\s\<\%(nocompletions\|reset-prompt\|wrap-track\|reset\|aliases\|sh\|bash\|ksh\|csh\)\>/ms=s+1
|
||||||
|
syntax match ZinitIceModifiers /\s\<\%(\\!sh\|!sh\|\\!bash\|!bash\|\\!ksh\|!ksh\|\\!csh\|!csh\)\>/ms=s+1
|
||||||
|
syntax match ZinitIceModifiers /\s\<\%(blockf\|silent\|lucid\|trackbinds\|cloneonly\|nocd\|run-atpull\)\>/ms=s+1
|
||||||
|
syntax match ZinitIceModifiers /\s\<\%(\|sh\|\!sh\|bash\|\!bash\|ksh\|\!ksh\|csh\|\!csh\)\>/ms=s+1
|
||||||
|
syntax match ZinitIceModifiers /\s\<\%(nocompletions\|svn\|aliases\|trigger-load\)\>/ms=s+1
|
||||||
|
syntax match ZinitIceModifiers /\s\<\%(light-mode\|is-snippet\|countdown\|ps-on-unload\|ps-on-update\)\>/ms=s+1
|
||||||
|
|
||||||
|
" Include also ices added by the existing annexes
|
||||||
|
syntax match ZinitIceModifiers /\s\<\%(test\|zman\|submod\|dl\|patch\|fbin\|sbin\|fsrc\|ferc\|fmod\|gem\|node\|rustup\|cargo\)\>/ms=s+1
|
||||||
|
|
||||||
|
" Additional Zsh and Zinit functions
|
||||||
|
syntax match ZshAndZinitFunctions /\<\%(compdef\|compinit\|zpcdreplay\|zpcdclear\|zpcompinit\|zpcompdef\)\>/
|
||||||
|
|
||||||
|
" Link
|
||||||
|
highlight def link ZshAndZinitFunctions Keyword
|
||||||
|
highlight def link ZinitCommand Statement
|
||||||
|
highlight def link ZinitSubCommands Title
|
||||||
|
highlight def link ZinitPluginSubCommands Title
|
||||||
|
highlight def link ZinitSnippetSubCommands Title
|
||||||
|
highlight def link ZinitIceModifiers Type
|
||||||
|
highlight def link ZinitSnippetShorthands1 Keyword
|
||||||
|
highlight def link ZinitSnippetShorthands2 Keyword
|
||||||
|
highlight def link ZinitPlugin1 Macro
|
||||||
|
highlight def link ZinitPlugin2 Macro
|
||||||
|
highlight def link ZinitPlugin3 Macro
|
||||||
|
highlight def link ZinitSnippetUrl1 Macro
|
||||||
|
highlight def link ZinitSnippetUrl2 Macro
|
||||||
|
highlight def link ZinitSnippetUrl3 Macro
|
||||||
|
highlight def link ZinitSnippetUrl4 Macro
|
||||||
|
highlight def link ZinitTrailingWhiteSpace Error
|
||||||
|
|
||||||
|
endif
|
||||||
@@ -13,6 +13,9 @@ function! s:L2U_Setup()
|
|||||||
if !has_key(b:, "l2u_enabled")
|
if !has_key(b:, "l2u_enabled")
|
||||||
let b:l2u_enabled = 0
|
let b:l2u_enabled = 0
|
||||||
endif
|
endif
|
||||||
|
if !has_key(b:, "l2u_autodetect_enable")
|
||||||
|
let b:l2u_autodetect_enable = 1
|
||||||
|
endif
|
||||||
|
|
||||||
" Did we install the L2U tab mappings?
|
" Did we install the L2U tab mappings?
|
||||||
if !has_key(b:, "l2u_tab_set")
|
if !has_key(b:, "l2u_tab_set")
|
||||||
@@ -92,34 +95,39 @@ endfunction
|
|||||||
" Each time the filetype changes, we may need to enable or
|
" Each time the filetype changes, we may need to enable or
|
||||||
" disable the LaTeX-to-Unicode functionality
|
" disable the LaTeX-to-Unicode functionality
|
||||||
function! LaTeXtoUnicode#Refresh()
|
function! LaTeXtoUnicode#Refresh()
|
||||||
|
|
||||||
call s:L2U_Setup()
|
call s:L2U_Setup()
|
||||||
|
|
||||||
|
" skip if manually overridden
|
||||||
|
if !b:l2u_autodetect_enable
|
||||||
|
return ''
|
||||||
|
endif
|
||||||
|
|
||||||
" by default, LaTeX-to-Unicode is only active on julia files
|
" by default, LaTeX-to-Unicode is only active on julia files
|
||||||
let file_types = s:L2U_file_type_regex(get(g:, "latex_to_unicode_file_types", "julia"))
|
let file_types = s:L2U_file_type_regex(get(g:, "latex_to_unicode_file_types", "julia"))
|
||||||
let file_types_blacklist = s:L2U_file_type_regex(get(g:, "latex_to_unicode_file_types_blacklist", "$^"))
|
let file_types_blacklist = s:L2U_file_type_regex(get(g:, "latex_to_unicode_file_types_blacklist", "$^"))
|
||||||
|
|
||||||
if match(&filetype, file_types) < 0 || match(&filetype, file_types_blacklist) >= 0
|
if match(&filetype, file_types) < 0 || match(&filetype, file_types_blacklist) >= 0
|
||||||
if b:l2u_enabled
|
if b:l2u_enabled
|
||||||
call LaTeXtoUnicode#Disable()
|
call LaTeXtoUnicode#Disable(1)
|
||||||
else
|
else
|
||||||
return
|
return ''
|
||||||
endif
|
endif
|
||||||
elseif !b:l2u_enabled
|
elseif !b:l2u_enabled
|
||||||
call LaTeXtoUnicode#Enable()
|
call LaTeXtoUnicode#Enable(1)
|
||||||
endif
|
endif
|
||||||
|
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
function! LaTeXtoUnicode#Enable()
|
function! LaTeXtoUnicode#Enable(...)
|
||||||
|
let auto_set = a:0 > 0 ? a:1 : 0
|
||||||
|
|
||||||
if b:l2u_enabled
|
if b:l2u_enabled
|
||||||
return
|
return ''
|
||||||
end
|
end
|
||||||
|
|
||||||
call s:L2U_ResetLastCompletionInfo()
|
call s:L2U_ResetLastCompletionInfo()
|
||||||
|
|
||||||
let b:l2u_enabled = 1
|
let b:l2u_enabled = 1
|
||||||
|
let b:l2u_autodetect_enable = auto_set
|
||||||
|
|
||||||
" If we're editing the first file upon opening vim, this will only init the
|
" If we're editing the first file upon opening vim, this will only init the
|
||||||
" command line mode mapping, and the full initialization will be performed by
|
" command line mode mapping, and the full initialization will be performed by
|
||||||
@@ -127,18 +135,18 @@ function! LaTeXtoUnicode#Enable()
|
|||||||
" Otherwise, if we're opening a file from within a running vim session, this
|
" Otherwise, if we're opening a file from within a running vim session, this
|
||||||
" will actually initialize all the LaTeX-to-Unicode substitutions.
|
" will actually initialize all the LaTeX-to-Unicode substitutions.
|
||||||
call LaTeXtoUnicode#Init()
|
call LaTeXtoUnicode#Init()
|
||||||
|
return ''
|
||||||
return
|
|
||||||
|
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
function! LaTeXtoUnicode#Disable()
|
function! LaTeXtoUnicode#Disable(...)
|
||||||
|
let auto_set = a:0 > 0 ? a:1 : 0
|
||||||
if !b:l2u_enabled
|
if !b:l2u_enabled
|
||||||
return
|
return ''
|
||||||
endif
|
endif
|
||||||
let b:l2u_enabled = 0
|
let b:l2u_enabled = 0
|
||||||
|
let b:l2u_autodetect_enable = auto_set
|
||||||
call LaTeXtoUnicode#Init()
|
call LaTeXtoUnicode#Init()
|
||||||
return
|
return ''
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
" Translate old options to their new equivalents
|
" Translate old options to their new equivalents
|
||||||
@@ -246,7 +254,6 @@ function! LaTeXtoUnicode#omnifunc(findstart, base)
|
|||||||
endif
|
endif
|
||||||
let b:l2u_in_fallback = 0
|
let b:l2u_in_fallback = 0
|
||||||
" set info for the callback
|
" set info for the callback
|
||||||
let b:l2u_tab_completing = 1
|
|
||||||
let b:l2u_found_completion = 1
|
let b:l2u_found_completion = 1
|
||||||
" analyse current line
|
" analyse current line
|
||||||
let col1 = col('.')
|
let col1 = col('.')
|
||||||
@@ -375,6 +382,7 @@ function! LaTeXtoUnicode#Tab()
|
|||||||
endif
|
endif
|
||||||
" reset the in_fallback info
|
" reset the in_fallback info
|
||||||
let b:l2u_in_fallback = 0
|
let b:l2u_in_fallback = 0
|
||||||
|
let b:l2u_tab_completing = 1
|
||||||
" temporary change to completeopt to use the `longest` setting, which is
|
" temporary change to completeopt to use the `longest` setting, which is
|
||||||
" probably the only one which makes sense given that the goal of the
|
" probably the only one which makes sense given that the goal of the
|
||||||
" completion is to substitute the final string
|
" completion is to substitute the final string
|
||||||
@@ -383,7 +391,8 @@ function! LaTeXtoUnicode#Tab()
|
|||||||
set completeopt-=noinsert
|
set completeopt-=noinsert
|
||||||
" invoke omnicompletion; failure to perform LaTeX-to-Unicode completion is
|
" invoke omnicompletion; failure to perform LaTeX-to-Unicode completion is
|
||||||
" handled by the CompleteDone autocommand.
|
" handled by the CompleteDone autocommand.
|
||||||
return "\<C-X>\<C-O>"
|
call feedkeys("\<C-X>\<C-O>", 'n')
|
||||||
|
return ""
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
" This function is called at every CompleteDone event, and is meant to handle
|
" This function is called at every CompleteDone event, and is meant to handle
|
||||||
@@ -409,7 +418,7 @@ function! LaTeXtoUnicode#FallbackCallback()
|
|||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
" This is the function that performs the substitution in command-line mode
|
" This is the function that performs the substitution in command-line mode
|
||||||
function! LaTeXtoUnicode#CmdTab(triggeredbytab)
|
function! LaTeXtoUnicode#CmdTab(trigger)
|
||||||
" first stage
|
" first stage
|
||||||
" analyse command line
|
" analyse command line
|
||||||
let col1 = getcmdpos() - 1
|
let col1 = getcmdpos() - 1
|
||||||
@@ -418,10 +427,12 @@ function! LaTeXtoUnicode#CmdTab(triggeredbytab)
|
|||||||
let b:l2u_singlebslash = (match(l[0:col1-1], '\\$') >= 0)
|
let b:l2u_singlebslash = (match(l[0:col1-1], '\\$') >= 0)
|
||||||
" completion not found
|
" completion not found
|
||||||
if col0 == -1
|
if col0 == -1
|
||||||
if a:triggeredbytab
|
if a:trigger == &wildchar
|
||||||
call feedkeys("\<Tab>", 'nt') " fall-back to the default <Tab>
|
call feedkeys(nr2char(a:trigger), 'nt') " fall-back to the default wildchar
|
||||||
|
elseif a:trigger == char2nr("\<S-Tab>")
|
||||||
|
call feedkeys("\<S-Tab>", 'nt') " fall-back to the default <S-Tab>
|
||||||
endif
|
endif
|
||||||
return l
|
return ''
|
||||||
endif
|
endif
|
||||||
let base = l[col0 : col1-1]
|
let base = l[col0 : col1-1]
|
||||||
" search for matches
|
" search for matches
|
||||||
@@ -430,39 +441,28 @@ function! LaTeXtoUnicode#CmdTab(triggeredbytab)
|
|||||||
for k in keys(g:l2u_symbols_dict)
|
for k in keys(g:l2u_symbols_dict)
|
||||||
if k ==# base
|
if k ==# base
|
||||||
let exact_match = 1
|
let exact_match = 1
|
||||||
endif
|
break
|
||||||
if len(k) >= len(base) && k[0 : len(base)-1] ==# base
|
elseif len(k) >= len(base) && k[0 : len(base)-1] ==# base
|
||||||
call add(partmatches, k)
|
call add(partmatches, k)
|
||||||
endif
|
endif
|
||||||
endfor
|
endfor
|
||||||
if len(partmatches) == 0
|
if !exact_match && len(partmatches) == 0
|
||||||
if a:triggeredbytab
|
" no matches, call fallbacks
|
||||||
call feedkeys("\<Tab>", 'nt') " fall-back to the default <Tab>
|
if a:trigger == &wildchar
|
||||||
|
call feedkeys(nr2char(a:trigger), 'nt') " fall-back to the default wildchar
|
||||||
|
elseif a:trigger == char2nr("\<S-Tab>")
|
||||||
|
call feedkeys("\<S-Tab>", 'nt') " fall-back to the default <S-Tab>
|
||||||
endif
|
endif
|
||||||
return l
|
elseif exact_match
|
||||||
endif
|
" exact matches are replaced with Unicode
|
||||||
" exact matches are replaced with Unicode
|
|
||||||
if exact_match
|
|
||||||
let unicode = g:l2u_symbols_dict[base]
|
let unicode = g:l2u_symbols_dict[base]
|
||||||
if col0 > 0
|
call feedkeys(repeat("\b", len(base)) . unicode, 'nt')
|
||||||
let pre = l[0 : col0 - 1]
|
|
||||||
else
|
|
||||||
let pre = ''
|
|
||||||
endif
|
|
||||||
let posdiff = col1-col0 - len(unicode)
|
|
||||||
call setcmdpos(col1 - posdiff + 1)
|
|
||||||
return pre . unicode . l[col1 : -1]
|
|
||||||
endif
|
|
||||||
" no exact match: complete with the longest common prefix
|
|
||||||
let common = s:L2U_longest_common_prefix(partmatches)
|
|
||||||
if col0 > 0
|
|
||||||
let pre = l[0 : col0 - 1]
|
|
||||||
else
|
else
|
||||||
let pre = ''
|
" no exact match: complete with the longest common prefix
|
||||||
|
let common = s:L2U_longest_common_prefix(partmatches)
|
||||||
|
call feedkeys(common[len(base):], 'nt')
|
||||||
endif
|
endif
|
||||||
let posdiff = col1-col0 - len(common)
|
return ''
|
||||||
call setcmdpos(col1 - posdiff + 1)
|
|
||||||
return pre . common . l[col1 : -1]
|
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
" Setup the L2U tab mapping
|
" Setup the L2U tab mapping
|
||||||
@@ -473,7 +473,8 @@ function! s:L2U_SetTab(wait_insert_enter)
|
|||||||
let b:l2u_cmdtab_keys = [b:l2u_cmdtab_keys]
|
let b:l2u_cmdtab_keys = [b:l2u_cmdtab_keys]
|
||||||
endif
|
endif
|
||||||
for k in b:l2u_cmdtab_keys
|
for k in b:l2u_cmdtab_keys
|
||||||
exec 'cnoremap <buffer> '.k.' <C-\>eLaTeXtoUnicode#CmdTab('.(k ==? '<Tab>').')<CR>'
|
exec 'let trigger = char2nr("'.(k[0] == '<' ? '\' : '').k.'")'
|
||||||
|
exec 'cnoremap <buffer><expr> '.k.' LaTeXtoUnicode#CmdTab('.trigger.')'
|
||||||
endfor
|
endfor
|
||||||
let b:l2u_cmdtab_set = 1
|
let b:l2u_cmdtab_set = 1
|
||||||
endif
|
endif
|
||||||
@@ -637,6 +638,7 @@ function! LaTeXtoUnicode#Init(...)
|
|||||||
call s:L2U_SetTab(wait_insert_enter)
|
call s:L2U_SetTab(wait_insert_enter)
|
||||||
call s:L2U_SetAutoSub(wait_insert_enter)
|
call s:L2U_SetAutoSub(wait_insert_enter)
|
||||||
call s:L2U_SetKeymap()
|
call s:L2U_SetKeymap()
|
||||||
|
return ''
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
function! LaTeXtoUnicode#Toggle()
|
function! LaTeXtoUnicode#Toggle()
|
||||||
@@ -648,7 +650,7 @@ function! LaTeXtoUnicode#Toggle()
|
|||||||
call LaTeXtoUnicode#Enable()
|
call LaTeXtoUnicode#Enable()
|
||||||
echo "LaTeX-to-Unicode enabled"
|
echo "LaTeX-to-Unicode enabled"
|
||||||
endif
|
endif
|
||||||
return
|
return ''
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
endif
|
endif
|
||||||
|
|||||||
641
autoload/ada.vim
Normal file
641
autoload/ada.vim
Normal file
@@ -0,0 +1,641 @@
|
|||||||
|
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'ada') == -1
|
||||||
|
|
||||||
|
"------------------------------------------------------------------------------
|
||||||
|
" Description: Perform Ada specific completion & tagging.
|
||||||
|
" Language: Ada (2005)
|
||||||
|
" $Id: ada.vim 887 2008-07-08 14:29:01Z krischik $
|
||||||
|
" Maintainer: Mathias Brousset <mathiasb17@gmail.com>
|
||||||
|
" Martin Krischik <krischik@users.sourceforge.net>
|
||||||
|
" Taylor Venable <taylor@metasyntax.net>
|
||||||
|
" Neil Bird <neil@fnxweb.com>
|
||||||
|
" Ned Okie <nokie@radford.edu>
|
||||||
|
" $Author: krischik $
|
||||||
|
" $Date: 2017-01-31 20:20:05 +0200 (Mon, 01 Jan 2017) $
|
||||||
|
" Version: 4.6
|
||||||
|
" $Revision: 887 $
|
||||||
|
" $HeadURL: https://gnuada.svn.sourceforge.net/svnroot/gnuada/trunk/tools/vim/autoload/ada.vim $
|
||||||
|
" History: 24.05.2006 MK Unified Headers
|
||||||
|
" 26.05.2006 MK ' should not be in iskeyword.
|
||||||
|
" 16.07.2006 MK Ada-Mode as vim-ball
|
||||||
|
" 02.10.2006 MK Better folding.
|
||||||
|
" 15.10.2006 MK Bram's suggestion for runtime integration
|
||||||
|
" 05.11.2006 MK Bram suggested not to use include protection for
|
||||||
|
" autoload
|
||||||
|
" 05.11.2006 MK Bram suggested to save on spaces
|
||||||
|
" 08.07.2007 TV fix mapleader problems.
|
||||||
|
" 09.05.2007 MK Session just won't work no matter how much
|
||||||
|
" tweaking is done
|
||||||
|
" 19.09.2007 NO still some mapleader problems
|
||||||
|
" 31.01.2017 MB fix more mapleader problems
|
||||||
|
" Help Page: ft-ada-functions
|
||||||
|
"------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
if version < 700
|
||||||
|
finish
|
||||||
|
endif
|
||||||
|
let s:keepcpo= &cpo
|
||||||
|
set cpo&vim
|
||||||
|
|
||||||
|
" Section: Constants {{{1
|
||||||
|
"
|
||||||
|
let g:ada#DotWordRegex = '\a\w*\(\_s*\.\_s*\a\w*\)*'
|
||||||
|
let g:ada#WordRegex = '\a\w*'
|
||||||
|
let g:ada#Comment = "\\v^(\"[^\"]*\"|'.'|[^\"']){-}\\zs\\s*--.*"
|
||||||
|
let g:ada#Keywords = []
|
||||||
|
|
||||||
|
" Section: g:ada#Keywords {{{1
|
||||||
|
"
|
||||||
|
" Section: add Ada keywords {{{2
|
||||||
|
"
|
||||||
|
for Item in ['abort', 'else', 'new', 'return', 'abs', 'elsif', 'not', 'reverse', 'abstract', 'end', 'null', 'accept', 'entry', 'select', 'access', 'exception', 'of', 'separate', 'aliased', 'exit', 'or', 'subtype', 'all', 'others', 'synchronized', 'and', 'for', 'out', 'array', 'function', 'overriding', 'tagged', 'at', 'task', 'generic', 'package', 'terminate', 'begin', 'goto', 'pragma', 'then', 'body', 'private', 'type', 'if', 'procedure', 'case', 'in', 'protected', 'until', 'constant', 'interface', 'use', 'is', 'raise', 'declare', 'range', 'when', 'delay', 'limited', 'record', 'while', 'delta', 'loop', 'rem', 'with', 'digits', 'renames', 'do', 'mod', 'requeue', 'xor']
|
||||||
|
let g:ada#Keywords += [{
|
||||||
|
\ 'word': Item,
|
||||||
|
\ 'menu': 'keyword',
|
||||||
|
\ 'info': 'Ada keyword.',
|
||||||
|
\ 'kind': 'k',
|
||||||
|
\ 'icase': 1}]
|
||||||
|
endfor
|
||||||
|
|
||||||
|
" Section: GNAT Project Files {{{3
|
||||||
|
"
|
||||||
|
if exists ('g:ada_with_gnat_project_files')
|
||||||
|
for Item in ['project']
|
||||||
|
let g:ada#Keywords += [{
|
||||||
|
\ 'word': Item,
|
||||||
|
\ 'menu': 'keyword',
|
||||||
|
\ 'info': 'GNAT projectfile keyword.',
|
||||||
|
\ 'kind': 'k',
|
||||||
|
\ 'icase': 1}]
|
||||||
|
endfor
|
||||||
|
endif
|
||||||
|
|
||||||
|
" Section: add standart exception {{{2
|
||||||
|
"
|
||||||
|
for Item in ['Constraint_Error', 'Program_Error', 'Storage_Error', 'Tasking_Error', 'Status_Error', 'Mode_Error', 'Name_Error', 'Use_Error', 'Device_Error', 'End_Error', 'Data_Error', 'Layout_Error', 'Length_Error', 'Pattern_Error', 'Index_Error', 'Translation_Error', 'Time_Error', 'Argument_Error', 'Tag_Error', 'Picture_Error', 'Terminator_Error', 'Conversion_Error', 'Pointer_Error', 'Dereference_Error', 'Update_Error']
|
||||||
|
let g:ada#Keywords += [{
|
||||||
|
\ 'word': Item,
|
||||||
|
\ 'menu': 'exception',
|
||||||
|
\ 'info': 'Ada standart exception.',
|
||||||
|
\ 'kind': 'x',
|
||||||
|
\ 'icase': 1}]
|
||||||
|
endfor
|
||||||
|
|
||||||
|
" Section: add GNAT exception {{{3
|
||||||
|
"
|
||||||
|
if exists ('g:ada_gnat_extensions')
|
||||||
|
for Item in ['Assert_Failure']
|
||||||
|
let g:ada#Keywords += [{
|
||||||
|
\ 'word': Item,
|
||||||
|
\ 'menu': 'exception',
|
||||||
|
\ 'info': 'GNAT exception.',
|
||||||
|
\ 'kind': 'x',
|
||||||
|
\ 'icase': 1}]
|
||||||
|
endfor
|
||||||
|
endif
|
||||||
|
|
||||||
|
" Section: add Ada buildin types {{{2
|
||||||
|
"
|
||||||
|
for Item in ['Boolean', 'Integer', 'Natural', 'Positive', 'Float', 'Character', 'Wide_Character', 'Wide_Wide_Character', 'String', 'Wide_String', 'Wide_Wide_String', 'Duration']
|
||||||
|
let g:ada#Keywords += [{
|
||||||
|
\ 'word': Item,
|
||||||
|
\ 'menu': 'type',
|
||||||
|
\ 'info': 'Ada buildin type.',
|
||||||
|
\ 'kind': 't',
|
||||||
|
\ 'icase': 1}]
|
||||||
|
endfor
|
||||||
|
|
||||||
|
" Section: add GNAT buildin types {{{3
|
||||||
|
"
|
||||||
|
if exists ('g:ada_gnat_extensions')
|
||||||
|
for Item in ['Short_Integer', 'Short_Short_Integer', 'Long_Integer', 'Long_Long_Integer', 'Short_Float', 'Short_Short_Float', 'Long_Float', 'Long_Long_Float']
|
||||||
|
let g:ada#Keywords += [{
|
||||||
|
\ 'word': Item,
|
||||||
|
\ 'menu': 'type',
|
||||||
|
\ 'info': 'GNAT buildin type.',
|
||||||
|
\ 'kind': 't',
|
||||||
|
\ 'icase': 1}]
|
||||||
|
endfor
|
||||||
|
endif
|
||||||
|
|
||||||
|
" Section: add Ada Attributes {{{2
|
||||||
|
"
|
||||||
|
for Item in ['''Access', '''Address', '''Adjacent', '''Aft', '''Alignment', '''Base', '''Bit_Order', '''Body_Version', '''Callable', '''Caller', '''Ceiling', '''Class', '''Component_Size', '''Compose', '''Constrained', '''Copy_Sign', '''Count', '''Definite', '''Delta', '''Denorm', '''Digits', '''Emax', '''Exponent', '''External_Tag', '''Epsilon', '''First', '''First_Bit', '''Floor', '''Fore', '''Fraction', '''Identity', '''Image', '''Input', '''Large', '''Last', '''Last_Bit', '''Leading_Part', '''Length', '''Machine', '''Machine_Emax', '''Machine_Emin', '''Machine_Mantissa', '''Machine_Overflows', '''Machine_Radix', '''Machine_Rounding', '''Machine_Rounds', '''Mantissa', '''Max', '''Max_Size_In_Storage_Elements', '''Min', '''Mod', '''Model', '''Model_Emin', '''Model_Epsilon', '''Model_Mantissa', '''Model_Small', '''Modulus', '''Output', '''Partition_ID', '''Pos', '''Position', '''Pred', '''Priority', '''Range', '''Read', '''Remainder', '''Round', '''Rounding', '''Safe_Emax', '''Safe_First', '''Safe_Large', '''Safe_Last', '''Safe_Small', '''Scale', '''Scaling', '''Signed_Zeros', '''Size', '''Small', '''Storage_Pool', '''Storage_Size', '''Stream_Size', '''Succ', '''Tag', '''Terminated', '''Truncation', '''Unbiased_Rounding', '''Unchecked_Access', '''Val', '''Valid', '''Value', '''Version', '''Wide_Image', '''Wide_Value', '''Wide_Wide_Image', '''Wide_Wide_Value', '''Wide_Wide_Width', '''Wide_Width', '''Width', '''Write']
|
||||||
|
let g:ada#Keywords += [{
|
||||||
|
\ 'word': Item,
|
||||||
|
\ 'menu': 'attribute',
|
||||||
|
\ 'info': 'Ada attribute.',
|
||||||
|
\ 'kind': 'a',
|
||||||
|
\ 'icase': 1}]
|
||||||
|
endfor
|
||||||
|
|
||||||
|
" Section: add GNAT Attributes {{{3
|
||||||
|
"
|
||||||
|
if exists ('g:ada_gnat_extensions')
|
||||||
|
for Item in ['''Abort_Signal', '''Address_Size', '''Asm_Input', '''Asm_Output', '''AST_Entry', '''Bit', '''Bit_Position', '''Code_Address', '''Default_Bit_Order', '''Elaborated', '''Elab_Body', '''Elab_Spec', '''Emax', '''Enum_Rep', '''Epsilon', '''Fixed_Value', '''Has_Access_Values', '''Has_Discriminants', '''Img', '''Integer_Value', '''Machine_Size', '''Max_Interrupt_Priority', '''Max_Priority', '''Maximum_Alignment', '''Mechanism_Code', '''Null_Parameter', '''Object_Size', '''Passed_By_Reference', '''Range_Length', '''Storage_Unit', '''Target_Name', '''Tick', '''To_Address', '''Type_Class', '''UET_Address', '''Unconstrained_Array', '''Universal_Literal_String', '''Unrestricted_Access', '''VADS_Size', '''Value_Size', '''Wchar_T_Size', '''Word_Size']
|
||||||
|
let g:ada#Keywords += [{
|
||||||
|
\ 'word': Item,
|
||||||
|
\ 'menu': 'attribute',
|
||||||
|
\ 'info': 'GNAT attribute.',
|
||||||
|
\ 'kind': 'a',
|
||||||
|
\ 'icase': 1}]
|
||||||
|
endfor
|
||||||
|
endif
|
||||||
|
|
||||||
|
" Section: add Ada Pragmas {{{2
|
||||||
|
"
|
||||||
|
for Item in ['All_Calls_Remote', 'Assert', 'Assertion_Policy', 'Asynchronous', 'Atomic', 'Atomic_Components', 'Attach_Handler', 'Controlled', 'Convention', 'Detect_Blocking', 'Discard_Names', 'Elaborate', 'Elaborate_All', 'Elaborate_Body', 'Export', 'Import', 'Inline', 'Inspection_Point', 'Interface (Obsolescent)', 'Interrupt_Handler', 'Interrupt_Priority', 'Linker_Options', 'List', 'Locking_Policy', 'Memory_Size (Obsolescent)', 'No_Return', 'Normalize_Scalars', 'Optimize', 'Pack', 'Page', 'Partition_Elaboration_Policy', 'Preelaborable_Initialization', 'Preelaborate', 'Priority', 'Priority_Specific_Dispatching', 'Profile', 'Pure', 'Queueing_Policy', 'Relative_Deadline', 'Remote_Call_Interface', 'Remote_Types', 'Restrictions', 'Reviewable', 'Shared (Obsolescent)', 'Shared_Passive', 'Storage_Size', 'Storage_Unit (Obsolescent)', 'Suppress', 'System_Name (Obsolescent)', 'Task_Dispatching_Policy', 'Unchecked_Union', 'Unsuppress', 'Volatile', 'Volatile_Components']
|
||||||
|
let g:ada#Keywords += [{
|
||||||
|
\ 'word': Item,
|
||||||
|
\ 'menu': 'pragma',
|
||||||
|
\ 'info': 'Ada pragma.',
|
||||||
|
\ 'kind': 'p',
|
||||||
|
\ 'icase': 1}]
|
||||||
|
endfor
|
||||||
|
|
||||||
|
" Section: add GNAT Pragmas {{{3
|
||||||
|
"
|
||||||
|
if exists ('g:ada_gnat_extensions')
|
||||||
|
for Item in ['Abort_Defer', 'Ada_83', 'Ada_95', 'Ada_05', 'Annotate', 'Ast_Entry', 'C_Pass_By_Copy', 'Comment', 'Common_Object', 'Compile_Time_Warning', 'Complex_Representation', 'Component_Alignment', 'Convention_Identifier', 'CPP_Class', 'CPP_Constructor', 'CPP_Virtual', 'CPP_Vtable', 'Debug', 'Elaboration_Checks', 'Eliminate', 'Export_Exception', 'Export_Function', 'Export_Object', 'Export_Procedure', 'Export_Value', 'Export_Valued_Procedure', 'Extend_System', 'External', 'External_Name_Casing', 'Finalize_Storage_Only', 'Float_Representation', 'Ident', 'Import_Exception', 'Import_Function', 'Import_Object', 'Import_Procedure', 'Import_Valued_Procedure', 'Initialize_Scalars', 'Inline_Always', 'Inline_Generic', 'Interface_Name', 'Interrupt_State', 'Keep_Names', 'License', 'Link_With', 'Linker_Alias', 'Linker_Section', 'Long_Float', 'Machine_Attribute', 'Main_Storage', 'Obsolescent', 'Passive', 'Polling', 'Profile_Warnings', 'Propagate_Exceptions', 'Psect_Object', 'Pure_Function', 'Restriction_Warnings', 'Source_File_Name', 'Source_File_Name_Project', 'Source_Reference', 'Stream_Convert', 'Style_Checks', 'Subtitle', 'Suppress_All', 'Suppress_Exception_Locations', 'Suppress_Initialization', 'Task_Info', 'Task_Name', 'Task_Storage', 'Thread_Body', 'Time_Slice', 'Title', 'Unimplemented_Unit', 'Universal_Data', 'Unreferenced', 'Unreserve_All_Interrupts', 'Use_VADS_Size', 'Validity_Checks', 'Warnings', 'Weak_External']
|
||||||
|
let g:ada#Keywords += [{
|
||||||
|
\ 'word': Item,
|
||||||
|
\ 'menu': 'pragma',
|
||||||
|
\ 'info': 'GNAT pragma.',
|
||||||
|
\ 'kind': 'p',
|
||||||
|
\ 'icase': 1}]
|
||||||
|
endfor
|
||||||
|
endif
|
||||||
|
" 1}}}
|
||||||
|
|
||||||
|
" Section: g:ada#Ctags_Kinds {{{1
|
||||||
|
"
|
||||||
|
let g:ada#Ctags_Kinds = {
|
||||||
|
\ 'P': ["packspec", "package specifications"],
|
||||||
|
\ 'p': ["package", "packages"],
|
||||||
|
\ 'T': ["typespec", "type specifications"],
|
||||||
|
\ 't': ["type", "types"],
|
||||||
|
\ 'U': ["subspec", "subtype specifications"],
|
||||||
|
\ 'u': ["subtype", "subtypes"],
|
||||||
|
\ 'c': ["component", "record type components"],
|
||||||
|
\ 'l': ["literal", "enum type literals"],
|
||||||
|
\ 'V': ["varspec", "variable specifications"],
|
||||||
|
\ 'v': ["variable", "variables"],
|
||||||
|
\ 'f': ["formal", "generic formal parameters"],
|
||||||
|
\ 'n': ["constant", "constants"],
|
||||||
|
\ 'x': ["exception", "user defined exceptions"],
|
||||||
|
\ 'R': ["subprogspec", "subprogram specifications"],
|
||||||
|
\ 'r': ["subprogram", "subprograms"],
|
||||||
|
\ 'K': ["taskspec", "task specifications"],
|
||||||
|
\ 'k': ["task", "tasks"],
|
||||||
|
\ 'O': ["protectspec", "protected data specifications"],
|
||||||
|
\ 'o': ["protected", "protected data"],
|
||||||
|
\ 'E': ["entryspec", "task/protected data entry specifications"],
|
||||||
|
\ 'e': ["entry", "task/protected data entries"],
|
||||||
|
\ 'b': ["label", "labels"],
|
||||||
|
\ 'i': ["identifier", "loop/declare identifiers"],
|
||||||
|
\ 'a': ["autovar", "automatic variables"],
|
||||||
|
\ 'y': ["annon", "loops and blocks with no identifier"]}
|
||||||
|
|
||||||
|
" Section: ada#Word (...) {{{1
|
||||||
|
"
|
||||||
|
" Extract current Ada word across multiple lines
|
||||||
|
" AdaWord ([line, column])\
|
||||||
|
"
|
||||||
|
function ada#Word (...)
|
||||||
|
if a:0 > 1
|
||||||
|
let l:Line_Nr = a:1
|
||||||
|
let l:Column_Nr = a:2 - 1
|
||||||
|
else
|
||||||
|
let l:Line_Nr = line('.')
|
||||||
|
let l:Column_Nr = col('.') - 1
|
||||||
|
endif
|
||||||
|
|
||||||
|
let l:Line = substitute (getline (l:Line_Nr), g:ada#Comment, '', '' )
|
||||||
|
|
||||||
|
" Cope with tag searching for items in comments; if we are, don't loop
|
||||||
|
" backards looking for previous lines
|
||||||
|
if l:Column_Nr > strlen(l:Line)
|
||||||
|
" We were in a comment
|
||||||
|
let l:Line = getline(l:Line_Nr)
|
||||||
|
let l:Search_Prev_Lines = 0
|
||||||
|
else
|
||||||
|
let l:Search_Prev_Lines = 1
|
||||||
|
endif
|
||||||
|
|
||||||
|
" Go backwards until we find a match (Ada ID) that *doesn't* include our
|
||||||
|
" location - i.e., the previous ID. This is because the current 'correct'
|
||||||
|
" match will toggle matching/not matching as we traverse characters
|
||||||
|
" backwards. Thus, we have to find the previous unrelated match, exclude
|
||||||
|
" it, then use the next full match (ours).
|
||||||
|
" Remember to convert vim column 'l:Column_Nr' [1..n] to string offset [0..(n-1)]
|
||||||
|
" ... but start, here, one after the required char.
|
||||||
|
let l:New_Column = l:Column_Nr + 1
|
||||||
|
while 1
|
||||||
|
let l:New_Column = l:New_Column - 1
|
||||||
|
if l:New_Column < 0
|
||||||
|
" Have to include previous l:Line from file
|
||||||
|
let l:Line_Nr = l:Line_Nr - 1
|
||||||
|
if l:Line_Nr < 1 || !l:Search_Prev_Lines
|
||||||
|
" Start of file or matching in a comment
|
||||||
|
let l:Line_Nr = 1
|
||||||
|
let l:New_Column = 0
|
||||||
|
let l:Our_Match = match (l:Line, g:ada#WordRegex )
|
||||||
|
break
|
||||||
|
endif
|
||||||
|
" Get previous l:Line, and prepend it to our search string
|
||||||
|
let l:New_Line = substitute (getline (l:Line_Nr), g:ada#Comment, '', '' )
|
||||||
|
let l:New_Column = strlen (l:New_Line) - 1
|
||||||
|
let l:Column_Nr = l:Column_Nr + l:New_Column
|
||||||
|
let l:Line = l:New_Line . l:Line
|
||||||
|
endif
|
||||||
|
" Check to see if this is a match excluding 'us'
|
||||||
|
let l:Match_End = l:New_Column +
|
||||||
|
\ matchend (strpart (l:Line,l:New_Column), g:ada#WordRegex ) - 1
|
||||||
|
if l:Match_End >= l:New_Column &&
|
||||||
|
\ l:Match_End < l:Column_Nr
|
||||||
|
" Yes
|
||||||
|
let l:Our_Match = l:Match_End+1 +
|
||||||
|
\ match (strpart (l:Line,l:Match_End+1), g:ada#WordRegex )
|
||||||
|
break
|
||||||
|
endif
|
||||||
|
endwhile
|
||||||
|
|
||||||
|
" Got anything?
|
||||||
|
if l:Our_Match < 0
|
||||||
|
return ''
|
||||||
|
else
|
||||||
|
let l:Line = strpart (l:Line, l:Our_Match)
|
||||||
|
endif
|
||||||
|
|
||||||
|
" Now simply add further lines until the match gets no bigger
|
||||||
|
let l:Match_String = matchstr (l:Line, g:ada#WordRegex)
|
||||||
|
let l:Last_Line = line ('$')
|
||||||
|
let l:Line_Nr = line ('.') + 1
|
||||||
|
while l:Line_Nr <= l:Last_Line
|
||||||
|
let l:Last_Match = l:Match_String
|
||||||
|
let l:Line = l:Line .
|
||||||
|
\ substitute (getline (l:Line_Nr), g:ada#Comment, '', '')
|
||||||
|
let l:Match_String = matchstr (l:Line, g:ada#WordRegex)
|
||||||
|
if l:Match_String == l:Last_Match
|
||||||
|
break
|
||||||
|
endif
|
||||||
|
endwhile
|
||||||
|
|
||||||
|
" Strip whitespace & return
|
||||||
|
return substitute (l:Match_String, '\s\+', '', 'g')
|
||||||
|
endfunction ada#Word
|
||||||
|
|
||||||
|
" Section: ada#List_Tag (...) {{{1
|
||||||
|
"
|
||||||
|
" List tags in quickfix window
|
||||||
|
"
|
||||||
|
function ada#List_Tag (...)
|
||||||
|
if a:0 > 1
|
||||||
|
let l:Tag_Word = ada#Word (a:1, a:2)
|
||||||
|
elseif a:0 > 0
|
||||||
|
let l:Tag_Word = a:1
|
||||||
|
else
|
||||||
|
let l:Tag_Word = ada#Word ()
|
||||||
|
endif
|
||||||
|
|
||||||
|
echo "Searching for" l:Tag_Word
|
||||||
|
|
||||||
|
let l:Pattern = '^' . l:Tag_Word . '$'
|
||||||
|
let l:Tag_List = taglist (l:Pattern)
|
||||||
|
let l:Error_List = []
|
||||||
|
"
|
||||||
|
" add symbols
|
||||||
|
"
|
||||||
|
for Tag_Item in l:Tag_List
|
||||||
|
if l:Tag_Item['kind'] == ''
|
||||||
|
let l:Tag_Item['kind'] = 's'
|
||||||
|
endif
|
||||||
|
|
||||||
|
let l:Error_List += [
|
||||||
|
\ l:Tag_Item['filename'] . '|' .
|
||||||
|
\ l:Tag_Item['cmd'] . '|' .
|
||||||
|
\ l:Tag_Item['kind'] . "\t" .
|
||||||
|
\ l:Tag_Item['name'] ]
|
||||||
|
endfor
|
||||||
|
set errorformat=%f\|%l\|%m
|
||||||
|
cexpr l:Error_List
|
||||||
|
cwindow
|
||||||
|
endfunction ada#List_Tag
|
||||||
|
|
||||||
|
" Section: ada#Jump_Tag (Word, Mode) {{{1
|
||||||
|
"
|
||||||
|
" Word tag - include '.' and if Ada make uppercase
|
||||||
|
"
|
||||||
|
function ada#Jump_Tag (Word, Mode)
|
||||||
|
if a:Word == ''
|
||||||
|
" Get current word
|
||||||
|
let l:Word = ada#Word()
|
||||||
|
if l:Word == ''
|
||||||
|
throw "NOT_FOUND: no identifier found."
|
||||||
|
endif
|
||||||
|
else
|
||||||
|
let l:Word = a:Word
|
||||||
|
endif
|
||||||
|
|
||||||
|
echo "Searching for " . l:Word
|
||||||
|
|
||||||
|
try
|
||||||
|
execute a:Mode l:Word
|
||||||
|
catch /.*:E426:.*/
|
||||||
|
let ignorecase = &ignorecase
|
||||||
|
set ignorecase
|
||||||
|
execute a:Mode l:Word
|
||||||
|
let &ignorecase = ignorecase
|
||||||
|
endtry
|
||||||
|
|
||||||
|
return
|
||||||
|
endfunction ada#Jump_Tag
|
||||||
|
|
||||||
|
" Section: ada#Insert_Backspace () {{{1
|
||||||
|
"
|
||||||
|
" Backspace at end of line after auto-inserted commentstring '-- ' wipes it
|
||||||
|
"
|
||||||
|
function ada#Insert_Backspace ()
|
||||||
|
let l:Line = getline ('.')
|
||||||
|
if col ('.') > strlen (l:Line) &&
|
||||||
|
\ match (l:Line, '-- $') != -1 &&
|
||||||
|
\ match (&comments,'--') != -1
|
||||||
|
return "\<bs>\<bs>\<bs>"
|
||||||
|
else
|
||||||
|
return "\<bs>"
|
||||||
|
endif
|
||||||
|
|
||||||
|
return
|
||||||
|
endfunction ada#InsertBackspace
|
||||||
|
|
||||||
|
" Section: Insert Completions {{{1
|
||||||
|
"
|
||||||
|
" Section: ada#User_Complete(findstart, base) {{{2
|
||||||
|
"
|
||||||
|
" This function is used for the 'complete' option.
|
||||||
|
"
|
||||||
|
function! ada#User_Complete(findstart, base)
|
||||||
|
if a:findstart == 1
|
||||||
|
"
|
||||||
|
" locate the start of the word
|
||||||
|
"
|
||||||
|
let line = getline ('.')
|
||||||
|
let start = col ('.') - 1
|
||||||
|
while start > 0 && line[start - 1] =~ '\i\|'''
|
||||||
|
let start -= 1
|
||||||
|
endwhile
|
||||||
|
return start
|
||||||
|
else
|
||||||
|
"
|
||||||
|
" look up matches
|
||||||
|
"
|
||||||
|
let l:Pattern = '^' . a:base . '.*$'
|
||||||
|
"
|
||||||
|
" add keywords
|
||||||
|
"
|
||||||
|
for Tag_Item in g:ada#Keywords
|
||||||
|
if l:Tag_Item['word'] =~? l:Pattern
|
||||||
|
if complete_add (l:Tag_Item) == 0
|
||||||
|
return []
|
||||||
|
endif
|
||||||
|
if complete_check ()
|
||||||
|
return []
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
endfor
|
||||||
|
return []
|
||||||
|
endif
|
||||||
|
endfunction ada#User_Complete
|
||||||
|
|
||||||
|
" Section: ada#Completion (cmd) {{{2
|
||||||
|
"
|
||||||
|
" Word completion (^N/^R/^X^]) - force '.' inclusion
|
||||||
|
function ada#Completion (cmd)
|
||||||
|
set iskeyword+=46
|
||||||
|
return a:cmd . "\<C-R>=ada#Completion_End ()\<CR>"
|
||||||
|
endfunction ada#Completion
|
||||||
|
|
||||||
|
" Section: ada#Completion_End () {{{2
|
||||||
|
"
|
||||||
|
function ada#Completion_End ()
|
||||||
|
set iskeyword-=46
|
||||||
|
return ''
|
||||||
|
endfunction ada#Completion_End
|
||||||
|
|
||||||
|
" Section: ada#Create_Tags {{{1
|
||||||
|
"
|
||||||
|
function ada#Create_Tags (option)
|
||||||
|
if a:option == 'file'
|
||||||
|
let l:Filename = fnamemodify (bufname ('%'), ':p')
|
||||||
|
elseif a:option == 'dir'
|
||||||
|
let l:Filename =
|
||||||
|
\ fnamemodify (bufname ('%'), ':p:h') . "*.ada " .
|
||||||
|
\ fnamemodify (bufname ('%'), ':p:h') . "*.adb " .
|
||||||
|
\ fnamemodify (bufname ('%'), ':p:h') . "*.ads"
|
||||||
|
else
|
||||||
|
let l:Filename = a:option
|
||||||
|
endif
|
||||||
|
execute '!ctags --excmd=number ' . l:Filename
|
||||||
|
endfunction ada#Create_Tags
|
||||||
|
|
||||||
|
" Section: ada#Switch_Session {{{1
|
||||||
|
"
|
||||||
|
function ada#Switch_Session (New_Session)
|
||||||
|
"
|
||||||
|
" you should not save to much date into the seession since they will
|
||||||
|
" be sourced
|
||||||
|
"
|
||||||
|
let l:sessionoptions=&sessionoptions
|
||||||
|
|
||||||
|
try
|
||||||
|
set sessionoptions=buffers,curdir,folds,globals,resize,slash,tabpages,tabpages,unix,winpos,winsize
|
||||||
|
|
||||||
|
if a:New_Session != v:this_session
|
||||||
|
"
|
||||||
|
" We actually got a new session - otherwise there
|
||||||
|
" is nothing to do.
|
||||||
|
"
|
||||||
|
if strlen (v:this_session) > 0
|
||||||
|
execute 'mksession! ' . v:this_session
|
||||||
|
endif
|
||||||
|
|
||||||
|
let v:this_session = a:New_Session
|
||||||
|
|
||||||
|
"if filereadable (v:this_session)
|
||||||
|
"execute 'source ' . v:this_session
|
||||||
|
"endif
|
||||||
|
|
||||||
|
augroup ada_session
|
||||||
|
autocmd!
|
||||||
|
autocmd VimLeavePre * execute 'mksession! ' . v:this_session
|
||||||
|
augroup END
|
||||||
|
|
||||||
|
"if exists ("g:Tlist_Auto_Open") && g:Tlist_Auto_Open
|
||||||
|
"TlistOpen
|
||||||
|
"endif
|
||||||
|
|
||||||
|
endif
|
||||||
|
finally
|
||||||
|
let &sessionoptions=l:sessionoptions
|
||||||
|
endtry
|
||||||
|
|
||||||
|
return
|
||||||
|
endfunction ada#Switch_Session
|
||||||
|
|
||||||
|
" Section: GNAT Pretty Printer folding {{{1
|
||||||
|
"
|
||||||
|
if exists('g:ada_folding') && g:ada_folding[0] == 'g'
|
||||||
|
"
|
||||||
|
" Lines consisting only of ')' ';' are due to a gnat pretty bug and
|
||||||
|
" have the same level as the line above (can't happen in the first
|
||||||
|
" line).
|
||||||
|
"
|
||||||
|
let s:Fold_Collate = '^\([;)]*$\|'
|
||||||
|
|
||||||
|
"
|
||||||
|
" some lone statements are folded with the line above
|
||||||
|
"
|
||||||
|
if stridx (g:ada_folding, 'i') >= 0
|
||||||
|
let s:Fold_Collate .= '\s\+\<is\>$\|'
|
||||||
|
endif
|
||||||
|
if stridx (g:ada_folding, 'b') >= 0
|
||||||
|
let s:Fold_Collate .= '\s\+\<begin\>$\|'
|
||||||
|
endif
|
||||||
|
if stridx (g:ada_folding, 'p') >= 0
|
||||||
|
let s:Fold_Collate .= '\s\+\<private\>$\|'
|
||||||
|
endif
|
||||||
|
if stridx (g:ada_folding, 'x') >= 0
|
||||||
|
let s:Fold_Collate .= '\s\+\<exception\>$\|'
|
||||||
|
endif
|
||||||
|
|
||||||
|
" We also handle empty lines and
|
||||||
|
" comments here.
|
||||||
|
let s:Fold_Collate .= '--\)'
|
||||||
|
|
||||||
|
function ada#Pretty_Print_Folding (Line) " {{{2
|
||||||
|
let l:Text = getline (a:Line)
|
||||||
|
|
||||||
|
if l:Text =~ s:Fold_Collate
|
||||||
|
"
|
||||||
|
" fold with line above
|
||||||
|
"
|
||||||
|
let l:Level = "="
|
||||||
|
elseif l:Text =~ '^\s\+('
|
||||||
|
"
|
||||||
|
" gnat outdents a line which stards with a ( by one characters so
|
||||||
|
" that parameters which follow are aligned.
|
||||||
|
"
|
||||||
|
let l:Level = (indent (a:Line) + 1) / &shiftwidth
|
||||||
|
else
|
||||||
|
let l:Level = indent (a:Line) / &shiftwidth
|
||||||
|
endif
|
||||||
|
|
||||||
|
return l:Level
|
||||||
|
endfunction ada#Pretty_Print_Folding " }}}2
|
||||||
|
endif
|
||||||
|
|
||||||
|
" Section: Options and Menus {{{1
|
||||||
|
"
|
||||||
|
" Section: ada#Switch_Syntax_Options {{{2
|
||||||
|
"
|
||||||
|
function ada#Switch_Syntax_Option (option)
|
||||||
|
syntax off
|
||||||
|
if exists ('g:ada_' . a:option)
|
||||||
|
unlet g:ada_{a:option}
|
||||||
|
echo a:option . 'now off'
|
||||||
|
else
|
||||||
|
let g:ada_{a:option}=1
|
||||||
|
echo a:option . 'now on'
|
||||||
|
endif
|
||||||
|
syntax on
|
||||||
|
endfunction ada#Switch_Syntax_Option
|
||||||
|
|
||||||
|
" Section: ada#Map_Menu {{{2
|
||||||
|
"
|
||||||
|
function ada#Map_Menu (Text, Keys, Command)
|
||||||
|
if a:Keys[0] == ':'
|
||||||
|
execute
|
||||||
|
\ "50amenu " .
|
||||||
|
\ "Ada." . escape(a:Text, ' ') .
|
||||||
|
\ "<Tab>" . a:Keys .
|
||||||
|
\ " :" . a:Command . "<CR>"
|
||||||
|
execute
|
||||||
|
\ "command -buffer " .
|
||||||
|
\ a:Keys[1:] .
|
||||||
|
\" :" . a:Command . "<CR>"
|
||||||
|
elseif a:Keys[0] == '<'
|
||||||
|
execute
|
||||||
|
\ "50amenu " .
|
||||||
|
\ "Ada." . escape(a:Text, ' ') .
|
||||||
|
\ "<Tab>" . a:Keys .
|
||||||
|
\ " :" . a:Command . "<CR>"
|
||||||
|
execute
|
||||||
|
\ "nnoremap <buffer> " .
|
||||||
|
\ a:Keys .
|
||||||
|
\" :" . a:Command . "<CR>"
|
||||||
|
execute
|
||||||
|
\ "inoremap <buffer> " .
|
||||||
|
\ a:Keys .
|
||||||
|
\" <C-O>:" . a:Command . "<CR>"
|
||||||
|
else
|
||||||
|
if exists("g:mapleader")
|
||||||
|
let l:leader = g:mapleader
|
||||||
|
else
|
||||||
|
let l:leader = '\'
|
||||||
|
endif
|
||||||
|
execute
|
||||||
|
\ "50amenu " .
|
||||||
|
\ "Ada." . escape(a:Text, ' ') .
|
||||||
|
\ "<Tab>" . escape(l:leader . "a" . a:Keys , '\') .
|
||||||
|
\ " :" . a:Command . "<CR>"
|
||||||
|
execute
|
||||||
|
\ "nnoremap <buffer>" .
|
||||||
|
\ " <Leader>a" . a:Keys .
|
||||||
|
\" :" . a:Command
|
||||||
|
execute
|
||||||
|
\ "inoremap <buffer>" .
|
||||||
|
\ " <Leader>a" . a:Keys .
|
||||||
|
\" <C-O>:" . a:Command
|
||||||
|
endif
|
||||||
|
return
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
" Section: ada#Map_Popup {{{2
|
||||||
|
"
|
||||||
|
function ada#Map_Popup (Text, Keys, Command)
|
||||||
|
if exists("g:mapleader")
|
||||||
|
let l:leader = g:mapleader
|
||||||
|
else
|
||||||
|
let l:leader = '\'
|
||||||
|
endif
|
||||||
|
execute
|
||||||
|
\ "50amenu " .
|
||||||
|
\ "PopUp." . escape(a:Text, ' ') .
|
||||||
|
\ "<Tab>" . escape(l:leader . "a" . a:Keys , '\') .
|
||||||
|
\ " :" . a:Command . "<CR>"
|
||||||
|
|
||||||
|
call ada#Map_Menu (a:Text, a:Keys, a:Command)
|
||||||
|
return
|
||||||
|
endfunction ada#Map_Popup
|
||||||
|
|
||||||
|
" }}}1
|
||||||
|
|
||||||
|
lockvar g:ada#WordRegex
|
||||||
|
lockvar g:ada#DotWordRegex
|
||||||
|
lockvar g:ada#Comment
|
||||||
|
lockvar! g:ada#Keywords
|
||||||
|
lockvar! g:ada#Ctags_Kinds
|
||||||
|
|
||||||
|
let &cpo = s:keepcpo
|
||||||
|
unlet s:keepcpo
|
||||||
|
|
||||||
|
finish " 1}}}
|
||||||
|
|
||||||
|
"------------------------------------------------------------------------------
|
||||||
|
" Copyright (C) 2006 Martin Krischik
|
||||||
|
"
|
||||||
|
" Vim is Charityware - see ":help license" or uganda.txt for licence details.
|
||||||
|
"------------------------------------------------------------------------------
|
||||||
|
" vim: textwidth=78 wrap tabstop=8 shiftwidth=3 softtabstop=3 noexpandtab
|
||||||
|
" vim: foldmethod=marker
|
||||||
|
|
||||||
|
endif
|
||||||
@@ -1,11 +1,23 @@
|
|||||||
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'rust') == -1
|
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'rust') == -1
|
||||||
|
|
||||||
function! cargo#Load()
|
function! cargo#Load()
|
||||||
" Utility call to get this script loaded, for debugging
|
" Utility call to get this script loaded, for debugging
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
function! cargo#cmd(args)
|
function! cargo#cmd(args) abort
|
||||||
execute "! cargo" a:args
|
" Trim trailing spaces. This is necessary since :terminal command parses
|
||||||
|
" trailing spaces as an empty argument.
|
||||||
|
let args = substitute(a:args, '\s\+$', '', '')
|
||||||
|
if exists('g:cargo_shell_command_runner')
|
||||||
|
let cmd = g:cargo_shell_command_runner
|
||||||
|
elseif has('terminal')
|
||||||
|
let cmd = 'terminal'
|
||||||
|
elseif has('nvim')
|
||||||
|
let cmd = 'noautocmd new | terminal'
|
||||||
|
else
|
||||||
|
let cmd = '!'
|
||||||
|
endif
|
||||||
|
execute cmd 'cargo' args
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
function! s:nearest_cargo(...) abort
|
function! s:nearest_cargo(...) abort
|
||||||
@@ -57,6 +69,10 @@ function! cargo#build(args)
|
|||||||
call cargo#cmd("build " . a:args)
|
call cargo#cmd("build " . a:args)
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
|
function! cargo#check(args)
|
||||||
|
call cargo#cmd("check " . a:args)
|
||||||
|
endfunction
|
||||||
|
|
||||||
function! cargo#clean(args)
|
function! cargo#clean(args)
|
||||||
call cargo#cmd("clean " . a:args)
|
call cargo#cmd("clean " . a:args)
|
||||||
endfunction
|
endfunction
|
||||||
@@ -86,6 +102,22 @@ function! cargo#bench(args)
|
|||||||
call cargo#cmd("bench " . a:args)
|
call cargo#cmd("bench " . a:args)
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
|
function! cargo#update(args)
|
||||||
|
call cargo#cmd("update " . a:args)
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! cargo#search(args)
|
||||||
|
call cargo#cmd("search " . a:args)
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! cargo#publish(args)
|
||||||
|
call cargo#cmd("publish " . a:args)
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! cargo#install(args)
|
||||||
|
call cargo#cmd("install " . a:args)
|
||||||
|
endfunction
|
||||||
|
|
||||||
function! cargo#runtarget(args)
|
function! cargo#runtarget(args)
|
||||||
let l:filename = expand('%:p')
|
let l:filename = expand('%:p')
|
||||||
let l:read_manifest = system('cargo read-manifest')
|
let l:read_manifest = system('cargo read-manifest')
|
||||||
|
|||||||
1044
autoload/crystal/indent.vim
Normal file
1044
autoload/crystal/indent.vim
Normal file
File diff suppressed because it is too large
Load Diff
@@ -1,48 +1,47 @@
|
|||||||
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'crystal') == -1
|
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'crystal') == -1
|
||||||
|
|
||||||
let s:save_cpo = &cpo
|
|
||||||
set cpo&vim
|
|
||||||
|
|
||||||
let s:V = vital#crystal#new()
|
let s:V = vital#crystal#new()
|
||||||
let s:P = s:V.import('Process')
|
let s:P = s:V.import('Process')
|
||||||
let s:C = s:V.import('ColorEcho')
|
let s:C = s:V.import('ColorEcho')
|
||||||
|
|
||||||
|
let s:IS_WINDOWS = has('win32')
|
||||||
|
|
||||||
if exists('*json_decode')
|
if exists('*json_decode')
|
||||||
function! s:decode_json(text) abort
|
function! s:decode_json(text) abort
|
||||||
return json_decode(a:text)
|
return json_decode(a:text)
|
||||||
endfunction
|
endfunction
|
||||||
else
|
else
|
||||||
let s:J = s:V.import('Web.JSON')
|
let s:J = s:V.import('Web.JSON')
|
||||||
function! s:decode_json(text) abort
|
function! s:decode_json(text) abort
|
||||||
return s:J.decode(a:text)
|
return s:J.decode(a:text)
|
||||||
endfunction
|
endfunction
|
||||||
endif
|
endif
|
||||||
|
|
||||||
function! s:echo_error(msg, ...) abort
|
function! s:echo_error(msg, ...) abort
|
||||||
echohl ErrorMsg
|
echohl ErrorMsg
|
||||||
if a:0 == 0
|
if a:0 == 0
|
||||||
echomsg a:msg
|
echomsg a:msg
|
||||||
else
|
else
|
||||||
echomsg call('printf', [a:msg] + a:000)
|
echomsg call('printf', [a:msg] + a:000)
|
||||||
endif
|
endif
|
||||||
echohl None
|
echohl None
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
function! s:run_cmd(cmd) abort
|
function! s:run_cmd(cmd) abort
|
||||||
if !executable(g:crystal_compiler_command)
|
if !executable(g:crystal_compiler_command)
|
||||||
throw "vim-crystal: Error: '" . g:crystal_compiler_command . "' command is not found."
|
throw "vim-crystal: Error: '" . g:crystal_compiler_command . "' command is not found."
|
||||||
endif
|
endif
|
||||||
return s:P.system(a:cmd)
|
return s:P.system(a:cmd)
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
function! s:find_root_by(search_dir, d) abort
|
function! s:find_root_by(search_dir, d) abort
|
||||||
let found_dir = finddir(a:search_dir, a:d . ';')
|
let found_dir = finddir(a:search_dir, a:d . ';')
|
||||||
if found_dir ==# ''
|
if found_dir ==# ''
|
||||||
return ''
|
return ''
|
||||||
endif
|
endif
|
||||||
|
|
||||||
" Note: ':h:h' for {root}/{search_dir}/ -> {root}/{search_dir} -> {root}
|
" Note: ':h:h' for {root}/{search_dir}/ -> {root}/{search_dir} -> {root}
|
||||||
return fnamemodify(found_dir, ':p:h:h')
|
return fnamemodify(found_dir, ':p:h:h')
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
" Search the root directory containing a 'spec/' and a 'src/' directories.
|
" Search the root directory containing a 'spec/' and a 'src/' directories.
|
||||||
@@ -51,301 +50,318 @@ endfunction
|
|||||||
" compiler has a 'cr_sources/src/spec/' directory that would otherwise give the root
|
" compiler has a 'cr_sources/src/spec/' directory that would otherwise give the root
|
||||||
" directory as 'cr_source/src/' instead of 'cr_sources/'.
|
" directory as 'cr_source/src/' instead of 'cr_sources/'.
|
||||||
function! s:find_root_by_spec_and_src(d) abort
|
function! s:find_root_by_spec_and_src(d) abort
|
||||||
" Search for 'spec/'
|
" Search for 'spec/'
|
||||||
let root = s:find_root_by('spec', a:d)
|
let root = s:find_root_by('spec', a:d)
|
||||||
" Check that 'src/' is also there
|
" Check that 'src/' is also there
|
||||||
if root !=# '' && isdirectory(root . '/src')
|
if root !=# '' && isdirectory(root . '/src')
|
||||||
return root
|
return root
|
||||||
endif
|
endif
|
||||||
|
|
||||||
" Search for 'src/'
|
" Search for 'src/'
|
||||||
let root = s:find_root_by('src', a:d)
|
let root = s:find_root_by('src', a:d)
|
||||||
" Check that 'spec/' is also there
|
" Check that 'spec/' is also there
|
||||||
if root !=# '' && isdirectory(root . '/spec')
|
if root !=# '' && isdirectory(root . '/spec')
|
||||||
return root
|
return root
|
||||||
endif
|
endif
|
||||||
|
|
||||||
" Cannot find a directory containing both 'src/' and 'spec/'
|
" Cannot find a directory containing both 'src/' and 'spec/'
|
||||||
return ''
|
return ''
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
function! crystal_lang#entrypoint_for(file_path) abort
|
function! crystal_lang#entrypoint_for(file_path) abort
|
||||||
let parent_dir = fnamemodify(a:file_path, ':p:h')
|
let parent_dir = fnamemodify(a:file_path, ':p:h')
|
||||||
let root_dir = s:find_root_by_spec_and_src(parent_dir)
|
let root_dir = s:find_root_by_spec_and_src(parent_dir)
|
||||||
if root_dir ==# ''
|
if root_dir ==# ''
|
||||||
" No spec directory found. No need to make temporary file
|
" No spec directory found. No need to make temporary file
|
||||||
return a:file_path
|
return a:file_path
|
||||||
endif
|
endif
|
||||||
|
|
||||||
let required_spec_path = get(b:, 'crystal_required_spec_path', get(g:, 'crystal_required_spec_path', ''))
|
let required_spec_path = get(b:, 'crystal_required_spec_path', get(g:, 'crystal_required_spec_path', ''))
|
||||||
if required_spec_path !=# ''
|
if required_spec_path !=# ''
|
||||||
let require_spec_str = './' . required_spec_path
|
let require_spec_str = './' . required_spec_path
|
||||||
else
|
else
|
||||||
let require_spec_str = './spec/**'
|
let require_spec_str = './spec/**'
|
||||||
endif
|
endif
|
||||||
|
|
||||||
let temp_name = root_dir . '/__vim-crystal-temporary-entrypoint-' . fnamemodify(a:file_path, ':t')
|
let temp_name = root_dir . '/__vim-crystal-temporary-entrypoint-' . fnamemodify(a:file_path, ':t')
|
||||||
let contents = [
|
let contents = [
|
||||||
\ 'require "spec"',
|
\ 'require "spec"',
|
||||||
\ 'require "' . require_spec_str . '"',
|
\ 'require "' . require_spec_str . '"',
|
||||||
\ printf('require "./%s"', fnamemodify(a:file_path, ':p')[strlen(root_dir)+1 : ])
|
\ printf('require "./%s"', fnamemodify(a:file_path, ':p')[strlen(root_dir)+1 : ])
|
||||||
\ ]
|
\ ]
|
||||||
|
|
||||||
let result = writefile(contents, temp_name)
|
let result = writefile(contents, temp_name)
|
||||||
if result == -1
|
if result == -1
|
||||||
" Note: When writefile() failed
|
" Note: When writefile() failed
|
||||||
return a:file_path
|
return a:file_path
|
||||||
endif
|
endif
|
||||||
|
|
||||||
return temp_name
|
return temp_name
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
function! crystal_lang#tool(name, file, pos, option_str) abort
|
function! crystal_lang#tool(name, file, pos, option_str) abort
|
||||||
let entrypoint = crystal_lang#entrypoint_for(a:file)
|
let entrypoint = crystal_lang#entrypoint_for(a:file)
|
||||||
let cmd = printf(
|
let cmd = printf(
|
||||||
\ '%s tool %s --no-color %s --cursor %s:%d:%d %s',
|
\ '%s tool %s --no-color %s --cursor %s:%d:%d %s',
|
||||||
\ g:crystal_compiler_command,
|
\ g:crystal_compiler_command,
|
||||||
\ a:name,
|
\ a:name,
|
||||||
\ a:option_str,
|
\ a:option_str,
|
||||||
\ a:file,
|
\ a:file,
|
||||||
\ a:pos[1],
|
\ a:pos[1],
|
||||||
\ a:pos[2],
|
\ a:pos[2],
|
||||||
\ entrypoint
|
\ entrypoint
|
||||||
\ )
|
\ )
|
||||||
|
|
||||||
try
|
try
|
||||||
let output = s:run_cmd(cmd)
|
let output = s:run_cmd(cmd)
|
||||||
return {'failed': s:P.get_last_status(), 'output': output}
|
return {'failed': s:P.get_last_status(), 'output': output}
|
||||||
finally
|
finally
|
||||||
" Note:
|
" Note:
|
||||||
" If the entry point is temporary file, delete it finally.
|
" If the entry point is temporary file, delete it finally.
|
||||||
if a:file !=# entrypoint
|
if a:file !=# entrypoint
|
||||||
call delete(entrypoint)
|
call delete(entrypoint)
|
||||||
endif
|
endif
|
||||||
endtry
|
endtry
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
" `pos` is assumed a returned value from getpos()
|
" `pos` is assumed a returned value from getpos()
|
||||||
function! crystal_lang#impl(file, pos, option_str) abort
|
function! crystal_lang#impl(file, pos, option_str) abort
|
||||||
return crystal_lang#tool('implementations', a:file, a:pos, a:option_str)
|
return crystal_lang#tool('implementations', a:file, a:pos, a:option_str)
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
function! s:jump_to_impl(impl) abort
|
function! s:jump_to_impl(impl) abort
|
||||||
execute 'edit' a:impl.filename
|
execute 'edit' a:impl.filename
|
||||||
call cursor(a:impl.line, a:impl.column)
|
call cursor(a:impl.line, a:impl.column)
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
function! crystal_lang#jump_to_definition(file, pos) abort
|
function! crystal_lang#jump_to_definition(file, pos) abort
|
||||||
echo 'analyzing definitions under cursor...'
|
echo 'analyzing definitions under cursor...'
|
||||||
|
|
||||||
let cmd_result = crystal_lang#impl(a:file, a:pos, '--format json')
|
let cmd_result = crystal_lang#impl(a:file, a:pos, '--format json')
|
||||||
if cmd_result.failed
|
if cmd_result.failed
|
||||||
return s:echo_error(cmd_result.output)
|
return s:echo_error(cmd_result.output)
|
||||||
endif
|
endif
|
||||||
|
|
||||||
let impl = s:decode_json(cmd_result.output)
|
let impl = s:decode_json(cmd_result.output)
|
||||||
if impl.status !=# 'ok'
|
if impl.status !=# 'ok'
|
||||||
return s:echo_error(impl.message)
|
return s:echo_error(impl.message)
|
||||||
endif
|
endif
|
||||||
|
|
||||||
if len(impl.implementations) == 1
|
if len(impl.implementations) == 1
|
||||||
call s:jump_to_impl(impl.implementations[0])
|
call s:jump_to_impl(impl.implementations[0])
|
||||||
return
|
return
|
||||||
endif
|
endif
|
||||||
|
|
||||||
let message = "Multiple definitions detected. Choose a number\n\n"
|
let message = "Multiple definitions detected. Choose a number\n\n"
|
||||||
for idx in range(len(impl.implementations))
|
for idx in range(len(impl.implementations))
|
||||||
let i = impl.implementations[idx]
|
let i = impl.implementations[idx]
|
||||||
let message .= printf("[%d] %s:%d:%d\n", idx, i.filename, i.line, i.column)
|
let message .= printf("[%d] %s:%d:%d\n", idx, i.filename, i.line, i.column)
|
||||||
endfor
|
endfor
|
||||||
let message .= "\n"
|
let message .= "\n"
|
||||||
let idx = str2nr(input(message, "\n> "))
|
let idx = str2nr(input(message, "\n> "))
|
||||||
call s:jump_to_impl(impl.implementations[idx])
|
call s:jump_to_impl(impl.implementations[idx])
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
function! crystal_lang#context(file, pos, option_str) abort
|
function! crystal_lang#context(file, pos, option_str) abort
|
||||||
return crystal_lang#tool('context', a:file, a:pos, a:option_str)
|
return crystal_lang#tool('context', a:file, a:pos, a:option_str)
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
function! crystal_lang#type_hierarchy(file, option_str) abort
|
function! crystal_lang#type_hierarchy(file, option_str) abort
|
||||||
let cmd = printf(
|
let cmd = printf(
|
||||||
\ '%s tool hierarchy --no-color %s %s',
|
\ '%s tool hierarchy --no-color %s %s',
|
||||||
\ g:crystal_compiler_command,
|
\ g:crystal_compiler_command,
|
||||||
\ a:option_str,
|
\ a:option_str,
|
||||||
\ a:file
|
\ a:file
|
||||||
\ )
|
\ )
|
||||||
|
|
||||||
return s:run_cmd(cmd)
|
return s:run_cmd(cmd)
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
function! s:find_completion_start() abort
|
function! s:find_completion_start() abort
|
||||||
let c = col('.')
|
let c = col('.')
|
||||||
if c <= 1
|
if c <= 1
|
||||||
return -1
|
return -1
|
||||||
endif
|
endif
|
||||||
|
|
||||||
let line = getline('.')[:c-2]
|
let line = getline('.')[:c-2]
|
||||||
return match(line, '\w\+$')
|
return match(line, '\w\+$')
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
function! crystal_lang#complete(findstart, base) abort
|
function! crystal_lang#complete(findstart, base) abort
|
||||||
if a:findstart
|
if a:findstart
|
||||||
return s:find_completion_start()
|
return s:find_completion_start()
|
||||||
endif
|
endif
|
||||||
|
|
||||||
let cmd_result = crystal_lang#context(expand('%'), getpos('.'), '--format json')
|
let cmd_result = crystal_lang#context(expand('%'), getpos('.'), '--format json')
|
||||||
if cmd_result.failed
|
if cmd_result.failed
|
||||||
return
|
return
|
||||||
endif
|
endif
|
||||||
|
|
||||||
let contexts = s:decode_json(cmd_result.output)
|
let contexts = s:decode_json(cmd_result.output)
|
||||||
if contexts.status !=# 'ok'
|
if contexts.status !=# 'ok'
|
||||||
return
|
return
|
||||||
endif
|
endif
|
||||||
|
|
||||||
let candidates = []
|
let candidates = []
|
||||||
|
|
||||||
for c in contexts.contexts
|
for c in contexts.contexts
|
||||||
for [name, desc] in items(c)
|
for [name, desc] in items(c)
|
||||||
let candidates += [{
|
let candidates += [{
|
||||||
\ 'word': name,
|
\ 'word': name,
|
||||||
\ 'menu': ': ' . desc . ' [var]',
|
\ 'menu': ': ' . desc . ' [var]',
|
||||||
\ }]
|
\ }]
|
||||||
endfor
|
|
||||||
endfor
|
endfor
|
||||||
|
endfor
|
||||||
|
|
||||||
return candidates
|
return candidates
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
function! crystal_lang#get_spec_switched_path(absolute_path) abort
|
function! crystal_lang#get_spec_switched_path(absolute_path) abort
|
||||||
let base = fnamemodify(a:absolute_path, ':t:r')
|
let base = fnamemodify(a:absolute_path, ':t:r')
|
||||||
|
|
||||||
" TODO: Make cleverer
|
" TODO: Make cleverer
|
||||||
if base =~# '_spec$'
|
if base =~# '_spec$'
|
||||||
let parent = fnamemodify(substitute(a:absolute_path, '/spec/', '/src/', ''), ':h')
|
let parent = fnamemodify(substitute(a:absolute_path, '/spec/', '/src/', ''), ':h')
|
||||||
return parent . '/' . matchstr(base, '.\+\ze_spec$') . '.cr'
|
return parent . '/' . matchstr(base, '.\+\ze_spec$') . '.cr'
|
||||||
else
|
else
|
||||||
let parent = fnamemodify(substitute(a:absolute_path, '/src/', '/spec/', ''), ':h')
|
let parent = fnamemodify(substitute(a:absolute_path, '/src/', '/spec/', ''), ':h')
|
||||||
return parent . '/' . base . '_spec.cr'
|
return parent . '/' . base . '_spec.cr'
|
||||||
endif
|
endif
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
function! crystal_lang#switch_spec_file(...) abort
|
function! crystal_lang#switch_spec_file(...) abort
|
||||||
let path = a:0 == 0 ? expand('%:p') : fnamemodify(a:1, ':p')
|
let path = a:0 == 0 ? expand('%:p') : fnamemodify(a:1, ':p')
|
||||||
if path !~# '.cr$'
|
if path !~# '.cr$'
|
||||||
return s:echo_error('Not crystal source file: ' . path)
|
return s:echo_error('Not crystal source file: ' . path)
|
||||||
endif
|
endif
|
||||||
|
|
||||||
execute 'edit!' crystal_lang#get_spec_switched_path(path)
|
execute 'edit!' crystal_lang#get_spec_switched_path(path)
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
function! s:run_spec(root, path, ...) abort
|
function! s:run_spec(root, path, ...) abort
|
||||||
" Note:
|
" Note:
|
||||||
" `crystal spec` can't understand absolute path.
|
" `crystal spec` can't understand absolute path.
|
||||||
let cmd = printf(
|
let cmd = printf(
|
||||||
\ '%s spec %s%s',
|
\ '%s spec %s%s',
|
||||||
\ g:crystal_compiler_command,
|
\ g:crystal_compiler_command,
|
||||||
\ a:path,
|
\ a:path,
|
||||||
\ a:0 == 0 ? '' : (':' . a:1)
|
\ a:0 == 0 ? '' : (':' . a:1)
|
||||||
\ )
|
\ )
|
||||||
|
|
||||||
let saved_cwd = getcwd()
|
let saved_cwd = getcwd()
|
||||||
let cd = haslocaldir() ? 'lcd' : 'cd'
|
let cd = haslocaldir() ? 'lcd' : 'cd'
|
||||||
try
|
try
|
||||||
execute cd a:root
|
execute cd a:root
|
||||||
call s:C.echo(s:run_cmd(cmd))
|
call s:C.echo(s:run_cmd(cmd))
|
||||||
finally
|
finally
|
||||||
execute cd saved_cwd
|
execute cd saved_cwd
|
||||||
endtry
|
endtry
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
function! crystal_lang#run_all_spec(...) abort
|
function! crystal_lang#run_all_spec(...) abort
|
||||||
let path = a:0 == 0 ? expand('%:p:h') : a:1
|
let path = a:0 == 0 ? expand('%:p:h') : a:1
|
||||||
let root_path = s:find_root_by_spec_and_src(path)
|
let root_path = s:find_root_by_spec_and_src(path)
|
||||||
if root_path ==# ''
|
if root_path ==# ''
|
||||||
return s:echo_error("'spec' directory is not found")
|
return s:echo_error("'spec' directory is not found")
|
||||||
endif
|
endif
|
||||||
call s:run_spec(root_path, 'spec')
|
call s:run_spec(root_path, 'spec')
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
function! crystal_lang#run_current_spec(...) abort
|
function! crystal_lang#run_current_spec(...) abort
|
||||||
" /foo/bar/src/poyo.cr
|
" /foo/bar/src/poyo.cr
|
||||||
let path = a:0 == 0 ? expand('%:p') : fnamemodify(a:1, ':p')
|
let path = a:0 == 0 ? expand('%:p') : fnamemodify(a:1, ':p')
|
||||||
if path !~# '.cr$'
|
if path !~# '.cr$'
|
||||||
return s:echo_error('Not crystal source file: ' . path)
|
return s:echo_error('Not crystal source file: ' . path)
|
||||||
endif
|
endif
|
||||||
|
|
||||||
" /foo/bar/src
|
" /foo/bar/src
|
||||||
let source_dir = fnamemodify(path, ':h')
|
let source_dir = fnamemodify(path, ':h')
|
||||||
|
|
||||||
" /foo/bar
|
" /foo/bar
|
||||||
let root_dir = s:find_root_by_spec_and_src(source_dir)
|
let root_dir = s:find_root_by_spec_and_src(source_dir)
|
||||||
if root_dir ==# ''
|
if root_dir ==# ''
|
||||||
return s:echo_error("Root directory with 'src/' and 'spec/' not found")
|
return s:echo_error("Root directory with 'src/' and 'spec/' not found")
|
||||||
endif
|
endif
|
||||||
|
|
||||||
" src
|
" src
|
||||||
let rel_path = source_dir[strlen(root_dir)+1 : ]
|
let rel_path = source_dir[strlen(root_dir)+1 : ]
|
||||||
|
|
||||||
if path =~# '_spec.cr$'
|
if path =~# '_spec.cr$'
|
||||||
call s:run_spec(root_dir, path[strlen(root_dir)+1 : ], line('.'))
|
call s:run_spec(root_dir, path[strlen(root_dir)+1 : ], line('.'))
|
||||||
else
|
else
|
||||||
let spec_path = substitute(rel_path, '^src', 'spec', '') . '/' . fnamemodify(path, ':t:r') . '_spec.cr'
|
let spec_path = substitute(rel_path, '^src', 'spec', '') . '/' . fnamemodify(path, ':t:r') . '_spec.cr'
|
||||||
if !filereadable(root_dir . '/' . spec_path)
|
if !filereadable(root_dir . '/' . spec_path)
|
||||||
return s:echo_error('Error: Could not find a spec source corresponding to ' . path)
|
return s:echo_error('Error: Could not find a spec source corresponding to ' . path)
|
||||||
endif
|
|
||||||
call s:run_spec(root_dir, spec_path)
|
|
||||||
endif
|
endif
|
||||||
|
call s:run_spec(root_dir, spec_path)
|
||||||
|
endif
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
function! crystal_lang#format_string(code, ...) abort
|
function! crystal_lang#format_string(code, ...) abort
|
||||||
let cmd = printf(
|
if s:IS_WINDOWS
|
||||||
\ '%s tool format --no-color %s -',
|
let redirect = '2> nul'
|
||||||
\ g:crystal_compiler_command,
|
else
|
||||||
\ get(a:, 1, '')
|
let redirect = '2>/dev/null'
|
||||||
\ )
|
endif
|
||||||
let output = s:P.system(cmd, a:code)
|
let cmd = printf(
|
||||||
if s:P.get_last_status()
|
\ '%s tool format --no-color %s - %s',
|
||||||
throw 'vim-crystal: Error on formatting: ' . output
|
\ g:crystal_compiler_command,
|
||||||
endif
|
\ get(a:, 1, ''),
|
||||||
return output
|
\ redirect,
|
||||||
|
\ )
|
||||||
|
let output = s:P.system(cmd, a:code)
|
||||||
|
if s:P.get_last_status()
|
||||||
|
throw 'vim-crystal: Error on formatting with command: ' . cmd
|
||||||
|
endif
|
||||||
|
return output
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
" crystal_lang#format(option_str [, on_save])
|
" crystal_lang#format(option_str [, on_save])
|
||||||
function! crystal_lang#format(option_str, ...) abort
|
function! crystal_lang#format(option_str, ...) abort
|
||||||
if !executable(g:crystal_compiler_command)
|
let on_save = a:0 > 0 ? a:1 : 0
|
||||||
" Finish command silently
|
|
||||||
return
|
if !executable(g:crystal_compiler_command)
|
||||||
|
if on_save
|
||||||
|
" Finish command silently on save
|
||||||
|
return
|
||||||
|
else
|
||||||
|
throw 'vim-crystal: Command for formatting is not executable: ' . g:crystal_compiler_command
|
||||||
endif
|
endif
|
||||||
|
endif
|
||||||
|
|
||||||
let on_save = a:0 > 0 ? a:1 : 0
|
let before = join(getline(1, '$'), "\n")
|
||||||
|
try
|
||||||
let before = join(getline(1, '$'), "\n")
|
|
||||||
let formatted = crystal_lang#format_string(before, a:option_str)
|
let formatted = crystal_lang#format_string(before, a:option_str)
|
||||||
if !on_save
|
catch /^vim-crystal: /
|
||||||
let after = substitute(formatted, '\n$', '', '')
|
echohl ErrorMsg
|
||||||
if before ==# after
|
echomsg v:exception . ': Your code was not formatted. Exception was thrown at ' . v:throwpoint
|
||||||
return
|
echohl None
|
||||||
endif
|
return
|
||||||
endif
|
endtry
|
||||||
|
|
||||||
let view_save = winsaveview()
|
if !on_save
|
||||||
let pos_save = getpos('.')
|
let after = substitute(formatted, '\n$', '', '')
|
||||||
let lines = split(formatted, '\n')
|
if before ==# after
|
||||||
silent! undojoin
|
return
|
||||||
if line('$') > len(lines)
|
|
||||||
execute len(lines) . ',$delete' '_'
|
|
||||||
endif
|
endif
|
||||||
call setline(1, lines)
|
endif
|
||||||
call winrestview(view_save)
|
|
||||||
call setpos('.', pos_save)
|
let view_save = winsaveview()
|
||||||
|
let pos_save = getpos('.')
|
||||||
|
let lines = split(formatted, '\n')
|
||||||
|
silent! undojoin
|
||||||
|
if line('$') > len(lines)
|
||||||
|
execute len(lines) . ',$delete' '_'
|
||||||
|
endif
|
||||||
|
call setline(1, lines)
|
||||||
|
call winrestview(view_save)
|
||||||
|
call setpos('.', pos_save)
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
function! crystal_lang#expand(file, pos, ...) abort
|
function! crystal_lang#expand(file, pos, ...) abort
|
||||||
return crystal_lang#tool('expand', a:file, a:pos, get(a:, 1, ''))
|
return crystal_lang#tool('expand', a:file, a:pos, get(a:, 1, ''))
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
let &cpo = s:save_cpo
|
" vim: sw=2 sts=2 et:
|
||||||
unlet s:save_cpo
|
|
||||||
|
|
||||||
endif
|
endif
|
||||||
|
|||||||
@@ -69,6 +69,10 @@ fu! csv#Init(start, end, ...) "{{{3
|
|||||||
else
|
else
|
||||||
let b:csv_cmt = split(g:csv_comment, '%s')
|
let b:csv_cmt = split(g:csv_comment, '%s')
|
||||||
endif
|
endif
|
||||||
|
" Make sure it is a list with 2 chars
|
||||||
|
if b:csv_cmt == []
|
||||||
|
let b:csv_cmt = ["", ""]
|
||||||
|
endif
|
||||||
|
|
||||||
if empty(b:delimiter) && !exists("b:csv_fixed_width")
|
if empty(b:delimiter) && !exists("b:csv_fixed_width")
|
||||||
call csv#Warn("No delimiter found. See :h csv-delimiter to set it manually!")
|
call csv#Warn("No delimiter found. See :h csv-delimiter to set it manually!")
|
||||||
@@ -122,7 +126,7 @@ fu! csv#Init(start, end, ...) "{{{3
|
|||||||
" Enable vartabs for tab delimited files
|
" Enable vartabs for tab delimited files
|
||||||
if b:delimiter=="\t" && has("vartabs")&& !exists("b:csv_fixed_width_cols")
|
if b:delimiter=="\t" && has("vartabs")&& !exists("b:csv_fixed_width_cols")
|
||||||
if get(b:, 'col_width', []) ==# []
|
if get(b:, 'col_width', []) ==# []
|
||||||
call csv#CalculateColumnWidth('')
|
call csv#CalculateColumnWidth(line('$'), 1)
|
||||||
endif
|
endif
|
||||||
let &l:vts=join(b:col_width, ',')
|
let &l:vts=join(b:col_width, ',')
|
||||||
let g:csv_no_conceal=1
|
let g:csv_no_conceal=1
|
||||||
@@ -263,7 +267,7 @@ fu! csv#GetPat(colnr, maxcolnr, pat, allowmore) "{{{3
|
|||||||
" Allow space in front of the pattern, so that it works correctly
|
" Allow space in front of the pattern, so that it works correctly
|
||||||
" even if :Arrange Col has been used #100
|
" even if :Arrange Col has been used #100
|
||||||
return '^' . csv#GetColPat(a:colnr - 1,0) .
|
return '^' . csv#GetColPat(a:colnr - 1,0) .
|
||||||
\ '\s*\zs' . a:pat . '\ze' . (a:allowmore ? '' : '$')
|
\ '.*\zs' . a:pat . '\ze' . (a:allowmore ? '' : '$')
|
||||||
else
|
else
|
||||||
return '\%' . b:csv_fixed_width_cols[-1] .
|
return '\%' . b:csv_fixed_width_cols[-1] .
|
||||||
\ 'c\zs' . a:pat . '\ze' . (a:allowmore ? '' : '$')
|
\ 'c\zs' . a:pat . '\ze' . (a:allowmore ? '' : '$')
|
||||||
@@ -500,7 +504,7 @@ fu! csv#WColumn(...) "{{{3
|
|||||||
" Return on which column the cursor is
|
" Return on which column the cursor is
|
||||||
let _cur = getpos('.')
|
let _cur = getpos('.')
|
||||||
if !exists("b:csv_fixed_width_cols")
|
if !exists("b:csv_fixed_width_cols")
|
||||||
if line('.') > 1 && mode('') != 'n'
|
if line('.') > 1 && mode('') != 'n' && empty(getline('.')[0:col('.')-1])
|
||||||
" in insert mode, get line from above, just in case the current
|
" in insert mode, get line from above, just in case the current
|
||||||
" line is empty
|
" line is empty
|
||||||
let line = getline(line('.')-1)
|
let line = getline(line('.')-1)
|
||||||
@@ -574,7 +578,7 @@ fu! csv#MaxColumns(...) "{{{3
|
|||||||
return len(b:csv_fixed_width_cols)
|
return len(b:csv_fixed_width_cols)
|
||||||
endif
|
endif
|
||||||
endfu
|
endfu
|
||||||
fu! csv#ColWidth(colnr, ...) "{{{3
|
fu! csv#ColWidth(colnr, row, silent) "{{{3
|
||||||
" if a:1 is given, specifies the row, for which to calculate the width
|
" if a:1 is given, specifies the row, for which to calculate the width
|
||||||
"
|
"
|
||||||
" Return the width of a column
|
" Return the width of a column
|
||||||
@@ -586,14 +590,13 @@ fu! csv#ColWidth(colnr, ...) "{{{3
|
|||||||
if !exists("b:csv_fixed_width_cols")
|
if !exists("b:csv_fixed_width_cols")
|
||||||
if !exists("b:csv_list")
|
if !exists("b:csv_list")
|
||||||
" only check first 10000 lines, to be faster
|
" only check first 10000 lines, to be faster
|
||||||
let last = line('$')
|
let last = a:row
|
||||||
if exists("a:1") && !empty(a:1)
|
|
||||||
let last = a:1
|
|
||||||
endif
|
|
||||||
if !get(b:, 'csv_arrange_use_all_rows', 0)
|
if !get(b:, 'csv_arrange_use_all_rows', 0)
|
||||||
if last > 10000
|
if last > 10000
|
||||||
let last = 10000
|
let last = 10000
|
||||||
call csv#Warn('File too large, only checking the first 10000 rows for the width')
|
if !a:silent
|
||||||
|
call csv#Warn('File too large, only checking the first 10000 rows for the width')
|
||||||
|
endif
|
||||||
endif
|
endif
|
||||||
endif
|
endif
|
||||||
let b:csv_list=getline(skipfirst+1,last)
|
let b:csv_list=getline(skipfirst+1,last)
|
||||||
@@ -636,8 +639,12 @@ fu! csv#ArrangeCol(first, last, bang, limit, ...) range "{{{3
|
|||||||
return
|
return
|
||||||
endif
|
endif
|
||||||
let cur=winsaveview()
|
let cur=winsaveview()
|
||||||
|
" be sure, that b:col_width is actually valid
|
||||||
|
if exists("b:col_width") && eval(join(b:col_width, '+')) == 0
|
||||||
|
unlet! b:col_width
|
||||||
|
endif
|
||||||
" Force recalculation of Column width
|
" Force recalculation of Column width
|
||||||
let row = exists("a:1") ? a:1 : ''
|
let row = exists("a:1") && !empty(a:1) ? a:1 : line('$')
|
||||||
if a:bang || !empty(row)
|
if a:bang || !empty(row)
|
||||||
if a:bang && exists("b:col_width")
|
if a:bang && exists("b:col_width")
|
||||||
" Unarrange, so that if csv_arrange_align has changed
|
" Unarrange, so that if csv_arrange_align has changed
|
||||||
@@ -671,7 +678,7 @@ fu! csv#ArrangeCol(first, last, bang, limit, ...) range "{{{3
|
|||||||
endif
|
endif
|
||||||
|
|
||||||
if !exists("b:col_width")
|
if !exists("b:col_width")
|
||||||
call csv#CalculateColumnWidth(row)
|
call csv#CalculateColumnWidth(row, 1)
|
||||||
endif
|
endif
|
||||||
|
|
||||||
" abort on empty file
|
" abort on empty file
|
||||||
@@ -750,11 +757,15 @@ fu! csv#UnArrangeCol(match) "{{{3
|
|||||||
" Strip leading white space, also trims empty recordcsv#
|
" Strip leading white space, also trims empty recordcsv#
|
||||||
return substitute(a:match, '\%(^ \+\)\|\%( \+\ze'.b:delimiter. '\?$\)', '', 'g')
|
return substitute(a:match, '\%(^ \+\)\|\%( \+\ze'.b:delimiter. '\?$\)', '', 'g')
|
||||||
endfu
|
endfu
|
||||||
fu! csv#CalculateColumnWidth(row) "{{{3
|
fu! csv#CalculateColumnWidth(row, silent) "{{{3
|
||||||
" Internal function, not called from external,
|
" Internal function, not called from external,
|
||||||
" does not work with fixed width columns
|
" does not work with fixed width columns
|
||||||
" row for the row for which to calculate the width
|
" row for the row for which to calculate the width
|
||||||
let b:col_width=[]
|
let b:col_width=[]
|
||||||
|
if has( 'vartabs' ) && b:delimiter == "\t"
|
||||||
|
let vts_save=&vts
|
||||||
|
set vts=
|
||||||
|
endif
|
||||||
try
|
try
|
||||||
if exists("b:csv_headerline")
|
if exists("b:csv_headerline")
|
||||||
if line('.') < b:csv_headerline
|
if line('.') < b:csv_headerline
|
||||||
@@ -763,7 +774,7 @@ fu! csv#CalculateColumnWidth(row) "{{{3
|
|||||||
endif
|
endif
|
||||||
let s:max_cols=csv#MaxColumns(line('.'))
|
let s:max_cols=csv#MaxColumns(line('.'))
|
||||||
for i in range(1,s:max_cols)
|
for i in range(1,s:max_cols)
|
||||||
call add(b:col_width, csv#ColWidth(i, a:row))
|
call add(b:col_width, csv#ColWidth(i, a:row, a:silent))
|
||||||
endfor
|
endfor
|
||||||
catch /csv:no_col/
|
catch /csv:no_col/
|
||||||
call csv#Warn("Error: getting Column numbers, aborting!")
|
call csv#Warn("Error: getting Column numbers, aborting!")
|
||||||
@@ -773,6 +784,9 @@ fu! csv#CalculateColumnWidth(row) "{{{3
|
|||||||
" delete buffer content in variable b:csv_list,
|
" delete buffer content in variable b:csv_list,
|
||||||
" this was only necessary for calculating the max width
|
" this was only necessary for calculating the max width
|
||||||
unlet! b:csv_list s:columnize_count s:decimal_column
|
unlet! b:csv_list s:columnize_count s:decimal_column
|
||||||
|
if has( 'vartabs' ) && b:delimiter == "\t"
|
||||||
|
let &vts=vts_save
|
||||||
|
endif
|
||||||
endfu
|
endfu
|
||||||
fu! csv#Columnize(field) "{{{3
|
fu! csv#Columnize(field) "{{{3
|
||||||
" Internal function, not called from external,
|
" Internal function, not called from external,
|
||||||
@@ -1053,7 +1067,7 @@ fu! csv#MoveCol(forward, line, ...) "{{{3
|
|||||||
let maxcol=csv#MaxColumns(line('.'))
|
let maxcol=csv#MaxColumns(line('.'))
|
||||||
let cpos=getpos('.')[2]
|
let cpos=getpos('.')[2]
|
||||||
if !exists("b:csv_fixed_width_cols")
|
if !exists("b:csv_fixed_width_cols")
|
||||||
let curwidth=CSVWidth()
|
let curwidth=CSVWidth(1)
|
||||||
call search(b:col, 'bc', line('.'))
|
call search(b:col, 'bc', line('.'))
|
||||||
endif
|
endif
|
||||||
let spos=getpos('.')[2]
|
let spos=getpos('.')[2]
|
||||||
@@ -1146,7 +1160,7 @@ fu! csv#MoveCol(forward, line, ...) "{{{3
|
|||||||
" leave the column (if the next column is shorter)
|
" leave the column (if the next column is shorter)
|
||||||
if !exists("b:csv_fixed_width_cols")
|
if !exists("b:csv_fixed_width_cols")
|
||||||
let a = getpos('.')
|
let a = getpos('.')
|
||||||
if CSVWidth() == curwidth
|
if CSVWidth(1) == curwidth
|
||||||
let a[2]+= cpos-spos
|
let a[2]+= cpos-spos
|
||||||
endif
|
endif
|
||||||
else
|
else
|
||||||
@@ -1159,7 +1173,7 @@ fu! csv#MoveCol(forward, line, ...) "{{{3
|
|||||||
" Move to the correct screen column
|
" Move to the correct screen column
|
||||||
if !exists("b:csv_fixed_width_cols")
|
if !exists("b:csv_fixed_width_cols")
|
||||||
let a = getpos('.')
|
let a = getpos('.')
|
||||||
if CSVWidth() == curwidth
|
if CSVWidth(1) == curwidth
|
||||||
let a[2]+= cpos-spos
|
let a[2]+= cpos-spos
|
||||||
endif
|
endif
|
||||||
else
|
else
|
||||||
@@ -1493,10 +1507,10 @@ fu! csv#AvgColumn(list) "{{{3
|
|||||||
endfor
|
endfor
|
||||||
if has("float")
|
if has("float")
|
||||||
let b:csv_result = printf("%.2f", sum/cnt)
|
let b:csv_result = printf("%.2f", sum/cnt)
|
||||||
return b:csv_result
|
return str2float(b:csv_result)
|
||||||
else
|
else
|
||||||
let b:csv_result = printf("%s", sum/cnt)
|
let b:csv_result = printf("%s", sum/cnt)
|
||||||
return sum/cnt
|
return b:csv_result + 0
|
||||||
endif
|
endif
|
||||||
endif
|
endif
|
||||||
endfu
|
endfu
|
||||||
@@ -1529,7 +1543,7 @@ fu! csv#VarianceColumn(list, is_population) "{{{3
|
|||||||
let cnt = cnt-1
|
let cnt = cnt-1
|
||||||
endif
|
endif
|
||||||
if has("float")
|
if has("float")
|
||||||
let b:csv_result = printf("%.2f", sum/cnt)
|
let b:csv_result = printf("%." . get(b:, 'csv_accuracy', get(g:, 'csv_accuracy', 2)) . "f", sum/cnt)
|
||||||
return b:csv_result
|
return b:csv_result
|
||||||
else
|
else
|
||||||
let b:csv_result = printf("%s", sum/cnt)
|
let b:csv_result = printf("%s", sum/cnt)
|
||||||
@@ -1835,7 +1849,7 @@ fu! csv#ProcessFieldValue(field) "{{{3
|
|||||||
|
|
||||||
if a == b:delimiter
|
if a == b:delimiter
|
||||||
try
|
try
|
||||||
let a=repeat(' ', csv#ColWidth(col))
|
let a=repeat(' ', csv#ColWidth(col, line('$'), 1))
|
||||||
catch
|
catch
|
||||||
" no-op
|
" no-op
|
||||||
endtry
|
endtry
|
||||||
@@ -1942,8 +1956,12 @@ fu! csv#CheckHeaderLine() "{{{3
|
|||||||
endfu
|
endfu
|
||||||
fu! csv#AnalyzeColumn(...) "{{{3
|
fu! csv#AnalyzeColumn(...) "{{{3
|
||||||
let maxcolnr = csv#MaxColumns()
|
let maxcolnr = csv#MaxColumns()
|
||||||
if len(a:000) == 1
|
let topn = 5
|
||||||
|
if len(a:000) > 0
|
||||||
let colnr = a:1
|
let colnr = a:1
|
||||||
|
if len(a:000) == 2
|
||||||
|
let topn = a:2
|
||||||
|
endif
|
||||||
else
|
else
|
||||||
let colnr = csv#WColumn()
|
let colnr = csv#WColumn()
|
||||||
endif
|
endif
|
||||||
@@ -1971,8 +1989,8 @@ fu! csv#AnalyzeColumn(...) "{{{3
|
|||||||
let max_items = reverse(sort(values(res), s:csv_numeric_sort ? 'n' : 'csv#CSVSortValues'))
|
let max_items = reverse(sort(values(res), s:csv_numeric_sort ? 'n' : 'csv#CSVSortValues'))
|
||||||
" What about the minimum 5 items?
|
" What about the minimum 5 items?
|
||||||
let count_items = keys(res)
|
let count_items = keys(res)
|
||||||
if len(max_items) > 5
|
if len(max_items) > topn
|
||||||
call remove(max_items, 5, -1)
|
call remove(max_items, topn, -1)
|
||||||
call map(max_items, 'printf(''\V%s\m'', escape(v:val, ''\\''))')
|
call map(max_items, 'printf(''\V%s\m'', escape(v:val, ''\\''))')
|
||||||
call filter(res, 'v:val =~ ''^''.join(max_items, ''\|'').''$''')
|
call filter(res, 'v:val =~ ''^''.join(max_items, ''\|'').''$''')
|
||||||
endif
|
endif
|
||||||
@@ -2134,7 +2152,7 @@ fu! csv#NewRecord(line1, line2, count) "{{{3
|
|||||||
if !exists("b:col_width")
|
if !exists("b:col_width")
|
||||||
" Best guess width
|
" Best guess width
|
||||||
if exists("b:csv_fixed_width_cols")
|
if exists("b:csv_fixed_width_cols")
|
||||||
let record .= printf("%*s", csv#ColWidth(item),
|
let record .= printf("%*s", csv#ColWidth(item, line('$'), 1),
|
||||||
\ b:delimiter)
|
\ b:delimiter)
|
||||||
else
|
else
|
||||||
let record .= printf("%20s", b:delimiter)
|
let record .= printf("%20s", b:delimiter)
|
||||||
@@ -2249,7 +2267,7 @@ fu! csv#CommandDefinitions() "{{{3
|
|||||||
\ ':echo csv#EvalColumn(<q-args>, "csv#SmplStdDevColumn", <line1>,<line2>)',
|
\ ':echo csv#EvalColumn(<q-args>, "csv#SmplStdDevColumn", <line1>,<line2>)',
|
||||||
\ '-nargs=? -range=% -complete=custom,csv#SortComplete')
|
\ '-nargs=? -range=% -complete=custom,csv#SortComplete')
|
||||||
call csv#LocalCmd("PopStdCol",
|
call csv#LocalCmd("PopStdCol",
|
||||||
\ ':echo csv#EvalColumn(<q-args>, "csv#SmplStdDevColumn", <line1>,<line2>)',
|
\ ':echo csv#EvalColumn(<q-args>, "csv#PopStdDevColumn", <line1>,<line2>)',
|
||||||
\ '-nargs=? -range=% -complete=custom,csv#SortComplete')
|
\ '-nargs=? -range=% -complete=custom,csv#SortComplete')
|
||||||
call csv#LocalCmd("UnArrangeColumn",
|
call csv#LocalCmd("UnArrangeColumn",
|
||||||
\':call csv#PrepUnArrangeCol(<line1>, <line2>)',
|
\':call csv#PrepUnArrangeCol(<line1>, <line2>)',
|
||||||
@@ -2297,8 +2315,8 @@ fu! csv#CommandDefinitions() "{{{3
|
|||||||
\ '-bang -nargs=? -range=%')
|
\ '-bang -nargs=? -range=%')
|
||||||
call csv#LocalCmd("Filters", ':call csv#OutputFilters(<bang>0)',
|
call csv#LocalCmd("Filters", ':call csv#OutputFilters(<bang>0)',
|
||||||
\ '-nargs=0 -bang')
|
\ '-nargs=0 -bang')
|
||||||
call csv#LocalCmd("Analyze", ':call csv#AnalyzeColumn(<args>)',
|
call csv#LocalCmd("Analyze", ':call csv#AnalyzeColumn(<f-args>)',
|
||||||
\ '-nargs=?')
|
\ '-nargs=*' )
|
||||||
call csv#LocalCmd("VertFold", ':call csv#Vertfold(<bang>0,<q-args>)',
|
call csv#LocalCmd("VertFold", ':call csv#Vertfold(<bang>0,<q-args>)',
|
||||||
\ '-bang -nargs=? -range=% -complete=custom,csv#SortComplete')
|
\ '-bang -nargs=? -range=% -complete=custom,csv#SortComplete')
|
||||||
call csv#LocalCmd("CSVFixed", ':call csv#InitCSVFixedWidth()', '')
|
call csv#LocalCmd("CSVFixed", ':call csv#InitCSVFixedWidth()', '')
|
||||||
@@ -2332,7 +2350,7 @@ fu! csv#ColumnWidth()
|
|||||||
endfu
|
endfu
|
||||||
|
|
||||||
fu! csv#Map(map, name, definition, ...) "{{{3
|
fu! csv#Map(map, name, definition, ...) "{{{3
|
||||||
let keyname = substitute(a:name, '[<>]', '', 'g')
|
let keyname = substitute(substitute(a:name, '[<>]', '', 'g'), '-', '_', 'g')
|
||||||
let expr = (exists("a:1") && a:1 == 'expr' ? '<expr>' : '')
|
let expr = (exists("a:1") && a:1 == 'expr' ? '<expr>' : '')
|
||||||
if !get(g:, "csv_nomap_". tolower(keyname), 0)
|
if !get(g:, "csv_nomap_". tolower(keyname), 0)
|
||||||
" All mappings are buffer local
|
" All mappings are buffer local
|
||||||
@@ -3145,7 +3163,9 @@ fu! CSVCount(col, fmt, first, last, ...) "{{{3
|
|||||||
unlet! s:additional['distinct']
|
unlet! s:additional['distinct']
|
||||||
return (empty(result) ? 0 : result)
|
return (empty(result) ? 0 : result)
|
||||||
endfu
|
endfu
|
||||||
fu! CSVWidth() "{{{3
|
fu! CSVWidth(...) "{{{3
|
||||||
|
" do not output any warning
|
||||||
|
let silent = get(a:000, 0, 1)
|
||||||
" does not work with fixed width columns
|
" does not work with fixed width columns
|
||||||
if exists("b:csv_fixed_width_cols")
|
if exists("b:csv_fixed_width_cols")
|
||||||
let c = getline(1,'$')
|
let c = getline(1,'$')
|
||||||
@@ -3164,7 +3184,7 @@ fu! CSVWidth() "{{{3
|
|||||||
" Add width for last column
|
" Add width for last column
|
||||||
call add(width, max-y+1)
|
call add(width, max-y+1)
|
||||||
else
|
else
|
||||||
call csv#CalculateColumnWidth('')
|
call csv#CalculateColumnWidth(line('$'), silent)
|
||||||
let width=map(copy(b:col_width), 'v:val-1')
|
let width=map(copy(b:col_width), 'v:val-1')
|
||||||
endif
|
endif
|
||||||
return width
|
return width
|
||||||
|
|||||||
@@ -27,12 +27,16 @@ function! s:clearQfList(reason) abort
|
|||||||
endif
|
endif
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
function! dart#fmt(q_args) abort
|
function! dart#fmt(...) abort
|
||||||
let cmd = s:FindDartFmt()
|
let l:dartfmt = s:FindDartFmt()
|
||||||
if type(cmd) != type('') | return | endif
|
if type(l:dartfmt) != type('') | return | endif
|
||||||
let buffer_content = getline(1, '$')
|
let buffer_content = getline(1, '$')
|
||||||
let args = '--stdin-name '.expand('%').' '.a:q_args
|
let l:cmd = [l:dartfmt, '--stdin-name', shellescape(expand('%'))]
|
||||||
let lines = systemlist(printf('%s %s', cmd, args), join(buffer_content, "\n"))
|
if exists('g:dartfmt_options')
|
||||||
|
call extend(l:cmd, g:dartfmt_options)
|
||||||
|
endif
|
||||||
|
call extend(l:cmd, a:000)
|
||||||
|
let lines = systemlist(join(l:cmd), join(buffer_content, "\n"))
|
||||||
" TODO(https://github.com/dart-lang/sdk/issues/38507) - Remove once the
|
" TODO(https://github.com/dart-lang/sdk/issues/38507) - Remove once the
|
||||||
" tool no longer emits this line on SDK upgrades.
|
" tool no longer emits this line on SDK upgrades.
|
||||||
if lines[-1] ==# 'Isolate creation failed'
|
if lines[-1] ==# 'Isolate creation failed'
|
||||||
@@ -86,7 +90,7 @@ endfunction
|
|||||||
" If the path cannot be resolved, or is not a package: uri, returns the
|
" If the path cannot be resolved, or is not a package: uri, returns the
|
||||||
" original.
|
" original.
|
||||||
function! dart#resolveUri(uri) abort
|
function! dart#resolveUri(uri) abort
|
||||||
if a:uri !~ 'package:'
|
if a:uri !~# 'package:'
|
||||||
return a:uri
|
return a:uri
|
||||||
endif
|
endif
|
||||||
let package_name = substitute(a:uri, 'package:\(\w\+\)\/.*', '\1', '')
|
let package_name = substitute(a:uri, 'package:\(\w\+\)\/.*', '\1', '')
|
||||||
@@ -118,20 +122,20 @@ function! s:PackageMap() abort
|
|||||||
let lines = readfile(dot_packages)
|
let lines = readfile(dot_packages)
|
||||||
let map = {}
|
let map = {}
|
||||||
for line in lines
|
for line in lines
|
||||||
if line =~ '\s*#'
|
if line =~# '\s*#'
|
||||||
continue
|
continue
|
||||||
endif
|
endif
|
||||||
let package = substitute(line, ':.*$', '', '')
|
let package = substitute(line, ':.*$', '', '')
|
||||||
let lib_dir = substitute(line, '^[^:]*:', '', '')
|
let lib_dir = substitute(line, '^[^:]*:', '', '')
|
||||||
if lib_dir =~ 'file:/'
|
if lib_dir =~# 'file:/'
|
||||||
let lib_dir = substitute(lib_dir, 'file://', '', '')
|
let lib_dir = substitute(lib_dir, 'file://', '', '')
|
||||||
if lib_dir =~ '/[A-Z]:/'
|
if lib_dir =~# '/[A-Z]:/'
|
||||||
let lib_dir = lib_dir[1:]
|
let lib_dir = lib_dir[1:]
|
||||||
endif
|
endif
|
||||||
else
|
else
|
||||||
let lib_dir = resolve(dot_packages_dir.'/'.lib_dir)
|
let lib_dir = resolve(dot_packages_dir.'/'.lib_dir)
|
||||||
endif
|
endif
|
||||||
if lib_dir =~ '/$'
|
if lib_dir =~# '/$'
|
||||||
let lib_dir = lib_dir[:len(lib_dir) - 2]
|
let lib_dir = lib_dir[:len(lib_dir) - 2]
|
||||||
endif
|
endif
|
||||||
let map[package] = lib_dir
|
let map[package] = lib_dir
|
||||||
@@ -141,7 +145,7 @@ endfunction
|
|||||||
|
|
||||||
" Toggle whether dartfmt is run on save or not.
|
" Toggle whether dartfmt is run on save or not.
|
||||||
function! dart#ToggleFormatOnSave() abort
|
function! dart#ToggleFormatOnSave() abort
|
||||||
if get(g:, "dart_format_on_save", 0)
|
if get(g:, 'dart_format_on_save', 0)
|
||||||
let g:dart_format_on_save = 0
|
let g:dart_format_on_save = 0
|
||||||
return
|
return
|
||||||
endif
|
endif
|
||||||
|
|||||||
36
autoload/ecrystal.vim
Normal file
36
autoload/ecrystal.vim
Normal file
@@ -0,0 +1,36 @@
|
|||||||
|
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'crystal') == -1
|
||||||
|
|
||||||
|
let s:ecrystal_extensions = {
|
||||||
|
\ 'cr': 'crystal',
|
||||||
|
\ 'yml': 'yaml',
|
||||||
|
\ 'js': 'javascript',
|
||||||
|
\ 'txt': 'text',
|
||||||
|
\ 'md': 'markdown'
|
||||||
|
\ }
|
||||||
|
|
||||||
|
if exists('g:ecrystal_extensions')
|
||||||
|
call extend(s:ecrystal_extensions, g:ecrystal_extensions, 'force')
|
||||||
|
endif
|
||||||
|
|
||||||
|
function! ecrystal#SetSubtype() abort
|
||||||
|
if exists('b:ecrystal_subtype')
|
||||||
|
return
|
||||||
|
endif
|
||||||
|
|
||||||
|
let b:ecrystal_subtype = matchstr(substitute(expand('%:t'), '\c\%(\.ecr\)\+$', '', ''), '\.\zs\w\+\%(\ze+\w\+\)\=$')
|
||||||
|
|
||||||
|
let b:ecrystal_subtype = get(s:ecrystal_extensions, b:ecrystal_subtype, b:ecrystal_subtype)
|
||||||
|
|
||||||
|
if b:ecrystal_subtype ==# ''
|
||||||
|
let b:ecrystal_subtype = get(g:, 'ecrystal_default_subtype', 'html')
|
||||||
|
endif
|
||||||
|
|
||||||
|
if b:ecrystal_subtype !=# ''
|
||||||
|
exec 'setlocal filetype=ecrystal.' . b:ecrystal_subtype
|
||||||
|
exec 'setlocal syntax=ecrystal.' . b:ecrystal_subtype
|
||||||
|
endif
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
" vim: sw=2 sts=2 et:
|
||||||
|
|
||||||
|
endif
|
||||||
385
autoload/elm.vim
385
autoload/elm.vim
@@ -1,385 +0,0 @@
|
|||||||
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'elm') == -1
|
|
||||||
|
|
||||||
let s:errors = []
|
|
||||||
|
|
||||||
function! s:elmOracle(...) abort
|
|
||||||
let l:project = finddir('elm-stuff/..', '.;')
|
|
||||||
if len(l:project) == 0
|
|
||||||
echoerr '`elm-stuff` not found! run `elm-package install` for autocomplete.'
|
|
||||||
return []
|
|
||||||
endif
|
|
||||||
|
|
||||||
let l:filename = expand('%:p')
|
|
||||||
|
|
||||||
if a:0 == 0
|
|
||||||
let l:oldiskeyword = &iskeyword
|
|
||||||
" Some non obvious values used in 'iskeyword':
|
|
||||||
" @ = all alpha
|
|
||||||
" 48-57 = numbers 0 to 9
|
|
||||||
" @-@ = character @
|
|
||||||
" 124 = |
|
|
||||||
setlocal iskeyword=@,48-57,@-@,_,-,~,!,#,$,%,&,*,+,=,<,>,/,?,.,\\,124,^
|
|
||||||
let l:word = expand('<cword>')
|
|
||||||
let &iskeyword = l:oldiskeyword
|
|
||||||
else
|
|
||||||
let l:word = a:1
|
|
||||||
endif
|
|
||||||
|
|
||||||
let l:infos = elm#Oracle(l:filename, l:word)
|
|
||||||
if v:shell_error != 0
|
|
||||||
call elm#util#EchoError("elm-oracle failed:\n\n", l:infos)
|
|
||||||
return []
|
|
||||||
endif
|
|
||||||
|
|
||||||
let l:d = split(l:infos, '\n')
|
|
||||||
if len(l:d) > 0
|
|
||||||
return elm#util#DecodeJSON(l:d[0])
|
|
||||||
endif
|
|
||||||
|
|
||||||
return []
|
|
||||||
endf
|
|
||||||
|
|
||||||
" Vim command to format Elm files with elm-format
|
|
||||||
function! elm#Format() abort
|
|
||||||
" check for elm-format
|
|
||||||
if elm#util#CheckBin('elm-format', 'https://github.com/avh4/elm-format') ==# ''
|
|
||||||
return
|
|
||||||
endif
|
|
||||||
|
|
||||||
" save cursor position, folds and many other things
|
|
||||||
let l:curw = {}
|
|
||||||
try
|
|
||||||
mkview!
|
|
||||||
catch
|
|
||||||
let l:curw = winsaveview()
|
|
||||||
endtry
|
|
||||||
|
|
||||||
" save our undo file to be restored after we are done.
|
|
||||||
let l:tmpundofile = tempname()
|
|
||||||
exe 'wundo! ' . l:tmpundofile
|
|
||||||
|
|
||||||
" write current unsaved buffer to a temporary file
|
|
||||||
let l:tmpname = tempname() . '.elm'
|
|
||||||
call writefile(getline(1, '$'), l:tmpname)
|
|
||||||
|
|
||||||
" call elm-format on the temporary file
|
|
||||||
let l:out = system('elm-format ' . l:tmpname . ' --output ' . l:tmpname)
|
|
||||||
|
|
||||||
" if there is no error
|
|
||||||
if v:shell_error == 0
|
|
||||||
try | silent undojoin | catch | endtry
|
|
||||||
|
|
||||||
" replace current file with temp file, then reload buffer
|
|
||||||
let l:old_fileformat = &fileformat
|
|
||||||
call rename(l:tmpname, expand('%'))
|
|
||||||
silent edit!
|
|
||||||
let &fileformat = l:old_fileformat
|
|
||||||
let &syntax = &syntax
|
|
||||||
elseif g:elm_format_fail_silently == 0
|
|
||||||
call elm#util#EchoLater('EchoError', 'elm-format:', l:out)
|
|
||||||
endif
|
|
||||||
|
|
||||||
" save our undo history
|
|
||||||
silent! exe 'rundo ' . l:tmpundofile
|
|
||||||
call delete(l:tmpundofile)
|
|
||||||
|
|
||||||
" restore our cursor/windows positions, folds, etc..
|
|
||||||
if empty(l:curw)
|
|
||||||
silent! loadview
|
|
||||||
else
|
|
||||||
call winrestview(l:curw)
|
|
||||||
endif
|
|
||||||
endf
|
|
||||||
|
|
||||||
" Query elm-oracle and echo the type and docs for the word under the cursor.
|
|
||||||
function! elm#ShowDocs() abort
|
|
||||||
" check for the elm-oracle binary
|
|
||||||
if elm#util#CheckBin('elm-oracle', 'https://github.com/elmcast/elm-oracle') ==# ''
|
|
||||||
return
|
|
||||||
endif
|
|
||||||
|
|
||||||
let l:response = s:elmOracle()
|
|
||||||
|
|
||||||
if len(l:response) > 0
|
|
||||||
let l:info = l:response[0]
|
|
||||||
redraws! | echohl Identifier | echon l:info.fullName | echohl None | echon ' : ' | echohl Function | echon l:info.signature | echohl None | echon "\n\n" . l:info.comment
|
|
||||||
else
|
|
||||||
call elm#util#Echo('elm-oracle:', '...no match found')
|
|
||||||
endif
|
|
||||||
endf
|
|
||||||
|
|
||||||
" Query elm-oracle and open the docs for the word under the cursor.
|
|
||||||
function! elm#BrowseDocs() abort
|
|
||||||
" check for the elm-oracle binary
|
|
||||||
if elm#util#CheckBin('elm-oracle', 'https://github.com/elmcast/elm-oracle') ==# ''
|
|
||||||
return
|
|
||||||
endif
|
|
||||||
|
|
||||||
let l:response = s:elmOracle()
|
|
||||||
|
|
||||||
if len(l:response) > 0
|
|
||||||
let l:info = l:response[0]
|
|
||||||
call elm#util#OpenBrowser(l:info.href)
|
|
||||||
else
|
|
||||||
call elm#util#Echo('elm-oracle:', '...no match found')
|
|
||||||
endif
|
|
||||||
endf
|
|
||||||
|
|
||||||
|
|
||||||
function! elm#Syntastic(input) abort
|
|
||||||
let l:fixes = []
|
|
||||||
|
|
||||||
let l:bin = 'elm-make'
|
|
||||||
let l:format = '--report=json'
|
|
||||||
let l:input = shellescape(a:input)
|
|
||||||
let l:output = '--output=' . shellescape(syntastic#util#DevNull())
|
|
||||||
let l:command = l:bin . ' ' . l:format . ' ' . l:input . ' ' . l:output
|
|
||||||
let l:reports = s:ExecuteInRoot(l:command)
|
|
||||||
|
|
||||||
for l:report in split(l:reports, '\n')
|
|
||||||
if l:report[0] ==# '['
|
|
||||||
for l:error in elm#util#DecodeJSON(l:report)
|
|
||||||
if g:elm_syntastic_show_warnings == 0 && l:error.type ==? 'warning'
|
|
||||||
else
|
|
||||||
if a:input == l:error.file
|
|
||||||
call add(s:errors, l:error)
|
|
||||||
call add(l:fixes, {'filename': l:error.file,
|
|
||||||
\'valid': 1,
|
|
||||||
\'bufnr': bufnr('%'),
|
|
||||||
\'type': (l:error.type ==? 'error') ? 'E' : 'W',
|
|
||||||
\'lnum': l:error.region.start.line,
|
|
||||||
\'col': l:error.region.start.column,
|
|
||||||
\'text': l:error.overview})
|
|
||||||
endif
|
|
||||||
endif
|
|
||||||
endfor
|
|
||||||
endif
|
|
||||||
endfor
|
|
||||||
|
|
||||||
return l:fixes
|
|
||||||
endf
|
|
||||||
|
|
||||||
function! elm#Build(input, output, show_warnings) abort
|
|
||||||
let s:errors = []
|
|
||||||
let l:fixes = []
|
|
||||||
let l:rawlines = []
|
|
||||||
|
|
||||||
let l:bin = 'elm-make'
|
|
||||||
let l:format = '--report=json'
|
|
||||||
let l:input = shellescape(a:input)
|
|
||||||
let l:output = '--output=' . shellescape(a:output)
|
|
||||||
let l:command = l:bin . ' ' . l:format . ' ' . l:input . ' ' . l:output
|
|
||||||
let l:reports = s:ExecuteInRoot(l:command)
|
|
||||||
|
|
||||||
for l:report in split(l:reports, '\n')
|
|
||||||
if l:report[0] ==# '['
|
|
||||||
for l:error in elm#util#DecodeJSON(l:report)
|
|
||||||
if a:show_warnings == 0 && l:error.type ==? 'warning'
|
|
||||||
else
|
|
||||||
call add(s:errors, l:error)
|
|
||||||
call add(l:fixes, {'filename': l:error.file,
|
|
||||||
\'valid': 1,
|
|
||||||
\'type': (l:error.type ==? 'error') ? 'E' : 'W',
|
|
||||||
\'lnum': l:error.region.start.line,
|
|
||||||
\'col': l:error.region.start.column,
|
|
||||||
\'text': l:error.overview})
|
|
||||||
endif
|
|
||||||
endfor
|
|
||||||
else
|
|
||||||
call add(l:rawlines, l:report)
|
|
||||||
endif
|
|
||||||
endfor
|
|
||||||
|
|
||||||
let l:details = join(l:rawlines, "\n")
|
|
||||||
let l:lines = split(l:details, "\n")
|
|
||||||
if !empty(l:lines)
|
|
||||||
let l:overview = l:lines[0]
|
|
||||||
else
|
|
||||||
let l:overview = ''
|
|
||||||
endif
|
|
||||||
|
|
||||||
if l:details ==# '' || l:details =~? '^Successfully.*'
|
|
||||||
else
|
|
||||||
call add(s:errors, {'overview': l:details, 'details': l:details})
|
|
||||||
call add(l:fixes, {'filename': expand('%', 1),
|
|
||||||
\'valid': 1,
|
|
||||||
\'type': 'E',
|
|
||||||
\'lnum': 0,
|
|
||||||
\'col': 0,
|
|
||||||
\'text': l:overview})
|
|
||||||
endif
|
|
||||||
|
|
||||||
return l:fixes
|
|
||||||
endf
|
|
||||||
|
|
||||||
" Make the given file, or the current file if none is given.
|
|
||||||
function! elm#Make(...) abort
|
|
||||||
if elm#util#CheckBin('elm-make', 'http://elm-lang.org/install') ==# ''
|
|
||||||
return
|
|
||||||
endif
|
|
||||||
|
|
||||||
call elm#util#Echo('elm-make:', 'building...')
|
|
||||||
|
|
||||||
let l:input = (a:0 == 0) ? expand('%:p') : a:1
|
|
||||||
let l:fixes = elm#Build(l:input, g:elm_make_output_file, g:elm_make_show_warnings)
|
|
||||||
|
|
||||||
if len(l:fixes) > 0
|
|
||||||
call elm#util#EchoWarning('', 'found ' . len(l:fixes) . ' errors')
|
|
||||||
|
|
||||||
call setqflist(l:fixes, 'r')
|
|
||||||
cwindow
|
|
||||||
|
|
||||||
if get(g:, 'elm_jump_to_error', 1)
|
|
||||||
ll 1
|
|
||||||
endif
|
|
||||||
else
|
|
||||||
call elm#util#EchoSuccess('', 'Sucessfully compiled')
|
|
||||||
|
|
||||||
call setqflist([])
|
|
||||||
cwindow
|
|
||||||
endif
|
|
||||||
endf
|
|
||||||
|
|
||||||
" Show the detail of the current error in the quickfix window.
|
|
||||||
function! elm#ErrorDetail() abort
|
|
||||||
if !empty(filter(tabpagebuflist(), 'getbufvar(v:val, "&buftype") ==? "quickfix"'))
|
|
||||||
exec ':copen'
|
|
||||||
let l:linenr = line('.')
|
|
||||||
exec ':wincmd p'
|
|
||||||
if len(s:errors) > 0
|
|
||||||
let l:detail = s:errors[l:linenr-1].details
|
|
||||||
if l:detail ==# ''
|
|
||||||
let l:detail = s:errors[l:linenr-1].overview
|
|
||||||
endif
|
|
||||||
echo l:detail
|
|
||||||
endif
|
|
||||||
endif
|
|
||||||
endf
|
|
||||||
|
|
||||||
" Open the elm repl in a subprocess.
|
|
||||||
function! elm#Repl() abort
|
|
||||||
" check for the elm-repl binary
|
|
||||||
if elm#util#CheckBin('elm-repl', 'http://elm-lang.org/install') ==# ''
|
|
||||||
return
|
|
||||||
endif
|
|
||||||
|
|
||||||
if has('nvim')
|
|
||||||
term('elm-repl')
|
|
||||||
else
|
|
||||||
!elm-repl
|
|
||||||
endif
|
|
||||||
endf
|
|
||||||
|
|
||||||
function! elm#Oracle(filepath, word) abort
|
|
||||||
let l:bin = 'elm-oracle'
|
|
||||||
let l:filepath = shellescape(a:filepath)
|
|
||||||
let l:word = shellescape(a:word)
|
|
||||||
let l:command = l:bin . ' ' . l:filepath . ' ' . l:word
|
|
||||||
return s:ExecuteInRoot(l:command)
|
|
||||||
endfunction
|
|
||||||
|
|
||||||
let s:fullComplete = ''
|
|
||||||
|
|
||||||
" Complete the current token using elm-oracle
|
|
||||||
function! elm#Complete(findstart, base) abort
|
|
||||||
" a:base is unused, but the callback function for completion expects 2 arguments
|
|
||||||
if a:findstart
|
|
||||||
let l:line = getline('.')
|
|
||||||
|
|
||||||
let l:idx = col('.') - 1
|
|
||||||
let l:start = 0
|
|
||||||
while l:idx > 0 && l:line[l:idx - 1] =~# '[a-zA-Z0-9_\.]'
|
|
||||||
if l:line[l:idx - 1] ==# '.' && l:start == 0
|
|
||||||
let l:start = l:idx
|
|
||||||
endif
|
|
||||||
let l:idx -= 1
|
|
||||||
endwhile
|
|
||||||
|
|
||||||
if l:start == 0
|
|
||||||
let l:start = l:idx
|
|
||||||
endif
|
|
||||||
|
|
||||||
let s:fullComplete = l:line[l:idx : col('.')-2]
|
|
||||||
|
|
||||||
return l:start
|
|
||||||
else
|
|
||||||
" check for the elm-oracle binary
|
|
||||||
if elm#util#CheckBin('elm-oracle', 'https://github.com/elmcast/elm-oracle') ==# ''
|
|
||||||
return []
|
|
||||||
endif
|
|
||||||
|
|
||||||
let l:res = []
|
|
||||||
let l:response = s:elmOracle(s:fullComplete)
|
|
||||||
|
|
||||||
let l:detailed = get(g:, 'elm_detailed_complete', 0)
|
|
||||||
|
|
||||||
for l:r in l:response
|
|
||||||
let l:menu = ''
|
|
||||||
if l:detailed
|
|
||||||
let l:menu = ': ' . l:r.signature
|
|
||||||
endif
|
|
||||||
call add(l:res, {'word': l:r.name, 'menu': l:menu})
|
|
||||||
endfor
|
|
||||||
|
|
||||||
return l:res
|
|
||||||
endif
|
|
||||||
endf
|
|
||||||
|
|
||||||
" If the current buffer contains a consoleRunner, run elm-test with it.
|
|
||||||
" Otherwise run elm-test in the root of your project which deafults to
|
|
||||||
" running 'elm-test tests/TestRunner'.
|
|
||||||
function! elm#Test() abort
|
|
||||||
if elm#util#CheckBin('elm-test', 'https://github.com/rtfeldman/node-elm-test') ==# ''
|
|
||||||
return
|
|
||||||
endif
|
|
||||||
|
|
||||||
if match(getline(1, '$'), 'consoleRunner') < 0
|
|
||||||
let l:out = s:ExecuteInRoot('elm-test')
|
|
||||||
call elm#util#EchoSuccess('elm-test', l:out)
|
|
||||||
else
|
|
||||||
let l:filepath = shellescape(expand('%:p'))
|
|
||||||
let l:out = s:ExecuteInRoot('elm-test ' . l:filepath)
|
|
||||||
call elm#util#EchoSuccess('elm-test', l:out)
|
|
||||||
endif
|
|
||||||
endf
|
|
||||||
|
|
||||||
" Returns the closest parent with an elm-package.json file.
|
|
||||||
function! elm#FindRootDirectory() abort
|
|
||||||
let l:elm_root = getbufvar('%', 'elmRoot')
|
|
||||||
if empty(l:elm_root)
|
|
||||||
let l:current_file = expand('%:p')
|
|
||||||
let l:dir_current_file = fnameescape(fnamemodify(l:current_file, ':h'))
|
|
||||||
let l:old_match = findfile('elm-package.json', l:dir_current_file . ';')
|
|
||||||
let l:new_match = findfile('elm.json', l:dir_current_file . ';')
|
|
||||||
if !empty(l:new_match)
|
|
||||||
let l:elm_root = fnamemodify(l:new_match, ':p:h')
|
|
||||||
elseif !empty(l:old_match)
|
|
||||||
let l:elm_root = fnamemodify(l:old_match, ':p:h')
|
|
||||||
else
|
|
||||||
let l:elm_root = ''
|
|
||||||
endif
|
|
||||||
|
|
||||||
if !empty(l:elm_root)
|
|
||||||
call setbufvar('%', 'elmRoot', l:elm_root)
|
|
||||||
endif
|
|
||||||
endif
|
|
||||||
return l:elm_root
|
|
||||||
endfunction
|
|
||||||
|
|
||||||
" Executes a command in the project directory.
|
|
||||||
function! s:ExecuteInRoot(cmd) abort
|
|
||||||
let l:cd = exists('*haslocaldir') && haslocaldir() ? 'lcd ' : 'cd '
|
|
||||||
let l:current_dir = getcwd()
|
|
||||||
let l:root_dir = elm#FindRootDirectory()
|
|
||||||
|
|
||||||
try
|
|
||||||
execute l:cd . fnameescape(l:root_dir)
|
|
||||||
let l:out = system(a:cmd)
|
|
||||||
finally
|
|
||||||
execute l:cd . fnameescape(l:current_dir)
|
|
||||||
endtry
|
|
||||||
|
|
||||||
return l:out
|
|
||||||
endfunction
|
|
||||||
|
|
||||||
endif
|
|
||||||
@@ -1,184 +0,0 @@
|
|||||||
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'elm') == -1
|
|
||||||
|
|
||||||
" IsWin returns 1 if current OS is Windows or 0 otherwise
|
|
||||||
fun! elm#util#IsWin() abort
|
|
||||||
let l:win = ['win16', 'win32', 'win32unix', 'win64', 'win95']
|
|
||||||
for l:w in l:win
|
|
||||||
if (has(l:w))
|
|
||||||
return 1
|
|
||||||
endif
|
|
||||||
endfor
|
|
||||||
|
|
||||||
return 0
|
|
||||||
endf
|
|
||||||
|
|
||||||
fun! elm#util#CheckBin(bin, url) abort
|
|
||||||
let l:binpath = substitute(a:bin, '^\s*\(.\{-}\)\s*$', '\1', '')
|
|
||||||
|
|
||||||
if executable(l:binpath)
|
|
||||||
return l:binpath
|
|
||||||
endif
|
|
||||||
|
|
||||||
call elm#util#EchoWarning('elm-vim:', 'could not find ' . l:binpath . ' [' . a:url . ']')
|
|
||||||
|
|
||||||
return ''
|
|
||||||
endf
|
|
||||||
|
|
||||||
" Determines the browser command to use
|
|
||||||
fun! s:get_browser_command() abort
|
|
||||||
let l:elm_browser_command = get(g:, 'elm_browser_command', '')
|
|
||||||
if l:elm_browser_command ==? ''
|
|
||||||
if elm#util#IsWin()
|
|
||||||
let l:elm_browser_command = '!start rundll32 url.dll,FileProtocolHandler %URL%'
|
|
||||||
elseif has('mac') || has('macunix') || has('gui_macvim') || system('uname') =~? '^darwin'
|
|
||||||
let l:elm_browser_command = 'open %URL%'
|
|
||||||
elseif executable('xdg-open')
|
|
||||||
let l:elm_browser_command = 'xdg-open %URL%'
|
|
||||||
elseif executable('firefox')
|
|
||||||
let l:elm_browser_command = 'firefox %URL% &'
|
|
||||||
else
|
|
||||||
let l:elm_browser_command = ''
|
|
||||||
endif
|
|
||||||
endif
|
|
||||||
return l:elm_browser_command
|
|
||||||
endf
|
|
||||||
|
|
||||||
" OpenBrowser opens a url in the default browser
|
|
||||||
fun! elm#util#OpenBrowser(url) abort
|
|
||||||
let l:cmd = s:get_browser_command()
|
|
||||||
if len(l:cmd) == 0
|
|
||||||
redraw
|
|
||||||
echohl WarningMsg
|
|
||||||
echo "It seems that you don't have general web browser. Open URL below."
|
|
||||||
echohl None
|
|
||||||
echo a:url
|
|
||||||
return
|
|
||||||
endif
|
|
||||||
if l:cmd =~? '^!'
|
|
||||||
let l:cmd = substitute(l:cmd, '%URL%', '\=shellescape(a:url)', 'g')
|
|
||||||
silent! exec l:cmd
|
|
||||||
elseif l:cmd =~# '^:[A-Z]'
|
|
||||||
let l:cmd = substitute(l:cmd, '%URL%', '\=a:url', 'g')
|
|
||||||
exec l:cmd
|
|
||||||
else
|
|
||||||
let l:cmd = substitute(l:cmd, '%URL%', '\=shellescape(a:url)', 'g')
|
|
||||||
call system(l:cmd)
|
|
||||||
endif
|
|
||||||
endf
|
|
||||||
|
|
||||||
" DecodeJSON decodes a string of json into a viml object
|
|
||||||
fun! elm#util#DecodeJSON(s) abort
|
|
||||||
let l:true = 1
|
|
||||||
let l:false = 0
|
|
||||||
let l:null = 0
|
|
||||||
return eval(a:s)
|
|
||||||
endf
|
|
||||||
|
|
||||||
" Remove ANSI escape characters used for highlighting purposes
|
|
||||||
fun! s:strip_color(msg) abort
|
|
||||||
return substitute(a:msg, '\e\[[0-9;]\+[mK]', '', 'g')
|
|
||||||
endf
|
|
||||||
|
|
||||||
" Print functions
|
|
||||||
fun! elm#util#Echo(title, msg) abort
|
|
||||||
redraws! | echon a:title . ' ' | echohl Identifier | echon s:strip_color(a:msg) | echohl None
|
|
||||||
endf
|
|
||||||
|
|
||||||
fun! elm#util#EchoSuccess(title, msg) abort
|
|
||||||
redraws! | echon a:title . ' ' | echohl Function | echon s:strip_color(a:msg) | echohl None
|
|
||||||
endf
|
|
||||||
|
|
||||||
fun! elm#util#EchoWarning(title, msg) abort
|
|
||||||
redraws! | echon a:title . ' ' | echohl WarningMsg | echon s:strip_color(a:msg) | echohl None
|
|
||||||
endf
|
|
||||||
|
|
||||||
fun! elm#util#EchoError(title, msg) abort
|
|
||||||
redraws! | echon a:title . ' ' | echohl ErrorMsg | echon s:strip_color(a:msg) | echohl None
|
|
||||||
endf
|
|
||||||
|
|
||||||
fun! elm#util#EchoLater(func_name, title, msg) abort
|
|
||||||
let s:echo_func_name = a:func_name
|
|
||||||
let s:echo_title = a:title
|
|
||||||
let s:echo_msg = a:msg
|
|
||||||
endf
|
|
||||||
|
|
||||||
fun! elm#util#EchoStored() abort
|
|
||||||
if exists('s:echo_func_name') && exists('s:echo_title') && exists('s:echo_msg')
|
|
||||||
call elm#util#{s:echo_func_name}(s:echo_title, s:echo_msg)
|
|
||||||
unlet s:echo_func_name
|
|
||||||
unlet s:echo_title
|
|
||||||
unlet s:echo_msg
|
|
||||||
endif
|
|
||||||
endf
|
|
||||||
|
|
||||||
function! elm#util#GoToModule(name)
|
|
||||||
if empty(a:name) | return | endif
|
|
||||||
if empty(matchstr(a:name, '^Native\.'))
|
|
||||||
let l:extension = '.elm'
|
|
||||||
else
|
|
||||||
let l:extension = '.js'
|
|
||||||
endif
|
|
||||||
let l:rel_path = substitute(a:name, '\.', '/', 'g') . l:extension
|
|
||||||
let l:root = elm#FindRootDirectory()
|
|
||||||
|
|
||||||
let l:module_file = s:findLocalModule(l:rel_path, l:root)
|
|
||||||
if !filereadable(l:module_file)
|
|
||||||
let l:module_file = s:findDependencyModule(l:rel_path, l:root)
|
|
||||||
endif
|
|
||||||
|
|
||||||
if filereadable(l:module_file)
|
|
||||||
exec 'edit ' . fnameescape(l:module_file)
|
|
||||||
else
|
|
||||||
return s:error("Can't find module \"" . a:name . "\"")
|
|
||||||
endif
|
|
||||||
endfunction
|
|
||||||
|
|
||||||
function! s:findLocalModule(rel_path, root)
|
|
||||||
let l:old_match = findfile('elm-package.json', a:root . ';')
|
|
||||||
let l:new_match = findfile('elm.json', a:root . ';')
|
|
||||||
if !empty(l:new_match)
|
|
||||||
let l:package_json = l:new_match
|
|
||||||
elseif !empty(l:old_match)
|
|
||||||
let l:package_json = l:old_match
|
|
||||||
endif
|
|
||||||
if exists('*json_decode')
|
|
||||||
let l:package = json_decode(readfile(l:package_json))
|
|
||||||
let l:source_roots = l:package['source-directories']
|
|
||||||
else
|
|
||||||
" This is a fallback for vim's which do not support json_decode.
|
|
||||||
" It simply only looks in the 'src' subdirectory and fails otherwise.
|
|
||||||
let l:source_roots = ['src']
|
|
||||||
end
|
|
||||||
for l:source_root in l:source_roots
|
|
||||||
let l:file_path = a:root . '/' . l:source_root . '/' . a:rel_path
|
|
||||||
if !filereadable(l:file_path)
|
|
||||||
continue
|
|
||||||
endif
|
|
||||||
return l:file_path
|
|
||||||
endfor
|
|
||||||
endfunction
|
|
||||||
|
|
||||||
function! s:findDependencyModule(rel_path, root)
|
|
||||||
" If we are a dependency ourselves, we need to check our siblings.
|
|
||||||
" This is because elm package doesn't install dependencies recursively.
|
|
||||||
let l:root = substitute(a:root, '\/elm-stuff/packages.\+$', '', '')
|
|
||||||
|
|
||||||
" We naively craws the dependencies dir for any fitting module name.
|
|
||||||
" If it exists, we'll find it. If multiple filenames match,
|
|
||||||
" there's a chance we return the wrong one.
|
|
||||||
let l:module_paths = glob(l:root . '/elm-stuff/packages/**/' . a:rel_path, 0, 1)
|
|
||||||
if len(l:module_paths) > 0
|
|
||||||
return l:module_paths[0]
|
|
||||||
endif
|
|
||||||
endfunction
|
|
||||||
|
|
||||||
" Using the built-in :echoerr prints a stacktrace, which isn't that nice.
|
|
||||||
" From: https://github.com/moll/vim-node/blob/master/autoload/node.vim
|
|
||||||
function! s:error(msg)
|
|
||||||
echohl ErrorMsg
|
|
||||||
echomsg a:msg
|
|
||||||
echohl NONE
|
|
||||||
let v:errmsg = a:msg
|
|
||||||
endfunction
|
|
||||||
|
|
||||||
endif
|
|
||||||
@@ -1,25 +1,43 @@
|
|||||||
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'fish') == -1
|
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'fish') == -1
|
||||||
|
|
||||||
function! fish#Indent()
|
function! fish#Indent()
|
||||||
let l:shiftwidth = shiftwidth()
|
|
||||||
let l:prevlnum = prevnonblank(v:lnum - 1)
|
let l:prevlnum = prevnonblank(v:lnum - 1)
|
||||||
if l:prevlnum ==# 0
|
if l:prevlnum ==# 0
|
||||||
return 0
|
return 0
|
||||||
endif
|
endif
|
||||||
let l:indent = 0
|
|
||||||
let l:prevline = getline(l:prevlnum)
|
let l:prevline = getline(l:prevlnum)
|
||||||
if l:prevline =~# '\v^\s*switch>'
|
|
||||||
return indent(l:prevlnum) + l:shiftwidth
|
|
||||||
elseif l:prevline =~# '\v^\s*%(begin|if|else|while|for|function|case)>'
|
|
||||||
let l:indent = l:shiftwidth
|
|
||||||
endif
|
|
||||||
let l:line = getline(v:lnum)
|
let l:line = getline(v:lnum)
|
||||||
if l:line =~# '\v^\s*end>'
|
let l:shiftwidth = shiftwidth()
|
||||||
return indent(l:prevlnum) - (l:indent ==# 0 ? l:shiftwidth : l:indent)
|
let l:previndent = indent(l:prevlnum)
|
||||||
elseif l:line =~# '\v^\s*%(case|else)>'
|
let l:indent = l:previndent
|
||||||
return indent(l:prevlnum) - l:shiftwidth
|
if l:prevline =~# '\v^\s*%(begin|if|else|while|for|function|switch|case)>'
|
||||||
|
let l:indent += l:shiftwidth
|
||||||
endif
|
endif
|
||||||
return indent(l:prevlnum) + l:indent
|
if l:line =~# '\v^\s*end>'
|
||||||
|
let l:indent -= l:shiftwidth
|
||||||
|
" If we're inside a case, dedent twice because it ends the switch.
|
||||||
|
if l:prevline =~# '\v^\s*case>'
|
||||||
|
" Previous line starts the case.
|
||||||
|
let l:indent -= l:shiftwidth
|
||||||
|
else
|
||||||
|
" Scan back to a dedented line to find whether we're in a case.
|
||||||
|
let l:i = l:prevlnum
|
||||||
|
while l:i >= 1 && indent(l:i) >= l:previndent
|
||||||
|
let l:i = prevnonblank(l:i - 1)
|
||||||
|
endwhile
|
||||||
|
if indent(l:i) < l:previndent && getline(l:i) =~# '\v^\s*case>'
|
||||||
|
let l:indent -= l:shiftwidth
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
elseif l:line =~# '\v^\s*else>'
|
||||||
|
let l:indent -= l:shiftwidth
|
||||||
|
elseif l:prevline !~# '\v^\s*switch>' && l:line =~# '\v^\s*case>'
|
||||||
|
let l:indent -= l:shiftwidth
|
||||||
|
endif
|
||||||
|
if l:indent < 0
|
||||||
|
return 0
|
||||||
|
endif
|
||||||
|
return l:indent
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
function! fish#Format()
|
function! fish#Format()
|
||||||
@@ -54,7 +72,7 @@ function! fish#Complete(findstart, base)
|
|||||||
let l:completions =
|
let l:completions =
|
||||||
\ system('fish -c "complete -C'.shellescape(a:base).'"')
|
\ system('fish -c "complete -C'.shellescape(a:base).'"')
|
||||||
let l:cmd = substitute(a:base, '\v\S+$', '', '')
|
let l:cmd = substitute(a:base, '\v\S+$', '', '')
|
||||||
for l:line in split(l:completions, '\n')
|
for l:line in filter(split(l:completions, '\n'), 'len(v:val)')
|
||||||
let l:tokens = split(l:line, '\t')
|
let l:tokens = split(l:line, '\t')
|
||||||
call add(l:results, {'word': l:cmd.l:tokens[0],
|
call add(l:results, {'word': l:cmd.l:tokens[0],
|
||||||
\'abbr': l:tokens[0],
|
\'abbr': l:tokens[0],
|
||||||
|
|||||||
517
autoload/fsharp.vim
Normal file
517
autoload/fsharp.vim
Normal file
@@ -0,0 +1,517 @@
|
|||||||
|
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'fsharp') == -1
|
||||||
|
|
||||||
|
" Vim autoload functions
|
||||||
|
|
||||||
|
if exists('g:loaded_autoload_fsharp')
|
||||||
|
finish
|
||||||
|
endif
|
||||||
|
let g:loaded_autoload_fsharp = 1
|
||||||
|
|
||||||
|
let s:cpo_save = &cpo
|
||||||
|
set cpo&vim
|
||||||
|
|
||||||
|
function! s:prompt(msg)
|
||||||
|
let height = &cmdheight
|
||||||
|
if height < 2
|
||||||
|
set cmdheight=2
|
||||||
|
endif
|
||||||
|
echom a:msg
|
||||||
|
let &cmdheight = height
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! s:PlainNotification(content)
|
||||||
|
return { 'Content': a:content }
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! s:TextDocumentIdentifier(path)
|
||||||
|
let usr_ss_opt = &shellslash
|
||||||
|
set shellslash
|
||||||
|
let uri = fnamemodify(a:path, ":p")
|
||||||
|
if uri[0] == "/"
|
||||||
|
let uri = "file://" . uri
|
||||||
|
else
|
||||||
|
let uri = "file:///" . uri
|
||||||
|
endif
|
||||||
|
let &shellslash = usr_ss_opt
|
||||||
|
return { 'Uri': uri }
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! s:Position(line, character)
|
||||||
|
return { 'Line': a:line, 'Character': a:character }
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! s:TextDocumentPositionParams(documentUri, line, character)
|
||||||
|
return {
|
||||||
|
\ 'TextDocument': s:TextDocumentIdentifier(a:documentUri),
|
||||||
|
\ 'Position': s:Position(a:line, a:character)
|
||||||
|
\ }
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! s:DocumentationForSymbolRequest(xmlSig, assembly)
|
||||||
|
return {
|
||||||
|
\ 'XmlSig': a:xmlSig,
|
||||||
|
\ 'Assembly': a:assembly
|
||||||
|
\ }
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! s:ProjectParms(projectUri)
|
||||||
|
return { 'Project': s:TextDocumentIdentifier(a:projectUri) }
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! s:WorkspacePeekRequest(directory, deep, excludedDirs)
|
||||||
|
return {
|
||||||
|
\ 'Directory': fnamemodify(a:directory, ":p"),
|
||||||
|
\ 'Deep': a:deep,
|
||||||
|
\ 'ExcludedDirs': a:excludedDirs
|
||||||
|
\ }
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! s:WorkspaceLoadParms(files)
|
||||||
|
let prm = []
|
||||||
|
for file in a:files
|
||||||
|
call add(prm, s:TextDocumentIdentifier(file))
|
||||||
|
endfor
|
||||||
|
return { 'TextDocuments': prm }
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! s:FsdnRequest(query)
|
||||||
|
return { 'Query': a:query }
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! s:call(method, params, cont)
|
||||||
|
call LanguageClient#Call(a:method, a:params, a:cont)
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! s:signature(filePath, line, character, cont)
|
||||||
|
return s:call('fsharp/signature', s:TextDocumentPositionParams(a:filePath, a:line, a:character), a:cont)
|
||||||
|
endfunction
|
||||||
|
function! s:signatureData(filePath, line, character, cont)
|
||||||
|
return s:call('fsharp/signatureData', s:TextDocumentPositionParams(a:filePath, a:line, a:character), a:cont)
|
||||||
|
endfunction
|
||||||
|
function! s:lineLens(projectPath, cont)
|
||||||
|
return s:call('fsharp/lineLens', s:ProjectParms(a:projectPath), a:cont)
|
||||||
|
endfunction
|
||||||
|
function! s:compilerLocation(cont)
|
||||||
|
return s:call('fsharp/compilerLocation', {}, a:cont)
|
||||||
|
endfunction
|
||||||
|
function! s:compile(projectPath, cont)
|
||||||
|
return s:call('fsharp/compile', s:ProjectParms(a:projectPath), a:cont)
|
||||||
|
endfunction
|
||||||
|
function! s:workspacePeek(directory, depth, excludedDirs, cont)
|
||||||
|
return s:call('fsharp/workspacePeek', s:WorkspacePeekRequest(a:directory, a:depth, a:excludedDirs), a:cont)
|
||||||
|
endfunction
|
||||||
|
function! s:workspaceLoad(files, cont)
|
||||||
|
return s:call('fsharp/workspaceLoad', s:WorkspaceLoadParms(a:files), a:cont)
|
||||||
|
endfunction
|
||||||
|
function! s:project(projectPath, cont)
|
||||||
|
return s:call('fsharp/project', s:ProjectParms(a:projectPath), a:cont)
|
||||||
|
endfunction
|
||||||
|
function! s:fsdn(signature, cont)
|
||||||
|
return s:call('fsharp/fsdn', s:FsdnRequest(a:signature), a:cont)
|
||||||
|
endfunction
|
||||||
|
function! s:f1Help(filePath, line, character, cont)
|
||||||
|
return s:call('fsharp/f1Help', s:TextDocumentPositionParams(a:filePath, a:line, a:character), a:cont)
|
||||||
|
endfunction
|
||||||
|
function! fsharp#documentation(filePath, line, character, cont)
|
||||||
|
return s:call('fsharp/documentation', s:TextDocumentPositionParams(a:filePath, a:line, a:character), a:cont)
|
||||||
|
endfunction
|
||||||
|
function! s:documentationSymbol(xmlSig, assembly, cont)
|
||||||
|
return s:call('fsharp/documentationSymbol', s:DocumentationForSymbolRequest(a:xmlSig, a:assembly), a:cont)
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
" FSharpConfigDto from https://github.com/fsharp/FsAutoComplete/blob/master/src/FsAutoComplete/LspHelpers.fs
|
||||||
|
"
|
||||||
|
" * The following options seems not working with workspace/didChangeConfiguration
|
||||||
|
" since the initialization has already completed?
|
||||||
|
" 'AutomaticWorkspaceInit',
|
||||||
|
" 'WorkspaceModePeekDeepLevel',
|
||||||
|
"
|
||||||
|
" * Changes made to linter/unused analyzer settings seems not reflected after sending them to FSAC?
|
||||||
|
"
|
||||||
|
let s:config_keys_camel =
|
||||||
|
\ [
|
||||||
|
\ {'key': 'AutomaticWorkspaceInit', 'default': 1},
|
||||||
|
\ {'key': 'WorkspaceModePeekDeepLevel', 'default': 2},
|
||||||
|
\ {'key': 'ExcludeProjectDirectories', 'default': []},
|
||||||
|
\ {'key': 'keywordsAutocomplete', 'default': 1},
|
||||||
|
\ {'key': 'ExternalAutocomplete', 'default': 0},
|
||||||
|
\ {'key': 'Linter', 'default': 1},
|
||||||
|
\ {'key': 'UnionCaseStubGeneration', 'default': 1},
|
||||||
|
\ {'key': 'UnionCaseStubGenerationBody'},
|
||||||
|
\ {'key': 'RecordStubGeneration', 'default': 1},
|
||||||
|
\ {'key': 'RecordStubGenerationBody'},
|
||||||
|
\ {'key': 'InterfaceStubGeneration', 'default': 1},
|
||||||
|
\ {'key': 'InterfaceStubGenerationObjectIdentifier', 'default': 'this'},
|
||||||
|
\ {'key': 'InterfaceStubGenerationMethodBody'},
|
||||||
|
\ {'key': 'UnusedOpensAnalyzer', 'default': 1},
|
||||||
|
\ {'key': 'UnusedDeclarationsAnalyzer', 'default': 1},
|
||||||
|
\ {'key': 'SimplifyNameAnalyzer', 'default': 0},
|
||||||
|
\ {'key': 'ResolveNamespaces', 'default': 1},
|
||||||
|
\ {'key': 'EnableReferenceCodeLens', 'default': 1},
|
||||||
|
\ {'key': 'EnableAnalyzers', 'default': 0},
|
||||||
|
\ {'key': 'AnalyzersPath'},
|
||||||
|
\ {'key': 'DisableInMemoryProjectReferences', 'default': 0},
|
||||||
|
\ {'key': 'LineLens', 'default': {'enabled': 'replaceCodeLens', 'prefix': '//'}},
|
||||||
|
\ {'key': 'UseSdkScripts', 'default': 1},
|
||||||
|
\ {'key': 'dotNetRoot'},
|
||||||
|
\ {'key': 'fsiExtraParameters', 'default': []},
|
||||||
|
\ ]
|
||||||
|
let s:config_keys = []
|
||||||
|
|
||||||
|
function! fsharp#toSnakeCase(str)
|
||||||
|
let sn = substitute(a:str, '\(\<\u\l\+\|\l\+\)\(\u\)', '\l\1_\l\2', 'g')
|
||||||
|
if sn == a:str | return tolower(a:str) | endif
|
||||||
|
return sn
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! s:buildConfigKeys()
|
||||||
|
if len(s:config_keys) == 0
|
||||||
|
for key_camel in s:config_keys_camel
|
||||||
|
let key = {}
|
||||||
|
let key.snake = fsharp#toSnakeCase(key_camel.key)
|
||||||
|
let key.camel = key_camel.key
|
||||||
|
if has_key(key_camel, 'default')
|
||||||
|
let key.default = key_camel.default
|
||||||
|
endif
|
||||||
|
call add(s:config_keys, key)
|
||||||
|
endfor
|
||||||
|
endif
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! g:fsharp#getServerConfig()
|
||||||
|
let fsharp = {}
|
||||||
|
call s:buildConfigKeys()
|
||||||
|
for key in s:config_keys
|
||||||
|
if exists('g:fsharp#' . key.snake)
|
||||||
|
let fsharp[key.camel] = g:fsharp#{key.snake}
|
||||||
|
elseif exists('g:fsharp#' . key.camel)
|
||||||
|
let fsharp[key.camel] = g:fsharp#{key.camel}
|
||||||
|
elseif has_key(key, 'default') && g:fsharp#use_recommended_server_config
|
||||||
|
let g:fsharp#{key.snake} = key.default
|
||||||
|
let fsharp[key.camel] = key.default
|
||||||
|
endif
|
||||||
|
endfor
|
||||||
|
return fsharp
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! g:fsharp#updateServerConfig()
|
||||||
|
let fsharp = fsharp#getServerConfig()
|
||||||
|
let settings = {'settings': {'FSharp': fsharp}}
|
||||||
|
call LanguageClient#Notify('workspace/didChangeConfiguration', settings)
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! s:findWorkspace(dir, cont)
|
||||||
|
let s:cont_findWorkspace = a:cont
|
||||||
|
function! s:callback_findWorkspace(result)
|
||||||
|
let result = a:result
|
||||||
|
let content = json_decode(result.result.content)
|
||||||
|
if len(content.Data.Found) < 1
|
||||||
|
return []
|
||||||
|
endif
|
||||||
|
let workspace = { 'Type': 'none' }
|
||||||
|
for found in content.Data.Found
|
||||||
|
if workspace.Type == 'none'
|
||||||
|
let workspace = found
|
||||||
|
elseif found.Type == 'solution'
|
||||||
|
if workspace.Type == 'project'
|
||||||
|
let workspace = found
|
||||||
|
else
|
||||||
|
let curLen = len(workspace.Data.Items)
|
||||||
|
let newLen = len(found.Data.Items)
|
||||||
|
if newLen > curLen
|
||||||
|
let workspace = found
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
endfor
|
||||||
|
if workspace.Type == 'solution'
|
||||||
|
call s:cont_findWorkspace([workspace.Data.Path])
|
||||||
|
else
|
||||||
|
call s:cont_findWorkspace(workspace.Data.Fsprojs)
|
||||||
|
endif
|
||||||
|
endfunction
|
||||||
|
call s:workspacePeek(a:dir, g:fsharp#workspace_mode_peek_deep_level, g:fsharp#exclude_project_directories, function("s:callback_findWorkspace"))
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
let s:workspace = []
|
||||||
|
|
||||||
|
function! s:load(arg)
|
||||||
|
let s:loading_workspace = a:arg
|
||||||
|
function! s:callback_load(_)
|
||||||
|
echo "[FSAC] Workspace loaded: " . join(s:loading_workspace, ', ')
|
||||||
|
let s:workspace = s:workspace + s:loading_workspace
|
||||||
|
endfunction
|
||||||
|
call s:workspaceLoad(a:arg, function("s:callback_load"))
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! fsharp#loadProject(...)
|
||||||
|
let prjs = []
|
||||||
|
for proj in a:000
|
||||||
|
call add(prjs, fnamemodify(proj, ':p'))
|
||||||
|
endfor
|
||||||
|
call s:load(prjs)
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! fsharp#loadWorkspaceAuto()
|
||||||
|
if &ft == 'fsharp'
|
||||||
|
call fsharp#updateServerConfig()
|
||||||
|
if g:fsharp#automatic_workspace_init
|
||||||
|
echom "[FSAC] Loading workspace..."
|
||||||
|
let bufferDirectory = fnamemodify(resolve(expand('%:p')), ':h')
|
||||||
|
call s:findWorkspace(bufferDirectory, function("s:load"))
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! fsharp#reloadProjects()
|
||||||
|
if len(s:workspace) > 0
|
||||||
|
function! s:callback_reloadProjects(_)
|
||||||
|
call s:prompt("[FSAC] Workspace reloaded.")
|
||||||
|
endfunction
|
||||||
|
call s:workspaceLoad(s:workspace, function("s:callback_reloadProjects"))
|
||||||
|
else
|
||||||
|
echom "[FSAC] Workspace is empty"
|
||||||
|
endif
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! fsharp#OnFSProjSave()
|
||||||
|
if &ft == "fsharp_project" && exists('g:fsharp#automatic_reload_workspace') && g:fsharp#automatic_reload_workspace
|
||||||
|
call fsharp#reloadProjects()
|
||||||
|
endif
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! fsharp#showSignature()
|
||||||
|
function! s:callback_showSignature(result)
|
||||||
|
let result = a:result
|
||||||
|
if exists('result.result.content')
|
||||||
|
let content = json_decode(result.result.content)
|
||||||
|
if exists('content.Data')
|
||||||
|
echom substitute(content.Data, '\n\+$', ' ', 'g')
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
endfunction
|
||||||
|
call s:signature(expand('%:p'), line('.') - 1, col('.') - 1, function("s:callback_showSignature"))
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! fsharp#OnCursorMove()
|
||||||
|
if g:fsharp#show_signature_on_cursor_move
|
||||||
|
call fsharp#showSignature()
|
||||||
|
endif
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! fsharp#showF1Help()
|
||||||
|
let result = s:f1Help(expand('%:p'), line('.') - 1, col('.') - 1)
|
||||||
|
echo result
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! fsharp#showTooltip()
|
||||||
|
function! s:callback_showTooltip(result)
|
||||||
|
let result = a:result
|
||||||
|
if exists('result.result.content')
|
||||||
|
let content = json_decode(result.result.content)
|
||||||
|
if exists('content.Data')
|
||||||
|
call LanguageClient#textDocument_hover()
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
endfunction
|
||||||
|
" show hover only if signature exists for the current position
|
||||||
|
call s:signature(expand('%:p'), line('.') - 1, col('.') - 1, function("s:callback_showTooltip"))
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
let s:script_root_dir = expand('<sfile>:p:h') . "/../"
|
||||||
|
let s:fsac = fnamemodify(s:script_root_dir . "fsac/fsautocomplete.dll", ":p")
|
||||||
|
let g:fsharp#languageserver_command =
|
||||||
|
\ ['dotnet', s:fsac,
|
||||||
|
\ '--background-service-enabled'
|
||||||
|
\ ]
|
||||||
|
|
||||||
|
function! s:download(branch)
|
||||||
|
echom "[FSAC] Downloading FSAC. This may take a while..."
|
||||||
|
let zip = s:script_root_dir . "fsac.zip"
|
||||||
|
call system(
|
||||||
|
\ 'curl -fLo ' . zip . ' --create-dirs ' .
|
||||||
|
\ '"https://ci.appveyor.com/api/projects/fsautocomplete/fsautocomplete/artifacts/bin/pkgs/fsautocomplete.netcore.zip?branch=' . a:branch . '"'
|
||||||
|
\ )
|
||||||
|
if v:shell_error == 0
|
||||||
|
call system('unzip -o -d ' . s:script_root_dir . "/fsac " . zip)
|
||||||
|
echom "[FSAC] Updated FsAutoComplete to version " . a:branch . ""
|
||||||
|
else
|
||||||
|
echom "[FSAC] Failed to update FsAutoComplete"
|
||||||
|
endif
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! fsharp#updateFSAC(...)
|
||||||
|
if len(a:000) == 0
|
||||||
|
let branch = "master"
|
||||||
|
else
|
||||||
|
let branch = a:000[0]
|
||||||
|
endif
|
||||||
|
call s:download(branch)
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
let s:fsi_buffer = -1
|
||||||
|
let s:fsi_job = -1
|
||||||
|
let s:fsi_width = 0
|
||||||
|
let s:fsi_height = 0
|
||||||
|
|
||||||
|
function! s:win_gotoid_safe(winid)
|
||||||
|
function! s:vimReturnFocus(window)
|
||||||
|
call win_gotoid(a:window)
|
||||||
|
redraw!
|
||||||
|
endfunction
|
||||||
|
if has('nvim')
|
||||||
|
call win_gotoid(a:winid)
|
||||||
|
else
|
||||||
|
call timer_start(1, { -> s:vimReturnFocus(a:winid) })
|
||||||
|
endif
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! s:get_fsi_command()
|
||||||
|
let cmd = g:fsharp#fsi_command
|
||||||
|
for prm in g:fsharp#fsi_extra_parameters
|
||||||
|
let cmd = cmd . " " . prm
|
||||||
|
endfor
|
||||||
|
return cmd
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! fsharp#openFsi(returnFocus)
|
||||||
|
if bufwinid(s:fsi_buffer) <= 0
|
||||||
|
let fsi_command = s:get_fsi_command()
|
||||||
|
" Neovim
|
||||||
|
if exists('*termopen') || exists('*term_start')
|
||||||
|
let current_win = win_getid()
|
||||||
|
execute g:fsharp#fsi_window_command
|
||||||
|
if s:fsi_width > 0 | execute 'vertical resize' s:fsi_width | endif
|
||||||
|
if s:fsi_height > 0 | execute 'resize' s:fsi_height | endif
|
||||||
|
" if window is closed but FSI is still alive then reuse it
|
||||||
|
if s:fsi_buffer >= 0 && bufexists(str2nr(s:fsi_buffer))
|
||||||
|
exec 'b' s:fsi_buffer
|
||||||
|
normal G
|
||||||
|
if !has('nvim') && mode() == 'n' | execute "normal A" | endif
|
||||||
|
if a:returnFocus | call s:win_gotoid_safe(current_win) | endif
|
||||||
|
" open FSI: Neovim
|
||||||
|
elseif has('nvim')
|
||||||
|
let s:fsi_job = termopen(fsi_command)
|
||||||
|
if s:fsi_job > 0
|
||||||
|
let s:fsi_buffer = bufnr("%")
|
||||||
|
else
|
||||||
|
close
|
||||||
|
echom "[FSAC] Failed to open FSI."
|
||||||
|
return -1
|
||||||
|
endif
|
||||||
|
" open FSI: Vim
|
||||||
|
else
|
||||||
|
let options = {
|
||||||
|
\ "term_name": "F# Interactive",
|
||||||
|
\ "curwin": 1,
|
||||||
|
\ "term_finish": "close"
|
||||||
|
\ }
|
||||||
|
let s:fsi_buffer = term_start(fsi_command, options)
|
||||||
|
if s:fsi_buffer != 0
|
||||||
|
if exists('*term_setkill') | call term_setkill(s:fsi_buffer, "term") | endif
|
||||||
|
let s:fsi_job = term_getjob(s:fsi_buffer)
|
||||||
|
else
|
||||||
|
close
|
||||||
|
echom "[FSAC] Failed to open FSI."
|
||||||
|
return -1
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
setlocal bufhidden=hide
|
||||||
|
normal G
|
||||||
|
if a:returnFocus | call s:win_gotoid_safe(current_win) | endif
|
||||||
|
return s:fsi_buffer
|
||||||
|
else
|
||||||
|
echom "[FSAC] Your Vim does not support terminal".
|
||||||
|
return 0
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
return s:fsi_buffer
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! fsharp#toggleFsi()
|
||||||
|
let fsiWindowId = bufwinid(s:fsi_buffer)
|
||||||
|
if fsiWindowId > 0
|
||||||
|
let current_win = win_getid()
|
||||||
|
call win_gotoid(fsiWindowId)
|
||||||
|
let s:fsi_width = winwidth('%')
|
||||||
|
let s:fsi_height = winheight('%')
|
||||||
|
close
|
||||||
|
call win_gotoid(current_win)
|
||||||
|
else
|
||||||
|
call fsharp#openFsi(0)
|
||||||
|
endif
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! fsharp#quitFsi()
|
||||||
|
if s:fsi_buffer >= 0 && bufexists(str2nr(s:fsi_buffer))
|
||||||
|
if has('nvim')
|
||||||
|
let winid = bufwinid(s:fsi_buffer)
|
||||||
|
if winid > 0 | execute "close " . winid | endif
|
||||||
|
call jobstop(s:fsi_job)
|
||||||
|
else
|
||||||
|
call job_stop(s:fsi_job, "term")
|
||||||
|
endif
|
||||||
|
let s:fsi_buffer = -1
|
||||||
|
let s:fsi_job = -1
|
||||||
|
endif
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! fsharp#resetFsi()
|
||||||
|
call fsharp#quitFsi()
|
||||||
|
return fsharp#openFsi(1)
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! fsharp#sendFsi(text)
|
||||||
|
if fsharp#openFsi(!g:fsharp#fsi_focus_on_send) > 0
|
||||||
|
" Neovim
|
||||||
|
if has('nvim')
|
||||||
|
call chansend(s:fsi_job, a:text . ";;". "\n")
|
||||||
|
" Vim 8
|
||||||
|
else
|
||||||
|
call term_sendkeys(s:fsi_buffer, a:text . ";;" . "\<cr>")
|
||||||
|
call term_wait(s:fsi_buffer)
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
" https://stackoverflow.com/a/6271254
|
||||||
|
function! s:get_visual_selection()
|
||||||
|
let [line_start, column_start] = getpos("'<")[1:2]
|
||||||
|
let [line_end, column_end] = getpos("'>")[1:2]
|
||||||
|
let lines = getline(line_start, line_end)
|
||||||
|
if len(lines) == 0
|
||||||
|
return ''
|
||||||
|
endif
|
||||||
|
let lines[-1] = lines[-1][: column_end - (&selection == 'inclusive' ? 1 : 2)]
|
||||||
|
let lines[0] = lines[0][column_start - 1:]
|
||||||
|
return lines
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! s:get_complete_buffer()
|
||||||
|
return join(getline(1, '$'), "\n")
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! fsharp#sendSelectionToFsi() range
|
||||||
|
let lines = s:get_visual_selection()
|
||||||
|
exec 'normal' len(lines) . 'j'
|
||||||
|
let text = join(lines, "\n")
|
||||||
|
return fsharp#sendFsi(text)
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! fsharp#sendLineToFsi()
|
||||||
|
let text = getline('.')
|
||||||
|
exec 'normal j'
|
||||||
|
return fsharp#sendFsi(text)
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! fsharp#sendAllToFsi()
|
||||||
|
let text = s:get_complete_buffer()
|
||||||
|
return fsharp#sendFsi(text)
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
let &cpo = s:cpo_save
|
||||||
|
unlet s:cpo_save
|
||||||
|
|
||||||
|
" vim: sw=4 et sts=4
|
||||||
|
|
||||||
|
endif
|
||||||
@@ -55,12 +55,19 @@ function! go#config#TermCloseOnExit() abort
|
|||||||
return get(g:, 'go_term_close_on_exit', 1)
|
return get(g:, 'go_term_close_on_exit', 1)
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
|
function! go#config#TermReuse() abort
|
||||||
|
return get(g:, 'go_term_reuse', 0)
|
||||||
|
endfunction
|
||||||
|
|
||||||
function! go#config#SetTermCloseOnExit(value) abort
|
function! go#config#SetTermCloseOnExit(value) abort
|
||||||
let g:go_term_close_on_exit = a:value
|
let g:go_term_close_on_exit = a:value
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
function! go#config#TermEnabled() abort
|
function! go#config#TermEnabled() abort
|
||||||
return has('nvim') && get(g:, 'go_term_enabled', 0)
|
" nvim always support
|
||||||
|
" vim will support if terminal feature exists
|
||||||
|
let l:support = has('nvim') || has('terminal')
|
||||||
|
return support && get(g:, 'go_term_enabled', 0)
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
function! go#config#SetTermEnabled(value) abort
|
function! go#config#SetTermEnabled(value) abort
|
||||||
@@ -84,7 +91,18 @@ function! go#config#StatuslineDuration() abort
|
|||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
function! go#config#SnippetEngine() abort
|
function! go#config#SnippetEngine() abort
|
||||||
return get(g:, 'go_snippet_engine', 'automatic')
|
let l:engine = get(g:, 'go_snippet_engine', 'automatic')
|
||||||
|
if l:engine is? "automatic"
|
||||||
|
if get(g:, 'did_plugin_ultisnips') is 1
|
||||||
|
let l:engine = 'ultisnips'
|
||||||
|
elseif get(g:, 'loaded_neosnippet') is 1
|
||||||
|
let l:engine = 'neosnippet'
|
||||||
|
elseif get(g:, 'loaded_minisnip') is 1
|
||||||
|
let l:engine = 'minisnip'
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
|
||||||
|
return l:engine
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
function! go#config#PlayBrowserCommand() abort
|
function! go#config#PlayBrowserCommand() abort
|
||||||
@@ -151,30 +169,13 @@ function! go#config#SetGuruScope(scope) abort
|
|||||||
endif
|
endif
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
function! go#config#GocodeUnimportedPackages() abort
|
|
||||||
return get(g:, 'go_gocode_unimported_packages', 0)
|
|
||||||
endfunction
|
|
||||||
|
|
||||||
let s:sock_type = (has('win32') || has('win64')) ? 'tcp' : 'unix'
|
|
||||||
function! go#config#GocodeSocketType() abort
|
|
||||||
return get(g:, 'go_gocode_socket_type', s:sock_type)
|
|
||||||
endfunction
|
|
||||||
|
|
||||||
function! go#config#GocodeProposeBuiltins() abort
|
|
||||||
return get(g:, 'go_gocode_propose_builtins', 1)
|
|
||||||
endfunction
|
|
||||||
|
|
||||||
function! go#config#GocodeProposeSource() abort
|
|
||||||
return get(g:, 'go_gocode_propose_source', 0)
|
|
||||||
endfunction
|
|
||||||
|
|
||||||
function! go#config#EchoCommandInfo() abort
|
function! go#config#EchoCommandInfo() abort
|
||||||
return get(g:, 'go_echo_command_info', 1)
|
return get(g:, 'go_echo_command_info', 1)
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
function! go#config#DocUrl() abort
|
function! go#config#DocUrl() abort
|
||||||
let godoc_url = get(g:, 'go_doc_url', 'https://godoc.org')
|
let godoc_url = get(g:, 'go_doc_url', 'https://pkg.go.dev')
|
||||||
if godoc_url isnot 'https://godoc.org'
|
if godoc_url isnot 'https://pkg.go.dev'
|
||||||
" strip last '/' character if available
|
" strip last '/' character if available
|
||||||
let last_char = strlen(godoc_url) - 1
|
let last_char = strlen(godoc_url) - 1
|
||||||
if godoc_url[last_char] == '/'
|
if godoc_url[last_char] == '/'
|
||||||
@@ -252,6 +253,10 @@ function! go#config#AddtagsTransform() abort
|
|||||||
return get(g:, 'go_addtags_transform', "snakecase")
|
return get(g:, 'go_addtags_transform', "snakecase")
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
|
function! go#config#AddtagsSkipUnexported() abort
|
||||||
|
return get(g:, 'go_addtags_skip_unexported', 0)
|
||||||
|
endfunction
|
||||||
|
|
||||||
function! go#config#TemplateAutocreate() abort
|
function! go#config#TemplateAutocreate() abort
|
||||||
return get(g:, "go_template_autocreate", 1)
|
return get(g:, "go_template_autocreate", 1)
|
||||||
endfunction
|
endfunction
|
||||||
@@ -265,23 +270,11 @@ function! go#config#MetalinterCommand() abort
|
|||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
function! go#config#MetalinterAutosaveEnabled() abort
|
function! go#config#MetalinterAutosaveEnabled() abort
|
||||||
let l:default_enabled = ["vet", "golint"]
|
return get(g:, "go_metalinter_autosave_enabled", ["govet", "golint"])
|
||||||
|
|
||||||
if go#config#MetalinterCommand() == "golangci-lint"
|
|
||||||
let l:default_enabled = ["govet", "golint"]
|
|
||||||
endif
|
|
||||||
|
|
||||||
return get(g:, "go_metalinter_autosave_enabled", default_enabled)
|
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
function! go#config#MetalinterEnabled() abort
|
function! go#config#MetalinterEnabled() abort
|
||||||
let l:default_enabled = ["vet", "golint", "errcheck"]
|
return get(g:, "go_metalinter_enabled", ["vet", "golint", "errcheck"])
|
||||||
|
|
||||||
if go#config#MetalinterCommand() == "golangci-lint"
|
|
||||||
let l:default_enabled = ["govet", "golint"]
|
|
||||||
endif
|
|
||||||
|
|
||||||
return get(g:, "go_metalinter_enabled", default_enabled)
|
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
function! go#config#GolintBin() abort
|
function! go#config#GolintBin() abort
|
||||||
@@ -308,6 +301,10 @@ function! go#config#FmtAutosave() abort
|
|||||||
return get(g:, "go_fmt_autosave", 1)
|
return get(g:, "go_fmt_autosave", 1)
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
|
function! go#config#ImportsAutosave() abort
|
||||||
|
return get(g:, 'go_imports_autosave', 0)
|
||||||
|
endfunction
|
||||||
|
|
||||||
function! go#config#SetFmtAutosave(value) abort
|
function! go#config#SetFmtAutosave(value) abort
|
||||||
let g:go_fmt_autosave = a:value
|
let g:go_fmt_autosave = a:value
|
||||||
endfunction
|
endfunction
|
||||||
@@ -352,8 +349,12 @@ function! go#config#FmtCommand() abort
|
|||||||
return get(g:, "go_fmt_command", "gofmt")
|
return get(g:, "go_fmt_command", "gofmt")
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
|
function! go#config#ImportsMode() abort
|
||||||
|
return get(g:, "go_imports_mode", "goimports")
|
||||||
|
endfunction
|
||||||
|
|
||||||
function! go#config#FmtOptions() abort
|
function! go#config#FmtOptions() abort
|
||||||
return get(g:, "go_fmt_options", {})
|
return get(b:, "go_fmt_options", get(g:, "go_fmt_options", {}))
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
function! go#config#FmtFailSilently() abort
|
function! go#config#FmtFailSilently() abort
|
||||||
@@ -368,8 +369,13 @@ function! go#config#PlayOpenBrowser() abort
|
|||||||
return get(g:, "go_play_open_browser", 1)
|
return get(g:, "go_play_open_browser", 1)
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
|
function! go#config#RenameCommand() abort
|
||||||
|
" delegate to go#config#GorenameBin for backwards compatability.
|
||||||
|
return get(g:, "go_rename_command", go#config#GorenameBin())
|
||||||
|
endfunction
|
||||||
|
|
||||||
function! go#config#GorenameBin() abort
|
function! go#config#GorenameBin() abort
|
||||||
return get(g:, "go_gorename_bin", "gorename")
|
return get(g:, "go_gorename_bin", "gopls")
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
function! go#config#GorenamePrefill() abort
|
function! go#config#GorenamePrefill() abort
|
||||||
@@ -463,10 +469,22 @@ function! go#config#HighlightVariableDeclarations() abort
|
|||||||
return get(g:, 'go_highlight_variable_declarations', 0)
|
return get(g:, 'go_highlight_variable_declarations', 0)
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
|
function! go#config#HighlightDiagnosticErrors() abort
|
||||||
|
return get(g:, 'go_highlight_diagnostic_errors', 1)
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! go#config#HighlightDiagnosticWarnings() abort
|
||||||
|
return get(g:, 'go_highlight_diagnostic_warnings', 1)
|
||||||
|
endfunction
|
||||||
|
|
||||||
function! go#config#HighlightDebug() abort
|
function! go#config#HighlightDebug() abort
|
||||||
return get(g:, 'go_highlight_debug', 1)
|
return get(g:, 'go_highlight_debug', 1)
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
|
function! go#config#DebugBreakpointSignText() abort
|
||||||
|
return get(g:, 'go_debug_breakpoint_sign_text', '>')
|
||||||
|
endfunction
|
||||||
|
|
||||||
function! go#config#FoldEnable(...) abort
|
function! go#config#FoldEnable(...) abort
|
||||||
if a:0 > 0
|
if a:0 > 0
|
||||||
return index(go#config#FoldEnable(), a:1) > -1
|
return index(go#config#FoldEnable(), a:1) > -1
|
||||||
@@ -482,6 +500,70 @@ function! go#config#CodeCompletionEnabled() abort
|
|||||||
return get(g:, "go_code_completion_enabled", 1)
|
return get(g:, "go_code_completion_enabled", 1)
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
|
function! go#config#CodeCompletionIcase() abort
|
||||||
|
return get(g:, "go_code_completion_icase", 0)
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! go#config#Updatetime() abort
|
||||||
|
let go_updatetime = get(g:, 'go_updatetime', 800)
|
||||||
|
return go_updatetime == 0 ? &updatetime : go_updatetime
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! go#config#ReferrersMode() abort
|
||||||
|
return get(g:, 'go_referrers_mode', 'gopls')
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! go#config#ImplementsMode() abort
|
||||||
|
return get(g:, 'go_implements_mode', 'guru')
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! go#config#GoplsCompleteUnimported() abort
|
||||||
|
return get(g:, 'go_gopls_complete_unimported', v:null)
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! go#config#GoplsDeepCompletion() abort
|
||||||
|
return get(g:, 'go_gopls_deep_completion', v:null)
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! go#config#GoplsMatcher() abort
|
||||||
|
if !exists('g:go_gopls_matcher') && get(g:, 'g:go_gopls_fuzzy_matching', v:null) is 1
|
||||||
|
return 'fuzzy'
|
||||||
|
endif
|
||||||
|
return get(g:, 'go_gopls_matcher', v:null)
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! go#config#GoplsStaticCheck() abort
|
||||||
|
return get(g:, 'go_gopls_staticcheck', v:null)
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! go#config#GoplsUsePlaceholders() abort
|
||||||
|
return get(g:, 'go_gopls_use_placeholders', v:null)
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! go#config#GoplsTempModfile() abort
|
||||||
|
return get(g:, 'go_gopls_temp_modfile', v:null)
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! go#config#GoplsAnalyses() abort
|
||||||
|
return get(g:, 'go_gopls_analyses', v:null)
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! go#config#GoplsLocal() abort
|
||||||
|
return get(g:, 'go_gopls_local', v:null)
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! go#config#GoplsEnabled() abort
|
||||||
|
return get(g:, 'go_gopls_enabled', 1)
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! go#config#DiagnosticsEnabled() abort
|
||||||
|
return get(g:, 'go_diagnostics_enabled', 0)
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! go#config#GoplsOptions() abort
|
||||||
|
return get(g:, 'go_gopls_options', ['-remote=auto'])
|
||||||
|
endfunction
|
||||||
|
|
||||||
" Set the default value. A value of "1" is a shortcut for this, for
|
" Set the default value. A value of "1" is a shortcut for this, for
|
||||||
" compatibility reasons.
|
" compatibility reasons.
|
||||||
if exists("g:go_gorename_prefill") && g:go_gorename_prefill == 1
|
if exists("g:go_gorename_prefill") && g:go_gorename_prefill == 1
|
||||||
|
|||||||
@@ -1,13 +1,36 @@
|
|||||||
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'graphql') == -1
|
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'graphql') == -1
|
||||||
|
|
||||||
" Vim plugin
|
" Copyright (c) 2016-2020 Jon Parise <jon@indelible.org>
|
||||||
|
"
|
||||||
|
" Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
" of this software and associated documentation files (the "Software"), to
|
||||||
|
" deal in the Software without restriction, including without limitation the
|
||||||
|
" rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
|
||||||
|
" sell copies of the Software, and to permit persons to whom the Software is
|
||||||
|
" furnished to do so, subject to the following conditions:
|
||||||
|
"
|
||||||
|
" The above copyright notice and this permission notice shall be included in
|
||||||
|
" all copies or substantial portions of the Software.
|
||||||
|
"
|
||||||
|
" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
" IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
" FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
" AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
" LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||||
|
" FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
|
||||||
|
" IN THE SOFTWARE.
|
||||||
|
"
|
||||||
" Language: GraphQL
|
" Language: GraphQL
|
||||||
" Maintainer: Jon Parise <jon@indelible.org>
|
" Maintainer: Jon Parise <jon@indelible.org>
|
||||||
|
|
||||||
if exists('g:autoloaded_graphql')
|
function! graphql#has_syntax_group(group) abort
|
||||||
finish
|
try
|
||||||
endif
|
silent execute 'silent highlight ' . a:group
|
||||||
let g:autoloaded_graphql = 1
|
catch
|
||||||
|
return v:false
|
||||||
|
endtry
|
||||||
|
return v:true
|
||||||
|
endfunction
|
||||||
|
|
||||||
function! graphql#javascript_tags() abort
|
function! graphql#javascript_tags() abort
|
||||||
return get(g:, 'graphql_javascript_tags', ['gql', 'graphql', 'Relay.QL'])
|
return get(g:, 'graphql_javascript_tags', ['gql', 'graphql', 'Relay.QL'])
|
||||||
|
|||||||
129
autoload/jsonnet.vim
Normal file
129
autoload/jsonnet.vim
Normal file
@@ -0,0 +1,129 @@
|
|||||||
|
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'jsonnet') == -1
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
" Options.
|
||||||
|
|
||||||
|
if !exists("g:jsonnet_command")
|
||||||
|
let g:jsonnet_command = "jsonnet"
|
||||||
|
endif
|
||||||
|
|
||||||
|
if !exists("g:jsonnet_fmt_command")
|
||||||
|
let g:jsonnet_fmt_command = "jsonnetfmt"
|
||||||
|
endif
|
||||||
|
|
||||||
|
if !exists('g:jsonnet_fmt_options')
|
||||||
|
let g:jsonnet_fmt_options = ''
|
||||||
|
endif
|
||||||
|
|
||||||
|
if !exists('g:jsonnet_fmt_fail_silently')
|
||||||
|
let g:jsonnet_fmt_fail_silently = 1
|
||||||
|
endif
|
||||||
|
|
||||||
|
|
||||||
|
" System runs a shell command. It will reset the shell to /bin/sh for Unix-like
|
||||||
|
" systems if it is executable.
|
||||||
|
function! jsonnet#System(str, ...)
|
||||||
|
let l:shell = &shell
|
||||||
|
if executable('/bin/sh')
|
||||||
|
let &shell = '/bin/sh'
|
||||||
|
endif
|
||||||
|
|
||||||
|
try
|
||||||
|
let l:output = call("system", [a:str] + a:000)
|
||||||
|
return l:output
|
||||||
|
finally
|
||||||
|
let &shell = l:shell
|
||||||
|
endtry
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
|
||||||
|
" CheckBinPath checks whether the given binary exists or not and returns the
|
||||||
|
" path of the binary. It returns an empty string if it doesn't exists.
|
||||||
|
function! jsonnet#CheckBinPath(binName)
|
||||||
|
|
||||||
|
if executable(a:binName)
|
||||||
|
if exists('*exepath')
|
||||||
|
let binPath = exepath(a:binName)
|
||||||
|
return binPath
|
||||||
|
else
|
||||||
|
return a:binName
|
||||||
|
endif
|
||||||
|
else
|
||||||
|
echo "vim-jsonnet: could not find '" . a:binName . "'."
|
||||||
|
return ""
|
||||||
|
endif
|
||||||
|
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
" Format calls `jsonnetfmt ... ` on the file and replaces the file with the
|
||||||
|
" auto formatted version. Does some primitive error checking of the
|
||||||
|
" jsonnetfmt command too.
|
||||||
|
function! jsonnet#Format()
|
||||||
|
|
||||||
|
" Save cursor position and many other things.
|
||||||
|
let l:curw = winsaveview()
|
||||||
|
|
||||||
|
" Write current unsaved buffer to a temp file
|
||||||
|
let l:tmpname = tempname()
|
||||||
|
call writefile(getline(1, '$'), l:tmpname)
|
||||||
|
|
||||||
|
" get the command first so we can test it
|
||||||
|
let l:binName = g:jsonnet_fmt_command
|
||||||
|
|
||||||
|
" check if the user has installed command binary.
|
||||||
|
let l:binPath = jsonnet#CheckBinPath(l:binName)
|
||||||
|
if empty(l:binPath)
|
||||||
|
return
|
||||||
|
endif
|
||||||
|
|
||||||
|
|
||||||
|
" Populate the final command.
|
||||||
|
let l:command = l:binPath
|
||||||
|
" The inplace modification is default. Makes file management easier
|
||||||
|
let l:command = l:command . ' -i '
|
||||||
|
let l:command = l:command . g:jsonnet_fmt_options
|
||||||
|
|
||||||
|
" Execute the compiled jsonnetfmt command and save the return value
|
||||||
|
let l:out = jsonnet#System(l:command . " " . l:tmpname)
|
||||||
|
let l:errorCode = v:shell_error
|
||||||
|
|
||||||
|
if l:errorCode == 0
|
||||||
|
" The format command succeeded Move the formatted temp file over the
|
||||||
|
" current file and restore other settings
|
||||||
|
|
||||||
|
" stop undo recording
|
||||||
|
try | silent undojoin | catch | endtry
|
||||||
|
|
||||||
|
let l:originalFileFormat = &fileformat
|
||||||
|
if exists("*getfperm")
|
||||||
|
" save old file permissions
|
||||||
|
let l:originalFPerm = getfperm(expand('%'))
|
||||||
|
endif
|
||||||
|
" Overwrite current file with the formatted temp file
|
||||||
|
call rename(l:tmpname, expand('%'))
|
||||||
|
|
||||||
|
if exists("*setfperm") && l:originalFPerm != ''
|
||||||
|
call setfperm(expand('%'), l:originalFPerm)
|
||||||
|
endif
|
||||||
|
" the file has been changed outside of vim, enable reedit
|
||||||
|
silent edit!
|
||||||
|
let &fileformat = l:originalFileFormat
|
||||||
|
let &syntax = &syntax
|
||||||
|
elseif g:jsonnet_fmt_fail_silently == 0
|
||||||
|
" FixMe: We could leverage the errors coming from the `jsonnetfmt` and
|
||||||
|
" give immediate feedback to the user at every save time.
|
||||||
|
" Our inspiration, vim-go, opens a new list below the current edit
|
||||||
|
" window and shows the errors (the output of the fmt command).
|
||||||
|
" We are not sure whether this is desired in the vim-jsonnet community
|
||||||
|
" or not. Nevertheless, this else block is a suitable place to benefit
|
||||||
|
" from the `jsonnetfmt` errors.
|
||||||
|
endif
|
||||||
|
|
||||||
|
" Restore our cursor/windows positions.
|
||||||
|
call winrestview(l:curw)
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
endif
|
||||||
@@ -1,20 +1,20 @@
|
|||||||
if !exists('g:polyglot_disabled') || !(index(g:polyglot_disabled, 'typescript') != -1 || index(g:polyglot_disabled, 'typescript') != -1 || index(g:polyglot_disabled, 'jsx') != -1)
|
if !exists('g:polyglot_disabled') || (index(g:polyglot_disabled, 'javascript') == -1 && index(g:polyglot_disabled, 'jsx') == -1)
|
||||||
|
|
||||||
function! jsx_pretty#comment#update_commentstring(original)
|
function! jsx_pretty#comment#update_commentstring(original)
|
||||||
let syn_current = s:syn_name(line('.'), col('.'))
|
let line = getline(".")
|
||||||
let syn_start = s:syn_name(line('.'), 1)
|
let col = col('.')
|
||||||
|
if line !~# '^\s*$' && line[: col - 1] =~# '^\s*$' " skip indent
|
||||||
|
let col = indent('.') + 1
|
||||||
|
endif
|
||||||
|
let syn_start = s:syn_name(line('.'), col)
|
||||||
let save_cursor = getcurpos()
|
let save_cursor = getcurpos()
|
||||||
|
|
||||||
if syn_start =~? '^jsx'
|
if syn_start =~? '^jsx'
|
||||||
let line = getline(".")
|
|
||||||
let start = len(matchstr(line, '^\s*'))
|
|
||||||
let syn_name = s:syn_name(line('.'), start + 1)
|
|
||||||
|
|
||||||
if line =~ '^\s*//'
|
if line =~ '^\s*//'
|
||||||
let &l:commentstring = '// %s'
|
let &l:commentstring = '// %s'
|
||||||
elseif s:syn_contains(line('.'), col('.'), 'jsxTaggedRegion')
|
elseif s:syn_contains(line('.'), col, 'jsxTaggedRegion')
|
||||||
let &l:commentstring = '<!-- %s -->'
|
let &l:commentstring = '<!-- %s -->'
|
||||||
elseif syn_name =~? '^jsxAttrib'
|
elseif syn_start =~? '^jsxAttrib'
|
||||||
let &l:commentstring = '// %s'
|
let &l:commentstring = '// %s'
|
||||||
else
|
else
|
||||||
let &l:commentstring = '{/* %s */}'
|
let &l:commentstring = '{/* %s */}'
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
if !exists('g:polyglot_disabled') || !(index(g:polyglot_disabled, 'typescript') != -1 || index(g:polyglot_disabled, 'typescript') != -1 || index(g:polyglot_disabled, 'jsx') != -1)
|
if !exists('g:polyglot_disabled') || (index(g:polyglot_disabled, 'javascript') == -1 && index(g:polyglot_disabled, 'jsx') == -1)
|
||||||
|
|
||||||
if exists('*shiftwidth')
|
if exists('*shiftwidth')
|
||||||
function! s:sw()
|
function! s:sw()
|
||||||
@@ -10,209 +10,297 @@ else
|
|||||||
endfunction
|
endfunction
|
||||||
endif
|
endif
|
||||||
|
|
||||||
" Get the syntax group of start of line
|
" Regexp for the start tag
|
||||||
function! s:syn_sol(lnum)
|
let s:start_tag = '<\_s*\%(>\|\${\|\%(\<[-:._$A-Za-z0-9]\+\>\)\)'
|
||||||
let line = getline(a:lnum)
|
" Regexp for the end tag
|
||||||
let sol = matchstr(line, '^\s*')
|
let s:end_tag = '\%(<\_s*/\_s*\%(\<[-:._$A-Za-z0-9]\+\>\)\_s*>\|/\_s*>\)'
|
||||||
return map(synstack(a:lnum, len(sol) + 1), 'synIDattr(v:val, "name")')
|
|
||||||
|
function s:trim(line)
|
||||||
|
return substitute(a:line, '^\s*\|\s*$', '', 'g')
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
" Get the syntax group of end of line
|
" Get the syntax stack at the given position
|
||||||
function! s:syn_eol(lnum)
|
function s:syntax_stack_at(lnum, col)
|
||||||
let lnum = prevnonblank(a:lnum)
|
return map(synstack(a:lnum, a:col), 'synIDattr(v:val, "name")')
|
||||||
let col = strlen(getline(lnum))
|
|
||||||
return map(synstack(lnum, col), 'synIDattr(v:val, "name")')
|
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
function! s:prev_indent(lnum)
|
" Get the syntax at the given position
|
||||||
let lnum = prevnonblank(a:lnum - 1)
|
function s:syntax_at(lnum, col)
|
||||||
return indent(lnum)
|
return synIDattr(synID(a:lnum, a:col, 1), 'name')
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
function! s:prev_line(lnum)
|
" Get the start col of the non-space charactor
|
||||||
let lnum = prevnonblank(a:lnum - 1)
|
function s:start_col(lnum)
|
||||||
return substitute(getline(lnum), '^\s*\|\s*$', '', 'g')
|
return len(matchstr(getline(a:lnum), '^\s*')) + 1
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
function! s:syn_attr_jsx(synattr)
|
" Get the start syntax of a given line number
|
||||||
return a:synattr =~? "^jsx"
|
function s:start_syntax(lnum)
|
||||||
|
return s:syntax_at(a:lnum, s:start_col(a:lnum))
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
function! s:syn_xmlish(syns)
|
" The skip function for searchpair
|
||||||
return s:syn_attr_jsx(get(a:syns, -1))
|
function s:skip_if_not(current_lnum, ...)
|
||||||
|
" Skip the match in current line
|
||||||
|
if line('.') == a:current_lnum
|
||||||
|
return 1
|
||||||
|
endif
|
||||||
|
|
||||||
|
let syntax = s:syntax_at(line('.'), col('.'))
|
||||||
|
return syntax !~? join(a:000, '\|')
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
function! s:syn_jsx_element(syns)
|
" Whether the specified stytax group is the opening tag
|
||||||
return get(a:syns, -1) =~? 'jsxElement'
|
function s:is_opening_tag(syntax)
|
||||||
|
return a:syntax =~? 'jsxOpenPunct'
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
function! s:syn_js_comment(syns)
|
" Whether the specified stytax group is the closing tag
|
||||||
return get(a:syns, -1) =~? 'Comment$'
|
function s:is_closing_tag(syntax)
|
||||||
|
return a:syntax =~? 'jsxClose'
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
function! s:syn_jsx_escapejs(syns)
|
" Whether the specified syntax group is the jsxRegion
|
||||||
return get(a:syns, -1) =~? '\(\(js\(Template\)\?\|javaScript\(Embed\)\?\|typescript\)Braces\|javascriptTemplateSB\|typescriptInterpolationDelimiter\)' &&
|
function s:is_jsx_region(syntax)
|
||||||
\ (get(a:syns, -2) =~? 'jsxEscapeJs' ||
|
return a:syntax =~? 'jsxRegion'
|
||||||
\ get(a:syns, -3) =~? 'jsxEscapeJs')
|
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
function! s:syn_jsx_attrib(syns)
|
" Whether the specified syntax group is the jsxElement
|
||||||
return len(filter(copy(a:syns), 'v:val =~? "jsxAttrib"'))
|
function s:is_jsx_element(syntax)
|
||||||
|
return a:syntax =~? 'jsxElement'
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
" Whether the specified syntax group is the jsxExpressionBlock
|
||||||
|
function s:is_jsx_expression(syntax)
|
||||||
|
return a:syntax =~? 'jsxExpressionBlock'
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
" Whether the specified syntax group is the jsxBraces
|
||||||
|
function s:is_jsx_brace(syntax)
|
||||||
|
return a:syntax =~? 'jsxBraces'
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
" Whether the specified syntax group is the jsxComment
|
||||||
|
function s:is_jsx_comment(syntax)
|
||||||
|
return a:syntax =~? 'jsxComment'
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
" Whether the specified line is comment related syntax
|
||||||
|
function s:is_comment(syntax)
|
||||||
|
return a:syntax =~? 'comment'
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
" Whether the specified syntax group is the jsxComment
|
||||||
|
function s:is_jsx_backticks(syntax)
|
||||||
|
return a:syntax =~? 'jsxBackticks'
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
" Get the prvious line number
|
||||||
|
function s:prev_lnum(lnum)
|
||||||
|
return prevnonblank(a:lnum - 1)
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
" Whether the given pos is the parent of the given element who has
|
||||||
|
" element_count jsxElement syntax
|
||||||
|
function s:is_parent_element(pos, element_count)
|
||||||
|
let syntax_stack = s:syntax_stack_at(a:pos[0], a:pos[1])
|
||||||
|
return s:is_opening_tag(syntax_stack[-1]) &&
|
||||||
|
\ count(syntax_stack, 'jsxElement') <= a:element_count
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
" Compute the indention of the trail punct
|
||||||
|
function s:jsx_indent_trail_punct(lnum)
|
||||||
|
let pair_line = searchpair('<', '', '>', 'bW', 's:skip_if_not(a:lnum, "jsxOpenPunct", "jsxClose")')
|
||||||
|
return indent(pair_line)
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
" Compute the indention of the closing tag
|
||||||
|
function s:jsx_indent_closing_tag(lnum)
|
||||||
|
let pair_line = searchpair(s:start_tag, '', s:end_tag, 'bW', 's:skip_if_not(a:lnum, "jsxOpenPunct", "jsxClose")')
|
||||||
|
return pair_line ? indent(pair_line) : indent(a:lnum)
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
" Compute the indentation of the jsxElement
|
||||||
|
function s:jsx_indent_element(lnum)
|
||||||
|
let syntax_stack = s:syntax_stack_at(a:lnum, s:start_col(a:lnum))
|
||||||
|
let syntax_name = syntax_stack[-1]
|
||||||
|
let element_count = count(syntax_stack, 'jsxElement')
|
||||||
|
|
||||||
|
if s:trim(getline(a:lnum)) =~ '^>'
|
||||||
|
return s:jsx_indent_trail_punct(a:lnum)
|
||||||
|
endif
|
||||||
|
|
||||||
|
" If current tag is closing tag
|
||||||
|
if s:is_closing_tag(syntax_name)
|
||||||
|
return s:jsx_indent_closing_tag(a:lnum)
|
||||||
|
endif
|
||||||
|
|
||||||
|
" Normalize the jsxElement count for opening tag
|
||||||
|
if s:is_opening_tag(syntax_name)
|
||||||
|
" <div>
|
||||||
|
" <div></div> <-- jsxRegion->jsxElement->jsxElement->jsxTag->jsxOpenTag->jsxOpenPunct
|
||||||
|
" </div>
|
||||||
|
if s:is_jsx_element(syntax_stack[-4]) && s:is_jsx_element(syntax_stack[-5])
|
||||||
|
let element_count = element_count - 1
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
|
||||||
|
let start_time = localtime()
|
||||||
|
let pos = searchpos(s:start_tag, 'bW')
|
||||||
|
|
||||||
|
while !s:is_parent_element(pos, element_count)
|
||||||
|
if localtime() - start_time >= 0.5
|
||||||
|
return -1
|
||||||
|
endif
|
||||||
|
let pos = searchpos(s:start_tag, 'bW')
|
||||||
|
endwhile
|
||||||
|
|
||||||
|
return indent(pos[0]) + s:sw()
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
" Compute the indentation of the comment
|
||||||
|
function s:jsx_indent_comment(lnum)
|
||||||
|
let line = s:trim(getline(a:lnum))
|
||||||
|
|
||||||
|
if s:is_jsx_comment(s:start_syntax(a:lnum))
|
||||||
|
if line =~ '^<!--' || line =~ '^-->'
|
||||||
|
return s:jsx_indent_element(a:lnum)
|
||||||
|
else
|
||||||
|
return s:jsx_indent_element(a:lnum) + s:sw()
|
||||||
|
endif
|
||||||
|
else
|
||||||
|
if line =~ '^/\*' || line =~ '^//'
|
||||||
|
return s:jsx_indent_element(a:lnum)
|
||||||
|
else
|
||||||
|
return s:jsx_indent_element(a:lnum) + 1
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
" Compute the indentation of jsxBackticks
|
||||||
|
function s:jsx_indent_backticks(lnum)
|
||||||
|
let tags = get(g:, 'vim_jsx_pretty_template_tags', ['html', 'jsx'])
|
||||||
|
let start_tag = '\%(' . join(tags, '\|') . '\)`'
|
||||||
|
let end_tag = '\%(' . join(tags, '\|') . '\)\@<!`'
|
||||||
|
let pair_line = searchpair(start_tag, '', end_tag, 'bW', 's:skip_if_not(a:lnum)')
|
||||||
|
|
||||||
|
return indent(pair_line)
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
" Syntax context types:
|
||||||
|
" - jsxRegion
|
||||||
|
" - jsxTaggedRegion
|
||||||
|
" - jsxElement
|
||||||
|
" - jsxExpressionBlock
|
||||||
|
" - Other
|
||||||
|
function s:syntax_context(lnum)
|
||||||
|
let start_col = s:start_col(a:lnum)
|
||||||
|
let syntax_stack = s:syntax_stack_at(a:lnum, start_col)
|
||||||
|
let start_syntax = syntax_stack[-1]
|
||||||
|
let reversed = reverse(syntax_stack)
|
||||||
|
let i = 0
|
||||||
|
|
||||||
|
for syntax_name in reversed
|
||||||
|
" If the current line is jsxExpressionBlock and not starts with jsxBraces
|
||||||
|
if s:is_jsx_expression(syntax_name)
|
||||||
|
return 'jsxExpressionBlock'
|
||||||
|
endif
|
||||||
|
|
||||||
|
if s:is_jsx_region(syntax_name)
|
||||||
|
return 'jsxRegion'
|
||||||
|
endif
|
||||||
|
|
||||||
|
if s:is_jsx_element(syntax_name)
|
||||||
|
" If current line starts with the opening tag
|
||||||
|
if s:is_opening_tag(start_syntax) || s:is_closing_tag(start_syntax)
|
||||||
|
" And the next syntax is jsxRegion
|
||||||
|
if s:is_jsx_region(reversed[i+1])
|
||||||
|
return 'jsxRegion'
|
||||||
|
elseif reversed[i+1] =~ 'jsxTaggedRegion'
|
||||||
|
return 'jsxTaggedRegion'
|
||||||
|
else
|
||||||
|
return 'jsxElement'
|
||||||
|
endif
|
||||||
|
elseif reversed[i+1] =~ 'jsxTaggedRegion'
|
||||||
|
return 'jsxTaggedRegion'
|
||||||
|
else
|
||||||
|
return 'jsxElement'
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
|
||||||
|
let i = i + 1
|
||||||
|
endfor
|
||||||
|
|
||||||
|
return 'Other'
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
let s:start_tag = '<\s*\([-:_\.\$0-9A-Za-z]\+\|>\)'
|
|
||||||
" match `/end_tag>` and `//>`
|
|
||||||
let s:end_tag = '/\%(\s*[-:_\.\$0-9A-Za-z]*\s*\|/\)>'
|
|
||||||
let s:opfirst = '^' . get(g:,'javascript_opfirst',
|
|
||||||
\ '\C\%([<>=,.?^%|/&]\|\([-:+]\)\1\@!\|\*\+\|!=\|in\%(stanceof\)\=\>\)')
|
|
||||||
|
|
||||||
function! jsx_pretty#indent#get(js_indent)
|
function! jsx_pretty#indent#get(js_indent)
|
||||||
let lnum = v:lnum
|
let line = s:trim(getline(v:lnum))
|
||||||
let line = substitute(getline(lnum), '^\s*\|\s*$', '', 'g')
|
let start_syntax = s:start_syntax(v:lnum)
|
||||||
let current_syn = s:syn_sol(lnum)
|
|
||||||
let current_syn_eol = s:syn_eol(lnum)
|
|
||||||
let prev_line_num = prevnonblank(lnum - 1)
|
|
||||||
let prev_syn_sol = s:syn_sol(prev_line_num)
|
|
||||||
let prev_syn_eol = s:syn_eol(prev_line_num)
|
|
||||||
let prev_line = s:prev_line(lnum)
|
|
||||||
let prev_ind = s:prev_indent(lnum)
|
|
||||||
|
|
||||||
if s:syn_xmlish(current_syn)
|
if s:is_jsx_backticks(start_syntax)
|
||||||
|
return s:jsx_indent_backticks(v:lnum)
|
||||||
|
endif
|
||||||
|
|
||||||
if !s:syn_xmlish(prev_syn_sol)
|
if s:is_jsx_brace(start_syntax)
|
||||||
\ && !s:syn_jsx_escapejs(prev_syn_sol)
|
return s:jsx_indent_element(v:lnum)
|
||||||
\ && !s:syn_jsx_escapejs(prev_syn_eol)
|
endif
|
||||||
\ && !s:syn_js_comment(prev_syn_sol)
|
|
||||||
if line =~ '^/\s*>' || line =~ '^<\s*' . s:end_tag
|
if s:is_opening_tag(start_syntax) && line =~ '^>'
|
||||||
return prev_ind
|
return s:jsx_indent_trail_punct(v:lnum)
|
||||||
else
|
endif
|
||||||
return prev_ind + s:sw()
|
|
||||||
endif
|
let syntax_context = s:syntax_context(v:lnum)
|
||||||
elseif !s:syn_xmlish(prev_syn_sol) && !s:syn_js_comment(prev_syn_sol) && s:syn_jsx_attrib(current_syn)
|
|
||||||
" For #79
|
if syntax_context == 'jsxRegion'
|
||||||
return prev_ind + s:sw()
|
if s:is_closing_tag(start_syntax)
|
||||||
" {
|
return s:jsx_indent_closing_tag(v:lnum)
|
||||||
" <div></div>
|
endif
|
||||||
" ##} <--
|
|
||||||
elseif s:syn_jsx_element(current_syn) && line =~ '}$'
|
let prev_lnum = s:prev_lnum(v:lnum)
|
||||||
let pair_line = searchpair('{', '', '}', 'b')
|
let prev_line = s:trim(getline(prev_lnum))
|
||||||
return indent(pair_line)
|
|
||||||
elseif line =~ '^-->$'
|
if prev_line =~ '[([{=?]$'
|
||||||
if prev_line =~ '^<!--'
|
return indent(prev_lnum) + s:sw()
|
||||||
return prev_ind
|
elseif prev_line =~ '[:|&<>]$' &&
|
||||||
else
|
\ s:trim(getline(s:prev_lnum(prev_lnum))) !~ '[?:|&<>]$'
|
||||||
return prev_ind - s:sw()
|
return indent(prev_lnum) + s:sw()
|
||||||
endif
|
|
||||||
elseif prev_line =~ '-->$'
|
|
||||||
return prev_ind
|
|
||||||
" close tag </tag> or /> including </>
|
|
||||||
elseif prev_line =~ s:end_tag . '$'
|
|
||||||
if line =~ '^<\s*' . s:end_tag
|
|
||||||
return prev_ind - s:sw()
|
|
||||||
elseif s:syn_jsx_attrib(prev_syn_sol)
|
|
||||||
return prev_ind - s:sw()
|
|
||||||
else
|
|
||||||
return prev_ind
|
|
||||||
endif
|
|
||||||
elseif line =~ '^\(>\|/\s*>\)'
|
|
||||||
if prev_line =~ '^<'
|
|
||||||
return prev_ind
|
|
||||||
else
|
|
||||||
return prev_ind - s:sw()
|
|
||||||
endif
|
|
||||||
elseif prev_line =~ '^\(<\|>\)' &&
|
|
||||||
\ (s:syn_xmlish(prev_syn_eol) || s:syn_js_comment(prev_syn_eol))
|
|
||||||
if line =~ '^<\s*' . s:end_tag
|
|
||||||
return prev_ind
|
|
||||||
else
|
|
||||||
return prev_ind + s:sw()
|
|
||||||
endif
|
|
||||||
elseif line =~ '^<\s*' . s:end_tag
|
|
||||||
if !s:syn_xmlish(prev_syn_sol)
|
|
||||||
if s:syn_jsx_escapejs(prev_syn_eol)
|
|
||||||
\ || s:syn_jsx_escapejs(prev_syn_sol)
|
|
||||||
return prev_ind - s:sw()
|
|
||||||
else
|
|
||||||
return prev_ind
|
|
||||||
endif
|
|
||||||
elseif prev_line =~ '^\<return'
|
|
||||||
return prev_ind
|
|
||||||
else
|
|
||||||
return prev_ind - s:sw()
|
|
||||||
endif
|
|
||||||
elseif !s:syn_xmlish(prev_syn_eol)
|
|
||||||
if prev_line =~ '\(&&\|||\|=>\|[([{]\|`\)$'
|
|
||||||
" <div>
|
|
||||||
" {
|
|
||||||
" }
|
|
||||||
" </div>
|
|
||||||
if line =~ '^[)\]}]'
|
|
||||||
return prev_ind
|
|
||||||
else
|
|
||||||
return prev_ind + s:sw()
|
|
||||||
endif
|
|
||||||
else
|
|
||||||
return prev_ind
|
|
||||||
endif
|
|
||||||
else
|
else
|
||||||
return prev_ind
|
return indent(prev_lnum)
|
||||||
endif
|
endif
|
||||||
elseif s:syn_jsx_escapejs(current_syn)
|
elseif syntax_context == 'jsxTaggedRegion'
|
||||||
if line =~ '^}'
|
if s:is_closing_tag(start_syntax)
|
||||||
let char = getline('.')[col('.') - 1]
|
return s:jsx_indent_closing_tag(v:lnum)
|
||||||
" When pressing enter after the }, keep the indent
|
elseif s:is_jsx_comment(start_syntax)
|
||||||
if char != '}' && search('}', 'b', lnum)
|
return s:jsx_indent_comment(v:lnum)
|
||||||
return indent(lnum)
|
else
|
||||||
else
|
return indent(s:prev_lnum(v:lnum)) + s:sw()
|
||||||
let pair_line = searchpair('{', '', '}', 'bW')
|
|
||||||
return indent(pair_line)
|
|
||||||
endif
|
|
||||||
elseif line =~ '^{' || line =~ '^\${'
|
|
||||||
if s:syn_jsx_escapejs(prev_syn_eol)
|
|
||||||
\ || s:syn_jsx_attrib(prev_syn_sol)
|
|
||||||
return prev_ind
|
|
||||||
elseif s:syn_xmlish(prev_syn_eol) && (prev_line =~ s:end_tag || prev_line =~ '-->$')
|
|
||||||
return prev_ind
|
|
||||||
else
|
|
||||||
return prev_ind + s:sw()
|
|
||||||
endif
|
|
||||||
endif
|
endif
|
||||||
elseif line =~ '^`' && s:syn_jsx_escapejs(current_syn_eol)
|
elseif syntax_context == 'jsxElement'
|
||||||
" For `} of template syntax
|
if s:is_jsx_comment(start_syntax)
|
||||||
let pair_line = searchpair('{', '', '}', 'bW')
|
return s:jsx_indent_comment(v:lnum)
|
||||||
return indent(pair_line)
|
endif
|
||||||
elseif line =~ '^/[/*]' " js comment in jsx tag
|
|
||||||
if get(prev_syn_sol, -1) =~ 'Punct'
|
if s:is_comment(start_syntax)
|
||||||
return prev_ind + s:sw()
|
return s:jsx_indent_comment(v:lnum)
|
||||||
elseif synIDattr(synID(lnum - 1, 1, 1), 'name') =~ 'jsxTag'
|
endif
|
||||||
return prev_ind
|
|
||||||
|
return s:jsx_indent_element(v:lnum)
|
||||||
|
elseif syntax_context == 'jsxExpressionBlock'
|
||||||
|
let prev_lnum = s:prev_lnum(v:lnum)
|
||||||
|
let prev_line = s:trim(getline(prev_lnum))
|
||||||
|
|
||||||
|
if line =~ '^?'
|
||||||
|
return indent(prev_lnum) + s:sw()
|
||||||
|
elseif line =~ '^:'
|
||||||
|
return indent(prev_lnum)
|
||||||
else
|
else
|
||||||
return a:js_indent()
|
return a:js_indent()
|
||||||
endif
|
endif
|
||||||
else
|
|
||||||
let ind = a:js_indent()
|
|
||||||
|
|
||||||
" Issue #68
|
|
||||||
" return (<div>
|
|
||||||
" |<div>)
|
|
||||||
if (line =~ '^/\s*>' || line =~ '^<\s*' . s:end_tag)
|
|
||||||
\ && !s:syn_xmlish(prev_syn_sol)
|
|
||||||
return prev_ind
|
|
||||||
endif
|
|
||||||
|
|
||||||
" If current syntax is not a jsx syntax group
|
|
||||||
if s:syn_xmlish(prev_syn_eol) && line !~ '^[)\]}]'
|
|
||||||
let sol = matchstr(line, s:opfirst)
|
|
||||||
if sol is ''
|
|
||||||
" Fix javascript continue indent
|
|
||||||
return ind - s:sw()
|
|
||||||
else
|
|
||||||
return ind
|
|
||||||
endif
|
|
||||||
endif
|
|
||||||
return ind
|
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
return a:js_indent()
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
endif
|
endif
|
||||||
|
|||||||
@@ -1,30 +1,11 @@
|
|||||||
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'julia') == -1
|
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'julia') == -1
|
||||||
|
|
||||||
function! julia#set_syntax_version(jvers)
|
function! julia#set_syntax_version(jvers)
|
||||||
if &filetype != "julia"
|
echo "The julia#set_syntax_version function is deprecated"
|
||||||
echo "Not a Julia file"
|
|
||||||
return
|
|
||||||
endif
|
|
||||||
syntax clear
|
|
||||||
let b:julia_syntax_version = a:jvers
|
|
||||||
set filetype=julia
|
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
function! julia#toggle_deprecated_syntax()
|
function! julia#toggle_deprecated_syntax()
|
||||||
if &filetype != "julia"
|
echo "The julia#toggle_deprecated_syntax function is deprecated"
|
||||||
echo "Not a Julia file"
|
|
||||||
return
|
|
||||||
endif
|
|
||||||
syntax clear
|
|
||||||
let hd = get(b:, "julia_syntax_highlight_deprecated",
|
|
||||||
\ get(g:, "julia_syntax_highlight_deprecated", 0))
|
|
||||||
let b:julia_syntax_highlight_deprecated = hd ? 0 : 1
|
|
||||||
set filetype=julia
|
|
||||||
if b:julia_syntax_highlight_deprecated
|
|
||||||
echo "Highlighting of deprecated syntax enabled"
|
|
||||||
else
|
|
||||||
echo "Highlighting of deprecated syntax disabled"
|
|
||||||
endif
|
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
if exists("loaded_matchit")
|
if exists("loaded_matchit")
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'julia') == -1
|
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'julia') == -1
|
||||||
|
|
||||||
" This file is autogenerated from the script 'generate_latex_symbols_table.jl'
|
" This file is autogenerated from the script 'generate_latex_symbols_table.jl'
|
||||||
" The symbols are based on Julia version 1.3.0-DEV.263
|
" The symbols are based on Julia version 1.5.0-DEV.67
|
||||||
|
|
||||||
scriptencoding utf-8
|
scriptencoding utf-8
|
||||||
|
|
||||||
@@ -658,7 +658,9 @@ function! julia_latex_symbols#get_dict()
|
|||||||
\ '\nequiv': '≢',
|
\ '\nequiv': '≢',
|
||||||
\ '\Equiv': '≣',
|
\ '\Equiv': '≣',
|
||||||
\ '\le': '≤',
|
\ '\le': '≤',
|
||||||
|
\ '\leq': '≤',
|
||||||
\ '\ge': '≥',
|
\ '\ge': '≥',
|
||||||
|
\ '\geq': '≥',
|
||||||
\ '\leqq': '≦',
|
\ '\leqq': '≦',
|
||||||
\ '\geqq': '≧',
|
\ '\geqq': '≧',
|
||||||
\ '\lneqq': '≨',
|
\ '\lneqq': '≨',
|
||||||
|
|||||||
744
autoload/ledger.vim
Normal file
744
autoload/ledger.vim
Normal file
@@ -0,0 +1,744 @@
|
|||||||
|
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'ledger') == -1
|
||||||
|
|
||||||
|
scriptencoding utf-8
|
||||||
|
" vim:ts=2:sw=2:sts=2:foldmethod=marker
|
||||||
|
function! ledger#transaction_state_toggle(lnum, ...) abort
|
||||||
|
if a:0 == 1
|
||||||
|
let chars = a:1
|
||||||
|
else
|
||||||
|
let chars = ' *'
|
||||||
|
endif
|
||||||
|
let trans = s:transaction.from_lnum(a:lnum)
|
||||||
|
if empty(trans) || has_key(trans, 'expr')
|
||||||
|
return
|
||||||
|
endif
|
||||||
|
|
||||||
|
let old = has_key(trans, 'state') ? trans['state'] : ' '
|
||||||
|
let i = stridx(chars, old) + 1
|
||||||
|
let new = chars[i >= len(chars) ? 0 : i]
|
||||||
|
|
||||||
|
call trans.set_state(new)
|
||||||
|
|
||||||
|
call setline(trans['head'], trans.format_head())
|
||||||
|
endf
|
||||||
|
|
||||||
|
function! ledger#transaction_state_set(lnum, char) abort
|
||||||
|
" modifies or sets the state of the transaction at the cursor,
|
||||||
|
" removing the state altogether if a:char is empty
|
||||||
|
let trans = s:transaction.from_lnum(a:lnum)
|
||||||
|
if empty(trans) || has_key(trans, 'expr')
|
||||||
|
return
|
||||||
|
endif
|
||||||
|
|
||||||
|
call trans.set_state(a:char)
|
||||||
|
|
||||||
|
call setline(trans['head'], trans.format_head())
|
||||||
|
endf
|
||||||
|
|
||||||
|
function! ledger#transaction_date_set(lnum, type, ...) abort
|
||||||
|
let time = a:0 == 1 ? a:1 : localtime()
|
||||||
|
let trans = s:transaction.from_lnum(a:lnum)
|
||||||
|
if empty(trans) || has_key(trans, 'expr')
|
||||||
|
return
|
||||||
|
endif
|
||||||
|
|
||||||
|
let formatted = strftime(g:ledger_date_format, time)
|
||||||
|
if has_key(trans, 'date') && ! empty(trans['date'])
|
||||||
|
let date = split(trans['date'], '=')
|
||||||
|
else
|
||||||
|
let date = [formatted]
|
||||||
|
endif
|
||||||
|
|
||||||
|
if a:type =~? 'effective\|actual'
|
||||||
|
echoerr 'actual/effective arguments were replaced by primary/auxiliary'
|
||||||
|
return
|
||||||
|
endif
|
||||||
|
|
||||||
|
if a:type ==? 'primary'
|
||||||
|
let date[0] = formatted
|
||||||
|
elseif a:type ==? 'auxiliary'
|
||||||
|
if time < 0
|
||||||
|
" remove auxiliary date
|
||||||
|
let date = [date[0]]
|
||||||
|
else
|
||||||
|
" set auxiliary date
|
||||||
|
if len(date) >= 2
|
||||||
|
let date[1] = formatted
|
||||||
|
else
|
||||||
|
call add(date, formatted)
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
elseif a:type ==? 'unshift'
|
||||||
|
let date = [formatted, date[0]]
|
||||||
|
endif
|
||||||
|
|
||||||
|
let trans['date'] = join(date[0:1], '=')
|
||||||
|
|
||||||
|
call setline(trans['head'], trans.format_head())
|
||||||
|
endf
|
||||||
|
|
||||||
|
" == get transactions ==
|
||||||
|
|
||||||
|
function! ledger#transaction_from_lnum(lnum) abort
|
||||||
|
return s:transaction.from_lnum(a:lnum)
|
||||||
|
endf
|
||||||
|
|
||||||
|
function! ledger#transactions(...) abort
|
||||||
|
if a:0 == 2
|
||||||
|
let lnum = a:1
|
||||||
|
let end = a:2
|
||||||
|
elseif a:0 == 0
|
||||||
|
let lnum = 1
|
||||||
|
let end = line('$')
|
||||||
|
else
|
||||||
|
throw 'wrong number of arguments for get_transactions()'
|
||||||
|
return []
|
||||||
|
endif
|
||||||
|
|
||||||
|
" safe view / position
|
||||||
|
let view = winsaveview()
|
||||||
|
let fe = &foldenable
|
||||||
|
set nofoldenable
|
||||||
|
|
||||||
|
let transactions = []
|
||||||
|
call cursor(lnum, 0)
|
||||||
|
while lnum && lnum < end
|
||||||
|
let trans = s:transaction.from_lnum(lnum)
|
||||||
|
if ! empty(trans)
|
||||||
|
call add(transactions, trans)
|
||||||
|
call cursor(trans['tail'], 0)
|
||||||
|
endif
|
||||||
|
let lnum = search('^[~=[:digit:]]', 'cW')
|
||||||
|
endw
|
||||||
|
|
||||||
|
" restore view / position
|
||||||
|
let &foldenable = fe
|
||||||
|
call winrestview(view)
|
||||||
|
|
||||||
|
return transactions
|
||||||
|
endf
|
||||||
|
|
||||||
|
" == transaction object implementation ==
|
||||||
|
|
||||||
|
let s:transaction = {} "{{{1
|
||||||
|
function! s:transaction.new() abort dict
|
||||||
|
return copy(s:transaction)
|
||||||
|
endf
|
||||||
|
|
||||||
|
function! s:transaction.from_lnum(lnum) abort dict "{{{2
|
||||||
|
let [head, tail] = s:get_transaction_extents(a:lnum)
|
||||||
|
if ! head
|
||||||
|
return {}
|
||||||
|
endif
|
||||||
|
|
||||||
|
let trans = copy(s:transaction)
|
||||||
|
let trans['head'] = head
|
||||||
|
let trans['tail'] = tail
|
||||||
|
|
||||||
|
" split off eventual comments at the end of line
|
||||||
|
let line = split(getline(head), '\ze\s*\%(\t\| \);', 1)
|
||||||
|
if len(line) > 1
|
||||||
|
let trans['appendix'] = join(line[1:], '')
|
||||||
|
endif
|
||||||
|
|
||||||
|
" parse rest of line
|
||||||
|
" FIXME (minor): will not preserve spacing (see 'join(parts)')
|
||||||
|
let parts = split(line[0], '\s\+')
|
||||||
|
if parts[0] ==# '~'
|
||||||
|
let trans['expr'] = join(parts[1:])
|
||||||
|
return trans
|
||||||
|
elseif parts[0] ==# '='
|
||||||
|
let trans['auto'] = join(parts[1:])
|
||||||
|
return trans
|
||||||
|
elseif parts[0] !~# '^\d'
|
||||||
|
" this case is avoided in s:get_transaction_extents(),
|
||||||
|
" but we'll check anyway.
|
||||||
|
return {}
|
||||||
|
endif
|
||||||
|
|
||||||
|
for part in parts
|
||||||
|
if ! has_key(trans, 'date') && part =~# '^\d'
|
||||||
|
let trans['date'] = part
|
||||||
|
elseif ! has_key(trans, 'code') && part =~# '^([^)]*)$'
|
||||||
|
let trans['code'] = part[1:-2]
|
||||||
|
elseif ! has_key(trans, 'state') && part =~# '^[[:punct:]]$'
|
||||||
|
" the first character by itself is assumed to be the state of the transaction.
|
||||||
|
let trans['state'] = part
|
||||||
|
else
|
||||||
|
" everything after date/code or state belongs to the description
|
||||||
|
break
|
||||||
|
endif
|
||||||
|
call remove(parts, 0)
|
||||||
|
endfor
|
||||||
|
|
||||||
|
let trans['description'] = join(parts)
|
||||||
|
return trans
|
||||||
|
endf "}}}
|
||||||
|
|
||||||
|
function! s:transaction.set_state(char) abort dict "{{{2
|
||||||
|
if has_key(self, 'state') && a:char =~# '^\s*$'
|
||||||
|
call remove(self, 'state')
|
||||||
|
else
|
||||||
|
let self['state'] = a:char
|
||||||
|
endif
|
||||||
|
endf "}}}
|
||||||
|
|
||||||
|
function! s:transaction.parse_body(...) abort dict "{{{2
|
||||||
|
if a:0 == 2
|
||||||
|
let head = a:1
|
||||||
|
let tail = a:2
|
||||||
|
elseif a:0 == 0
|
||||||
|
let head = self['head']
|
||||||
|
let tail = self['tail']
|
||||||
|
else
|
||||||
|
throw 'wrong number of arguments for parse_body()'
|
||||||
|
return []
|
||||||
|
endif
|
||||||
|
|
||||||
|
if ! head || tail <= head
|
||||||
|
return []
|
||||||
|
endif
|
||||||
|
|
||||||
|
let lnum = head
|
||||||
|
let tags = {}
|
||||||
|
let postings = []
|
||||||
|
while lnum <= tail
|
||||||
|
let line = split(getline(lnum), '\s*\%(\t\| \);', 1)
|
||||||
|
|
||||||
|
if line[0] =~# '^\s\+[^[:blank:];]'
|
||||||
|
" posting
|
||||||
|
let [state, rest] = matchlist(line[0], '^\s\+\([*!]\?\)\s*\(.*\)$')[1:2]
|
||||||
|
if rest =~# '\t\| '
|
||||||
|
let [account, amount] = matchlist(rest, '^\(.\{-}\)\%(\t\| \)\s*\(.\{-}\)\s*$')[1:2]
|
||||||
|
else
|
||||||
|
let amount = ''
|
||||||
|
let account = matchstr(rest, '^\s*\zs.\{-}\ze\s*$')
|
||||||
|
endif
|
||||||
|
call add(postings, {'account': account, 'amount': amount, 'state': state})
|
||||||
|
end
|
||||||
|
|
||||||
|
" where are tags to be stored?
|
||||||
|
if empty(postings)
|
||||||
|
" they belong to the transaction
|
||||||
|
let tag_container = tags
|
||||||
|
else
|
||||||
|
" they belong to last posting
|
||||||
|
if ! has_key(postings[-1], 'tags')
|
||||||
|
let postings[-1]['tags'] = {}
|
||||||
|
endif
|
||||||
|
let tag_container = postings[-1]['tags']
|
||||||
|
endif
|
||||||
|
|
||||||
|
let comment = join(line[1:], ' ;')
|
||||||
|
if comment =~# '^\s*:'
|
||||||
|
" tags without values
|
||||||
|
for t in s:findall(comment, ':\zs[^:[:blank:]]\([^:]*[^:[:blank:]]\)\?\ze:')
|
||||||
|
let tag_container[t] = ''
|
||||||
|
endfor
|
||||||
|
elseif comment =~# '^\s*[^:[:blank:]][^:]\+:'
|
||||||
|
" tag with value
|
||||||
|
let key = matchstr(comment, '^\s*\zs[^:]\+\ze:')
|
||||||
|
if ! empty(key)
|
||||||
|
let val = matchstr(comment, ':\s*\zs.*\ze\s*$')
|
||||||
|
let tag_container[key] = val
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
let lnum += 1
|
||||||
|
endw
|
||||||
|
return [tags, postings]
|
||||||
|
endf "}}}
|
||||||
|
|
||||||
|
function! s:transaction.format_head() abort dict "{{{2
|
||||||
|
if has_key(self, 'expr')
|
||||||
|
return '~ '.self['expr']
|
||||||
|
elseif has_key(self, 'auto')
|
||||||
|
return '= '.self['auto']
|
||||||
|
endif
|
||||||
|
|
||||||
|
let parts = []
|
||||||
|
if has_key(self, 'date') | call add(parts, self['date']) | endif
|
||||||
|
if has_key(self, 'state') | call add(parts, self['state']) | endif
|
||||||
|
if has_key(self, 'code') | call add(parts, '('.self['code'].')') | endif
|
||||||
|
if has_key(self, 'description') | call add(parts, self['description']) | endif
|
||||||
|
|
||||||
|
let line = join(parts)
|
||||||
|
if has_key(self, 'appendix') | let line .= self['appendix'] | endif
|
||||||
|
|
||||||
|
return line
|
||||||
|
endf "}}}
|
||||||
|
"}}}
|
||||||
|
|
||||||
|
" == helper functions ==
|
||||||
|
|
||||||
|
" get a list of declared accounts in the buffer
|
||||||
|
function! ledger#declared_accounts(...) abort
|
||||||
|
if a:0 == 2
|
||||||
|
let lnum = a:1
|
||||||
|
let lend = a:2
|
||||||
|
elseif a:0 == 0
|
||||||
|
let lnum = 1
|
||||||
|
let lend = line('$')
|
||||||
|
else
|
||||||
|
throw 'wrong number of arguments for ledger#declared_accounts()'
|
||||||
|
return []
|
||||||
|
endif
|
||||||
|
|
||||||
|
" save view / position
|
||||||
|
let view = winsaveview()
|
||||||
|
let fe = &foldenable
|
||||||
|
set nofoldenable
|
||||||
|
|
||||||
|
let accounts = []
|
||||||
|
call cursor(lnum, 0)
|
||||||
|
while 1
|
||||||
|
let lnum = search('^account\s', 'cW', lend)
|
||||||
|
if !lnum || lnum > lend
|
||||||
|
break
|
||||||
|
endif
|
||||||
|
|
||||||
|
" remove comments at the end and "account" at the front
|
||||||
|
let line = split(getline(lnum), '\s\+;')[0]
|
||||||
|
let line = matchlist(line, 'account\s\+\(.\+\)')[1]
|
||||||
|
|
||||||
|
if len(line) > 1
|
||||||
|
call add(accounts, line)
|
||||||
|
endif
|
||||||
|
|
||||||
|
call cursor(lnum+1,0)
|
||||||
|
endw
|
||||||
|
|
||||||
|
" restore view / position
|
||||||
|
let &foldenable = fe
|
||||||
|
call winrestview(view)
|
||||||
|
|
||||||
|
return accounts
|
||||||
|
endf
|
||||||
|
|
||||||
|
function! s:get_transaction_extents(lnum) abort
|
||||||
|
if ! (indent(a:lnum) || getline(a:lnum) =~# '^[~=[:digit:]]')
|
||||||
|
" only do something if lnum is in a transaction
|
||||||
|
return [0, 0]
|
||||||
|
endif
|
||||||
|
|
||||||
|
" safe view / position
|
||||||
|
let view = winsaveview()
|
||||||
|
let fe = &foldenable
|
||||||
|
set nofoldenable
|
||||||
|
|
||||||
|
call cursor(a:lnum, 0)
|
||||||
|
let head = search('^[~=[:digit:]]', 'bcnW')
|
||||||
|
let tail = search('^[^;[:blank:]]\S\+', 'nW')
|
||||||
|
let tail = tail > head ? tail - 1 : line('$')
|
||||||
|
|
||||||
|
" restore view / position
|
||||||
|
let &foldenable = fe
|
||||||
|
call winrestview(view)
|
||||||
|
|
||||||
|
return head ? [head, tail] : [0, 0]
|
||||||
|
endf
|
||||||
|
|
||||||
|
function! ledger#find_in_tree(tree, levels) abort
|
||||||
|
if empty(a:levels)
|
||||||
|
return []
|
||||||
|
endif
|
||||||
|
let results = []
|
||||||
|
let currentlvl = a:levels[0]
|
||||||
|
let nextlvls = a:levels[1:]
|
||||||
|
let branches = ledger#filter_items(keys(a:tree), currentlvl)
|
||||||
|
for branch in branches
|
||||||
|
let exact = empty(nextlvls)
|
||||||
|
call add(results, [branch, exact])
|
||||||
|
if ! empty(nextlvls)
|
||||||
|
for [result, exact] in ledger#find_in_tree(a:tree[branch], nextlvls)
|
||||||
|
call add(results, [branch.':'.result, exact])
|
||||||
|
endfor
|
||||||
|
endif
|
||||||
|
endfor
|
||||||
|
return results
|
||||||
|
endf
|
||||||
|
|
||||||
|
function! ledger#filter_items(list, keyword) abort
|
||||||
|
" return only those items that start with a specified keyword
|
||||||
|
return filter(copy(a:list), 'v:val =~ ''^\V'.substitute(a:keyword, '\\', '\\\\', 'g').'''')
|
||||||
|
endf
|
||||||
|
|
||||||
|
function! s:findall(text, rx) abort
|
||||||
|
" returns all the matches in a string,
|
||||||
|
" there will be overlapping matches according to :help match()
|
||||||
|
let matches = []
|
||||||
|
|
||||||
|
while 1
|
||||||
|
let m = matchstr(a:text, a:rx, 0, len(matches)+1)
|
||||||
|
if empty(m)
|
||||||
|
break
|
||||||
|
endif
|
||||||
|
|
||||||
|
call add(matches, m)
|
||||||
|
endw
|
||||||
|
|
||||||
|
return matches
|
||||||
|
endf
|
||||||
|
|
||||||
|
" Move the cursor to the specified column, filling the line with spaces if necessary.
|
||||||
|
" Ensure that at least min_spaces are added, and go to the end of the line if
|
||||||
|
" the line is already too long
|
||||||
|
function! s:goto_col(pos, min_spaces) abort
|
||||||
|
exec 'normal!' '$'
|
||||||
|
let diff = max([a:min_spaces, a:pos - virtcol('.')])
|
||||||
|
if diff > 0 | exec 'normal!' diff . 'a ' | endif
|
||||||
|
endf
|
||||||
|
|
||||||
|
" Return character position of decimal separator (multibyte safe)
|
||||||
|
function! s:decimalpos(expr) abort
|
||||||
|
let pos = match(a:expr, '\V' . g:ledger_decimal_sep)
|
||||||
|
if pos > 0
|
||||||
|
let pos = strchars(a:expr[:pos]) - 1
|
||||||
|
endif
|
||||||
|
return pos
|
||||||
|
endf
|
||||||
|
|
||||||
|
" Align the amount expression after an account name at the decimal point.
|
||||||
|
"
|
||||||
|
" This function moves the amount expression of a posting so that the decimal
|
||||||
|
" separator is aligned at the column specified by g:ledger_align_at.
|
||||||
|
"
|
||||||
|
" For example, after selecting:
|
||||||
|
"
|
||||||
|
" 2015/05/09 Some Payee
|
||||||
|
" Expenses:Other $120,23 ; Tags here
|
||||||
|
" Expenses:Something $-4,99
|
||||||
|
" Expenses:More ($12,34 + $16,32)
|
||||||
|
"
|
||||||
|
" :'<,'>call ledger#align_commodity() produces:
|
||||||
|
"
|
||||||
|
" 2015/05/09 Some Payee
|
||||||
|
" Expenses:Other $120,23 ; Tags here
|
||||||
|
" Expenses:Something $-4,99
|
||||||
|
" Expenses:More ($12,34 + $16,32)
|
||||||
|
"
|
||||||
|
function! ledger#align_commodity() abort
|
||||||
|
" Extract the part of the line after the account name (excluding spaces):
|
||||||
|
let l:line = getline('.')
|
||||||
|
let rhs = matchstr(l:line, '\m^\s\+[^;[:space:]].\{-}\(\t\| \)\s*\zs.*$')
|
||||||
|
if rhs !=# ''
|
||||||
|
" Remove everything after the account name (including spaces):
|
||||||
|
call setline('.', substitute(l:line, '\m^\s\+[^[:space:]].\{-}\zs\(\t\| \).*$', '', ''))
|
||||||
|
let pos = -1
|
||||||
|
if g:ledger_decimal_sep !=# ''
|
||||||
|
" Find the position of the first decimal separator:
|
||||||
|
let pos = s:decimalpos(rhs)
|
||||||
|
endif
|
||||||
|
if pos < 0
|
||||||
|
" Find the position after the first digits
|
||||||
|
let pos = matchend(rhs, '\m\d[^[:space:]]*')
|
||||||
|
endif
|
||||||
|
" Go to the column that allows us to align the decimal separator at g:ledger_align_at:
|
||||||
|
if pos > 0
|
||||||
|
call s:goto_col(g:ledger_align_at - pos - 1, 2)
|
||||||
|
else
|
||||||
|
call s:goto_col(g:ledger_align_at - strdisplaywidth(rhs) - 2, 2)
|
||||||
|
endif " Append the part of the line that was previously removed:
|
||||||
|
exe 'normal! a' . rhs
|
||||||
|
endif
|
||||||
|
endf
|
||||||
|
|
||||||
|
" Align the amount under the cursor and append/prepend the default currency.
|
||||||
|
function! ledger#align_amount_at_cursor() abort
|
||||||
|
" Select and cut text:
|
||||||
|
normal! viWd
|
||||||
|
" Find the position of the decimal separator
|
||||||
|
let pos = s:decimalpos(@") " Returns zero when the separator is the empty string
|
||||||
|
if pos <= 0
|
||||||
|
let pos = len(@")
|
||||||
|
endif
|
||||||
|
" Paste text at the correct column and append/prepend default commodity:
|
||||||
|
if g:ledger_commodity_before
|
||||||
|
call s:goto_col(g:ledger_align_at - pos - len(g:ledger_default_commodity) - len(g:ledger_commodity_sep) - 1, 2)
|
||||||
|
exe 'normal! a' . g:ledger_default_commodity . g:ledger_commodity_sep
|
||||||
|
normal! p
|
||||||
|
else
|
||||||
|
call s:goto_col(g:ledger_align_at - pos - 1, 2)
|
||||||
|
exe 'normal! pa' . g:ledger_commodity_sep . g:ledger_default_commodity
|
||||||
|
endif
|
||||||
|
endf
|
||||||
|
|
||||||
|
" Report generation {{{1
|
||||||
|
|
||||||
|
" Helper functions and variables {{{2
|
||||||
|
" Position of report windows
|
||||||
|
let s:winpos_map = {
|
||||||
|
\ 'T': 'to new', 't': 'abo new', 'B': 'bo new', 'b': 'bel new',
|
||||||
|
\ 'L': 'to vnew', 'l': 'abo vnew', 'R': 'bo vnew', 'r': 'bel vnew'
|
||||||
|
\ }
|
||||||
|
|
||||||
|
function! s:error_message(msg) abort
|
||||||
|
redraw " See h:echo-redraw
|
||||||
|
echohl ErrorMsg
|
||||||
|
echo "\r"
|
||||||
|
echomsg a:msg
|
||||||
|
echohl NONE
|
||||||
|
endf
|
||||||
|
|
||||||
|
function! s:warning_message(msg) abort
|
||||||
|
redraw " See h:echo-redraw
|
||||||
|
echohl WarningMsg
|
||||||
|
echo "\r"
|
||||||
|
echomsg a:msg
|
||||||
|
echohl NONE
|
||||||
|
endf
|
||||||
|
|
||||||
|
" Open the quickfix/location window when it is not empty,
|
||||||
|
" closes it if it is empty.
|
||||||
|
"
|
||||||
|
" Optional parameters:
|
||||||
|
" a:1 Quickfix window title.
|
||||||
|
" a:2 Message to show when the window is empty.
|
||||||
|
"
|
||||||
|
" Returns 0 if the quickfix window is empty, 1 otherwise.
|
||||||
|
function! s:quickfix_toggle(...) abort
|
||||||
|
if g:ledger_use_location_list
|
||||||
|
let l:list = 'l'
|
||||||
|
let l:open = (len(getloclist(winnr())) > 0)
|
||||||
|
else
|
||||||
|
let l:list = 'c'
|
||||||
|
let l:open = (len(getqflist()) > 0)
|
||||||
|
endif
|
||||||
|
|
||||||
|
if l:open
|
||||||
|
execute (g:ledger_qf_vertical ? 'vert' : 'botright') l:list.'open' g:ledger_qf_size
|
||||||
|
" Set local mappings to quit the quickfix window or lose focus.
|
||||||
|
nnoremap <silent> <buffer> <tab> <c-w><c-w>
|
||||||
|
execute 'nnoremap <silent> <buffer> q :' l:list.'close<CR>'
|
||||||
|
" Note that the following settings do not persist (e.g., when you close and re-open the quickfix window).
|
||||||
|
" See: https://superuser.com/questions/356912/how-do-i-change-the-quickix-title-status-bar-in-vim
|
||||||
|
if g:ledger_qf_hide_file
|
||||||
|
setl conceallevel=2
|
||||||
|
setl concealcursor=nc
|
||||||
|
syntax match qfFile /^[^|]*/ transparent conceal
|
||||||
|
endif
|
||||||
|
if a:0 > 0
|
||||||
|
let w:quickfix_title = a:1
|
||||||
|
endif
|
||||||
|
return 1
|
||||||
|
endif
|
||||||
|
|
||||||
|
execute l:list.'close'
|
||||||
|
call s:warning_message((a:0 > 1) ? a:2 : 'No results')
|
||||||
|
return 0
|
||||||
|
endf
|
||||||
|
|
||||||
|
" Populate a quickfix/location window with data. The argument must be a String
|
||||||
|
" or a List.
|
||||||
|
function! s:quickfix_populate(data) abort
|
||||||
|
" Note that cexpr/lexpr always uses the global value of errorformat
|
||||||
|
let l:efm = &errorformat " Save global errorformat
|
||||||
|
set errorformat=%EWhile\ parsing\ file\ \"%f\"\\,\ line\ %l:,%ZError:\ %m,%-C%.%#
|
||||||
|
set errorformat+=%tarning:\ \"%f\"\\,\ line\ %l:\ %m
|
||||||
|
" Format to parse command-line errors:
|
||||||
|
set errorformat+=Error:\ %m
|
||||||
|
" Format to parse reports:
|
||||||
|
set errorformat+=%f:%l\ %m
|
||||||
|
set errorformat+=%-G%.%#
|
||||||
|
execute (g:ledger_use_location_list ? 'l' : 'c').'getexpr' 'a:data'
|
||||||
|
let &errorformat = l:efm " Restore global errorformat
|
||||||
|
return
|
||||||
|
endf
|
||||||
|
|
||||||
|
" Build a ledger command to process the given file.
|
||||||
|
function! s:ledger_cmd(file, args) abort
|
||||||
|
let l:options = g:ledger_extra_options
|
||||||
|
if len(g:ledger_date_format) > 0 && !g:ledger_is_hledger
|
||||||
|
let l:options = join([l:options, '--date-format', g:ledger_date_format,
|
||||||
|
\ '--input-date-format', g:ledger_date_format])
|
||||||
|
endif
|
||||||
|
return join([g:ledger_bin, l:options, '-f', shellescape(expand(a:file)), a:args])
|
||||||
|
endf
|
||||||
|
" }}}
|
||||||
|
|
||||||
|
function! ledger#autocomplete_and_align() abort
|
||||||
|
if pumvisible()
|
||||||
|
return "\<c-n>"
|
||||||
|
endif
|
||||||
|
" Align an amount only if there is a digit immediately before the cursor and
|
||||||
|
" such digit is preceded by at least one space (the latter condition is
|
||||||
|
" necessary to avoid situations where a date starting at the first column is
|
||||||
|
" confused with a commodity to be aligned).
|
||||||
|
if match(getline('.'), '\s.*\d\%'.col('.').'c') > -1
|
||||||
|
normal! h
|
||||||
|
call ledger#align_amount_at_cursor()
|
||||||
|
return "\<c-o>A"
|
||||||
|
endif
|
||||||
|
return "\<c-x>\<c-o>"
|
||||||
|
endf
|
||||||
|
|
||||||
|
" Use current line as input to ledger entry and replace with output. If there
|
||||||
|
" are errors, they are echoed instead.
|
||||||
|
function! ledger#entry() abort
|
||||||
|
let l:output = systemlist(s:ledger_cmd(g:ledger_main, join(['entry', getline('.')])))
|
||||||
|
" Filter out warnings
|
||||||
|
let l:output = filter(l:output, "v:val !~? '^Warning: '")
|
||||||
|
" Errors may occur
|
||||||
|
if v:shell_error
|
||||||
|
echomsg join(l:output)
|
||||||
|
return
|
||||||
|
endif
|
||||||
|
" Append output so we insert instead of overwrite, then delete line
|
||||||
|
call append('.', l:output)
|
||||||
|
normal! "_dd
|
||||||
|
endfunc
|
||||||
|
|
||||||
|
" Run an arbitrary ledger command and show the output in a new buffer. If
|
||||||
|
" there are errors, no new buffer is opened: the errors are displayed in a
|
||||||
|
" quickfix window instead.
|
||||||
|
"
|
||||||
|
" Parameters:
|
||||||
|
" file The file to be processed.
|
||||||
|
" args A string of Ledger command-line arguments.
|
||||||
|
"
|
||||||
|
" Returns:
|
||||||
|
" Ledger's output as a String.
|
||||||
|
function! ledger#report(file, args) abort
|
||||||
|
let l:output = systemlist(s:ledger_cmd(a:file, a:args))
|
||||||
|
if v:shell_error " If there are errors, show them in a quickfix/location list.
|
||||||
|
call s:quickfix_populate(l:output)
|
||||||
|
call s:quickfix_toggle('Errors', 'Unable to parse errors')
|
||||||
|
endif
|
||||||
|
return l:output
|
||||||
|
endf
|
||||||
|
|
||||||
|
" Open the output of a Ledger's command in a new buffer.
|
||||||
|
"
|
||||||
|
" Parameters:
|
||||||
|
" report A String containing the output of a Ledger's command.
|
||||||
|
"
|
||||||
|
" Returns:
|
||||||
|
" 1 if a new buffer is created; 0 otherwise.
|
||||||
|
function! ledger#output(report) abort
|
||||||
|
if empty(a:report)
|
||||||
|
call s:warning_message('No results')
|
||||||
|
return 0
|
||||||
|
endif
|
||||||
|
" Open a new buffer to show Ledger's output.
|
||||||
|
execute get(s:winpos_map, g:ledger_winpos, 'bo new')
|
||||||
|
setlocal buftype=nofile bufhidden=wipe modifiable nobuflisted noswapfile nowrap
|
||||||
|
call append(0, a:report)
|
||||||
|
setlocal nomodifiable
|
||||||
|
" Set local mappings to quit window or lose focus.
|
||||||
|
nnoremap <silent> <buffer> <tab> <c-w><c-p>
|
||||||
|
nnoremap <silent> <buffer> q <c-w><c-p>@=winnr('#')<cr><c-w>c
|
||||||
|
" Add some coloring to the report
|
||||||
|
syntax match LedgerNumber /-\@1<!\d\+\([,.]\d\+\)*/
|
||||||
|
syntax match LedgerNegativeNumber /-\d\+\([,.]\d\+\)*/
|
||||||
|
syntax match LedgerImproperPerc /\d\d\d\+%/
|
||||||
|
return 1
|
||||||
|
endf
|
||||||
|
|
||||||
|
" Show an arbitrary register report in a quickfix list.
|
||||||
|
"
|
||||||
|
" Parameters:
|
||||||
|
" file The file to be processed
|
||||||
|
" args A string of Ledger command-line arguments.
|
||||||
|
function! ledger#register(file, args) abort
|
||||||
|
let l:cmd = s:ledger_cmd(a:file, join([
|
||||||
|
\ 'register',
|
||||||
|
\ "--format='" . g:ledger_qf_register_format . "'",
|
||||||
|
\ "--prepend-format='%(filename):%(beg_line) '",
|
||||||
|
\ a:args
|
||||||
|
\ ]))
|
||||||
|
call s:quickfix_populate(systemlist(l:cmd))
|
||||||
|
call s:quickfix_toggle('Register report')
|
||||||
|
endf
|
||||||
|
|
||||||
|
" Reconcile the given account.
|
||||||
|
" This function accepts a file path as a third optional argument.
|
||||||
|
" The default is to use the value of g:ledger_main.
|
||||||
|
"
|
||||||
|
" Parameters:
|
||||||
|
" file The file to be processed
|
||||||
|
" account An account name (String)
|
||||||
|
" target_amount The target amount (Float)
|
||||||
|
function! ledger#reconcile(file, account, target_amount) abort
|
||||||
|
let l:cmd = s:ledger_cmd(a:file, join([
|
||||||
|
\ 'register',
|
||||||
|
\ '--uncleared',
|
||||||
|
\ "--format='" . g:ledger_qf_reconcile_format . "'",
|
||||||
|
\ "--prepend-format='%(filename):%(beg_line) %(pending ? \"P\" : \"U\") '",
|
||||||
|
\ shellescape(a:account)
|
||||||
|
\ ]))
|
||||||
|
let l:file = expand(a:file) " Needed for #show_balance() later
|
||||||
|
call s:quickfix_populate(systemlist(l:cmd))
|
||||||
|
if s:quickfix_toggle('Reconcile ' . a:account, 'Nothing to reconcile')
|
||||||
|
let g:ledger_target_amount = a:target_amount
|
||||||
|
" Show updated account balance upon saving, as long as the quickfix window is open
|
||||||
|
augroup reconcile
|
||||||
|
autocmd!
|
||||||
|
execute "autocmd BufWritePost *.ldg,*.ledger call ledger#show_balance('" . l:file . "','" . a:account . "')"
|
||||||
|
autocmd BufWipeout <buffer> call <sid>finish_reconciling()
|
||||||
|
augroup END
|
||||||
|
" Add refresh shortcut
|
||||||
|
execute "nnoremap <silent> <buffer> <c-l> :<c-u>call ledger#reconcile('"
|
||||||
|
\ . l:file . "','" . a:account . "'," . string(a:target_amount) . ')<cr>'
|
||||||
|
call ledger#show_balance(l:file, a:account)
|
||||||
|
endif
|
||||||
|
endf
|
||||||
|
|
||||||
|
function! s:finish_reconciling() abort
|
||||||
|
unlet g:ledger_target_amount
|
||||||
|
augroup reconcile
|
||||||
|
autocmd!
|
||||||
|
augroup END
|
||||||
|
augroup! reconcile
|
||||||
|
endf
|
||||||
|
|
||||||
|
" Show the pending/cleared balance of an account.
|
||||||
|
" This function has an optional parameter:
|
||||||
|
"
|
||||||
|
" a:1 An account name
|
||||||
|
"
|
||||||
|
" If no account if given, the account in the current line is used.
|
||||||
|
function! ledger#show_balance(file, ...) abort
|
||||||
|
let l:account = a:0 > 0 && !empty(a:1) ? a:1 : matchstr(getline('.'), '\m\( \|\t\)\zs\S.\{-}\ze\( \|\t\|$\)')
|
||||||
|
if empty(l:account)
|
||||||
|
call s:error_message('No account found')
|
||||||
|
return
|
||||||
|
endif
|
||||||
|
let l:cmd = s:ledger_cmd(a:file, join([
|
||||||
|
\ 'cleared',
|
||||||
|
\ shellescape(l:account),
|
||||||
|
\ '--empty',
|
||||||
|
\ '--collapse',
|
||||||
|
\ "--format='%(scrub(get_at(display_total, 0)))|%(scrub(get_at(display_total, 1)))|%(quantity(scrub(get_at(display_total, 1))))'",
|
||||||
|
\ (empty(g:ledger_default_commodity) ? '' : '-X ' . shellescape(g:ledger_default_commodity))
|
||||||
|
\ ]))
|
||||||
|
let l:output = systemlist(l:cmd)
|
||||||
|
" Errors may occur, for example, when the account has multiple commodities
|
||||||
|
" and g:ledger_default_commodity is empty.
|
||||||
|
if v:shell_error
|
||||||
|
call s:quickfix_populate(l:output)
|
||||||
|
call s:quickfix_toggle('Errors', 'Unable to parse errors')
|
||||||
|
return
|
||||||
|
endif
|
||||||
|
let l:amounts = split(l:output[-1], '|')
|
||||||
|
redraw " Necessary in some cases to overwrite previous messages. See :h echo-redraw
|
||||||
|
if len(l:amounts) < 3
|
||||||
|
call s:error_message('Could not determine balance. Did you use a valid account?')
|
||||||
|
return
|
||||||
|
endif
|
||||||
|
echo g:ledger_pending_string
|
||||||
|
echohl LedgerPending
|
||||||
|
echon l:amounts[0]
|
||||||
|
echohl NONE
|
||||||
|
echon ' ' g:ledger_cleared_string
|
||||||
|
echohl LedgerCleared
|
||||||
|
echon l:amounts[1]
|
||||||
|
echohl NONE
|
||||||
|
if exists('g:ledger_target_amount')
|
||||||
|
echon ' ' g:ledger_target_string
|
||||||
|
echohl LedgerTarget
|
||||||
|
echon printf('%.2f', (g:ledger_target_amount - str2float(l:amounts[2])))
|
||||||
|
echohl NONE
|
||||||
|
endif
|
||||||
|
endf
|
||||||
|
" }}}
|
||||||
|
|
||||||
|
endif
|
||||||
244
autoload/nim.vim
Normal file
244
autoload/nim.vim
Normal file
@@ -0,0 +1,244 @@
|
|||||||
|
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'nim') == -1
|
||||||
|
|
||||||
|
let g:nim_log = []
|
||||||
|
let s:plugin_path = escape(expand('<sfile>:p:h'), '\')
|
||||||
|
|
||||||
|
if !exists("g:nim_caas_enabled")
|
||||||
|
let g:nim_caas_enabled = 0
|
||||||
|
endif
|
||||||
|
|
||||||
|
if !executable('nim')
|
||||||
|
echoerr "the Nim compiler must be in your system's PATH"
|
||||||
|
endif
|
||||||
|
|
||||||
|
if has("python3")
|
||||||
|
exe 'py3file ' . fnameescape(s:plugin_path) . '/nim_vim.py'
|
||||||
|
elseif has("python")
|
||||||
|
exe 'pyfile ' . fnameescape(s:plugin_path) . '/nim_vim.py'
|
||||||
|
endif
|
||||||
|
|
||||||
|
fun! nim#init()
|
||||||
|
let cmd = printf("nim --dump.format:json --verbosity:0 dump %s", s:CurrentNimFile())
|
||||||
|
let raw_dumpdata = system(cmd)
|
||||||
|
if !v:shell_error && expand("%:e") == "nim"
|
||||||
|
let false = 0 " Needed for eval of json
|
||||||
|
let true = 1 " Needed for eval of json
|
||||||
|
let dumpdata = eval(substitute(raw_dumpdata, "\n", "", "g"))
|
||||||
|
|
||||||
|
let b:nim_project_root = dumpdata['project_path']
|
||||||
|
let b:nim_defined_symbols = dumpdata['defined_symbols']
|
||||||
|
let b:nim_caas_enabled = g:nim_caas_enabled || index(dumpdata['defined_symbols'], 'forcecaas') != -1
|
||||||
|
|
||||||
|
for path in dumpdata['lib_paths']
|
||||||
|
if finddir(path) == path
|
||||||
|
let &l:path = path . "," . &l:path
|
||||||
|
endif
|
||||||
|
endfor
|
||||||
|
else
|
||||||
|
let b:nim_caas_enabled = 0
|
||||||
|
endif
|
||||||
|
endf
|
||||||
|
|
||||||
|
fun! s:UpdateNimLog()
|
||||||
|
setlocal buftype=nofile
|
||||||
|
setlocal bufhidden=hide
|
||||||
|
setlocal noswapfile
|
||||||
|
|
||||||
|
for entry in g:nim_log
|
||||||
|
call append(line('$'), split(entry, "\n"))
|
||||||
|
endfor
|
||||||
|
|
||||||
|
let g:nim_log = []
|
||||||
|
|
||||||
|
match Search /^nim\ .*/
|
||||||
|
endf
|
||||||
|
|
||||||
|
augroup NimVim
|
||||||
|
au!
|
||||||
|
au BufEnter log://nim call s:UpdateNimLog()
|
||||||
|
if has("python3") || has("python")
|
||||||
|
" au QuitPre * :py nimTerminateAll()
|
||||||
|
au VimLeavePre * :py nimTerminateAll()
|
||||||
|
endif
|
||||||
|
augroup END
|
||||||
|
|
||||||
|
command! NimLog :e log://nim
|
||||||
|
|
||||||
|
command! NimTerminateService
|
||||||
|
\ :exe printf("py nimTerminateService('%s')", b:nim_project_root)
|
||||||
|
|
||||||
|
command! NimRestartService
|
||||||
|
\ :exe printf("py nimRestartService('%s')", b:nim_project_root)
|
||||||
|
|
||||||
|
fun! s:CurrentNimFile()
|
||||||
|
let save_cur = getpos('.')
|
||||||
|
call cursor(0, 0, 0)
|
||||||
|
|
||||||
|
let PATTERN = "\\v^\\#\\s*included from \\zs.*\\ze"
|
||||||
|
let l = search(PATTERN, "n")
|
||||||
|
|
||||||
|
if l != 0
|
||||||
|
let f = matchstr(getline(l), PATTERN)
|
||||||
|
let l:to_check = expand('%:h') . "/" . f
|
||||||
|
else
|
||||||
|
let l:to_check = expand("%")
|
||||||
|
endif
|
||||||
|
|
||||||
|
call setpos('.', save_cur)
|
||||||
|
return l:to_check
|
||||||
|
endf
|
||||||
|
|
||||||
|
let g:nim_symbol_types = {
|
||||||
|
\ 'skParam': 'v',
|
||||||
|
\ 'skVar': 'v',
|
||||||
|
\ 'skLet': 'v',
|
||||||
|
\ 'skTemp': 'v',
|
||||||
|
\ 'skForVar': 'v',
|
||||||
|
\ 'skConst': 'v',
|
||||||
|
\ 'skResult': 'v',
|
||||||
|
\ 'skGenericParam': 't',
|
||||||
|
\ 'skType': 't',
|
||||||
|
\ 'skField': 'm',
|
||||||
|
\ 'skProc': 'f',
|
||||||
|
\ 'skMethod': 'f',
|
||||||
|
\ 'skIterator': 'f',
|
||||||
|
\ 'skConverter': 'f',
|
||||||
|
\ 'skMacro': 'f',
|
||||||
|
\ 'skTemplate': 'f',
|
||||||
|
\ 'skEnumField': 'v',
|
||||||
|
\ }
|
||||||
|
|
||||||
|
fun! NimExec(op)
|
||||||
|
let isDirty = getbufvar(bufnr('%'), "&modified")
|
||||||
|
if isDirty
|
||||||
|
let tmp = tempname() . bufname("%") . "_dirty.nim"
|
||||||
|
silent! exe ":w " . tmp
|
||||||
|
|
||||||
|
let cmd = printf("idetools %s --trackDirty:\"%s,%s,%d,%d\" \"%s\"",
|
||||||
|
\ a:op, tmp, expand('%:p'), line('.'), col('.')-1, s:CurrentNimFile())
|
||||||
|
else
|
||||||
|
let cmd = printf("idetools %s --track:\"%s,%d,%d\" \"%s\"",
|
||||||
|
\ a:op, expand('%:p'), line('.'), col('.')-1, s:CurrentNimFile())
|
||||||
|
endif
|
||||||
|
|
||||||
|
if b:nim_caas_enabled
|
||||||
|
exe printf("py nimExecCmd('%s', '%s', False)", b:nim_project_root, cmd)
|
||||||
|
let output = l:py_res
|
||||||
|
else
|
||||||
|
let output = system("nim " . cmd)
|
||||||
|
endif
|
||||||
|
|
||||||
|
call add(g:nim_log, "nim " . cmd . "\n" . output)
|
||||||
|
return output
|
||||||
|
endf
|
||||||
|
|
||||||
|
fun! NimExecAsync(op, Handler)
|
||||||
|
let result = NimExec(a:op)
|
||||||
|
call a:Handler(result)
|
||||||
|
endf
|
||||||
|
|
||||||
|
fun! NimComplete(findstart, base)
|
||||||
|
if b:nim_caas_enabled == 0
|
||||||
|
return -1
|
||||||
|
endif
|
||||||
|
|
||||||
|
if a:findstart
|
||||||
|
if synIDattr(synIDtrans(synID(line("."),col("."),1)), "name") == 'Comment'
|
||||||
|
return -1
|
||||||
|
endif
|
||||||
|
let line = getline('.')
|
||||||
|
let start = col('.') - 1
|
||||||
|
while start > 0 && line[start - 1] =~? '\w'
|
||||||
|
let start -= 1
|
||||||
|
endwhile
|
||||||
|
return start
|
||||||
|
else
|
||||||
|
let result = []
|
||||||
|
let sugOut = NimExec("--suggest")
|
||||||
|
for line in split(sugOut, '\n')
|
||||||
|
let lineData = split(line, '\t')
|
||||||
|
if len(lineData) > 0 && lineData[0] == "sug"
|
||||||
|
let word = split(lineData[2], '\.')[-1]
|
||||||
|
if a:base ==? '' || word =~# '^' . a:base
|
||||||
|
let kind = get(g:nim_symbol_types, lineData[1], '')
|
||||||
|
let c = { 'word': word, 'kind': kind, 'menu': lineData[3], 'dup': 1 }
|
||||||
|
call add(result, c)
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
endfor
|
||||||
|
return result
|
||||||
|
endif
|
||||||
|
endf
|
||||||
|
|
||||||
|
if !exists("g:neocomplcache_omni_patterns")
|
||||||
|
let g:neocomplcache_omni_patterns = {}
|
||||||
|
endif
|
||||||
|
let g:neocomplcache_omni_patterns['nim'] = '[^. *\t]\.\w*'
|
||||||
|
|
||||||
|
if !exists('g:neocomplete#sources#omni#input_patterns')
|
||||||
|
let g:neocomplete#sources#omni#input_patterns = {}
|
||||||
|
endif
|
||||||
|
let g:neocomplete#sources#omni#input_patterns['nim'] = '[^. *\t]\.\w*'
|
||||||
|
|
||||||
|
let g:nim_completion_callbacks = {}
|
||||||
|
|
||||||
|
fun! NimAsyncCmdComplete(cmd, output)
|
||||||
|
call add(g:nim_log, a:output)
|
||||||
|
echom g:nim_completion_callbacks
|
||||||
|
if has_key(g:nim_completion_callbacks, a:cmd)
|
||||||
|
let Callback = get(g:nim_completion_callbacks, a:cmd)
|
||||||
|
call Callback(a:output)
|
||||||
|
" remove(g:nim_completion_callbacks, a:cmd)
|
||||||
|
else
|
||||||
|
echom "ERROR, Unknown Command: " . a:cmd
|
||||||
|
endif
|
||||||
|
return 1
|
||||||
|
endf
|
||||||
|
|
||||||
|
fun! GotoDefinition_nim_ready(def_output)
|
||||||
|
if v:shell_error
|
||||||
|
echo "nim was unable to locate the definition. exit code: " . v:shell_error
|
||||||
|
" echoerr a:def_output
|
||||||
|
return 0
|
||||||
|
endif
|
||||||
|
|
||||||
|
let rawDef = matchstr(a:def_output, 'def\t\([^\n]*\)')
|
||||||
|
if rawDef == ""
|
||||||
|
echo "the current cursor position does not match any definitions"
|
||||||
|
return 0
|
||||||
|
endif
|
||||||
|
|
||||||
|
let defBits = split(rawDef, '\t')
|
||||||
|
let file = defBits[4]
|
||||||
|
let line = defBits[5]
|
||||||
|
exe printf("e +%d %s", line, file)
|
||||||
|
return 1
|
||||||
|
endf
|
||||||
|
|
||||||
|
fun! GotoDefinition_nim()
|
||||||
|
call NimExecAsync("--def", function("GotoDefinition_nim_ready"))
|
||||||
|
endf
|
||||||
|
|
||||||
|
fun! FindReferences_nim()
|
||||||
|
setloclist()
|
||||||
|
endf
|
||||||
|
|
||||||
|
" Syntastic syntax checking
|
||||||
|
fun! SyntaxCheckers_nim_nim_GetLocList()
|
||||||
|
let makeprg = 'nim check --hints:off --listfullpaths ' . s:CurrentNimFile()
|
||||||
|
let errorformat = &errorformat
|
||||||
|
|
||||||
|
return SyntasticMake({ 'makeprg': makeprg, 'errorformat': errorformat })
|
||||||
|
endf
|
||||||
|
|
||||||
|
function! SyntaxCheckers_nim_nim_IsAvailable()
|
||||||
|
return executable("nim")
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
if exists("g:SyntasticRegistry")
|
||||||
|
call g:SyntasticRegistry.CreateAndRegisterChecker({
|
||||||
|
\ 'filetype': 'nim',
|
||||||
|
\ 'name': 'nim'})
|
||||||
|
endif
|
||||||
|
|
||||||
|
endif
|
||||||
217
autoload/polyglot.vim
Normal file
217
autoload/polyglot.vim
Normal file
@@ -0,0 +1,217 @@
|
|||||||
|
" Line continuation is used here, remove 'C' from 'cpoptions'
|
||||||
|
let s:cpo_save = &cpo
|
||||||
|
set cpo&vim
|
||||||
|
|
||||||
|
func! polyglot#Heuristics()
|
||||||
|
" Try to detect filetype from shebang
|
||||||
|
let l:filetype = polyglot#Shebang()
|
||||||
|
if l:filetype != ""
|
||||||
|
exec "setf " . l:filetype
|
||||||
|
return
|
||||||
|
endif
|
||||||
|
endfunc
|
||||||
|
|
||||||
|
let s:interpreters = {
|
||||||
|
\ 'osascript': 'applescript',
|
||||||
|
\ 'tcc': 'c',
|
||||||
|
\ 'coffee': 'coffee',
|
||||||
|
\ 'crystal': 'crystal',
|
||||||
|
\ 'dart': 'dart',
|
||||||
|
\ 'elixir': 'elixir',
|
||||||
|
\ 'escript': 'erlang',
|
||||||
|
\ 'fish': 'fish',
|
||||||
|
\ 'gnuplot': 'gnuplot',
|
||||||
|
\ 'runhaskell': 'haskell',
|
||||||
|
\ 'chakra': 'javascript',
|
||||||
|
\ 'd8': 'javascript',
|
||||||
|
\ 'gjs': 'javascript',
|
||||||
|
\ 'js': 'javascript',
|
||||||
|
\ 'node': 'javascript',
|
||||||
|
\ 'nodejs': 'javascript',
|
||||||
|
\ 'qjs': 'javascript',
|
||||||
|
\ 'rhino': 'javascript',
|
||||||
|
\ 'v8': 'javascript',
|
||||||
|
\ 'v8-shell': 'javascript',
|
||||||
|
\ 'julia': 'julia',
|
||||||
|
\ 'lua': 'lua',
|
||||||
|
\ 'moon': 'moon',
|
||||||
|
\ 'ocaml': 'ocaml',
|
||||||
|
\ 'ocamlrun': 'ocaml',
|
||||||
|
\ 'ocamlscript': 'ocaml',
|
||||||
|
\ 'cperl': 'perl',
|
||||||
|
\ 'perl': 'perl',
|
||||||
|
\ 'php': 'php',
|
||||||
|
\ 'pwsh': 'ps1',
|
||||||
|
\ 'python': 'python',
|
||||||
|
\ 'python2': 'python',
|
||||||
|
\ 'python3': 'python',
|
||||||
|
\ 'qmake': 'qmake',
|
||||||
|
\ 'Rscript': 'r',
|
||||||
|
\ 'racket': 'racket',
|
||||||
|
\ 'perl6': 'raku',
|
||||||
|
\ 'raku': 'raku',
|
||||||
|
\ 'rakudo': 'raku',
|
||||||
|
\ 'ruby': 'ruby',
|
||||||
|
\ 'macruby': 'ruby',
|
||||||
|
\ 'rake': 'ruby',
|
||||||
|
\ 'jruby': 'ruby',
|
||||||
|
\ 'rbx': 'ruby',
|
||||||
|
\ 'scala': 'scala',
|
||||||
|
\ 'ash': 'sh',
|
||||||
|
\ 'bash': 'sh',
|
||||||
|
\ 'dash': 'sh',
|
||||||
|
\ 'ksh': 'sh',
|
||||||
|
\ 'mksh': 'sh',
|
||||||
|
\ 'pdksh': 'sh',
|
||||||
|
\ 'rc': 'sh',
|
||||||
|
\ 'sh': 'sh',
|
||||||
|
\ 'zsh': 'sh',
|
||||||
|
\ 'boolector': 'smt2',
|
||||||
|
\ 'cvc4': 'smt2',
|
||||||
|
\ 'mathsat5': 'smt2',
|
||||||
|
\ 'opensmt': 'smt2',
|
||||||
|
\ 'smtinterpol': 'smt2',
|
||||||
|
\ 'smt-rat': 'smt2',
|
||||||
|
\ 'stp': 'smt2',
|
||||||
|
\ 'verit': 'smt2',
|
||||||
|
\ 'yices2': 'smt2',
|
||||||
|
\ 'z3': 'smt2',
|
||||||
|
\ 'deno': 'typescript',
|
||||||
|
\ 'ts-node': 'typescript',
|
||||||
|
\ }
|
||||||
|
|
||||||
|
let s:r_hashbang = '^#!\s*\(\S\+\)\s*\(.*\)\s*'
|
||||||
|
let s:r_envflag = '%(\S\+=\S\+\|-[iS]\|--ignore-environment\|--split-string\)'
|
||||||
|
let s:r_env = '^\%(\' . s:r_envflag . '\s\+\)*\(\S\+\)'
|
||||||
|
|
||||||
|
func! polyglot#Shebang()
|
||||||
|
let l:line1 = getline(1)
|
||||||
|
|
||||||
|
if l:line1 !~# "^#!"
|
||||||
|
return
|
||||||
|
endif
|
||||||
|
|
||||||
|
let l:pathrest = matchlist(l:line1, s:r_hashbang)
|
||||||
|
|
||||||
|
if len(l:pathrest) == 0
|
||||||
|
return
|
||||||
|
endif
|
||||||
|
|
||||||
|
let [_, l:path, l:rest; __] = l:pathrest
|
||||||
|
|
||||||
|
let l:script = split(l:path, "/")[-1]
|
||||||
|
|
||||||
|
if l:script == "env"
|
||||||
|
let l:argspath = matchlist(l:rest, s:r_env)
|
||||||
|
if len(l:argspath) == 0
|
||||||
|
return
|
||||||
|
endif
|
||||||
|
|
||||||
|
let l:script = l:argspath[1]
|
||||||
|
endif
|
||||||
|
|
||||||
|
if has_key(s:interpreters, l:script)
|
||||||
|
return s:interpreters[l:script]
|
||||||
|
endif
|
||||||
|
|
||||||
|
for interpreter in keys(s:interpreters)
|
||||||
|
if l:script =~# '^' . interpreter
|
||||||
|
return s:interpreters[interpreter]
|
||||||
|
endif
|
||||||
|
endfor
|
||||||
|
endfunc
|
||||||
|
|
||||||
|
func! polyglot#DetectInpFiletype()
|
||||||
|
let line = getline(1)
|
||||||
|
if line =~# '^\*'
|
||||||
|
setf abaqus | return
|
||||||
|
endif
|
||||||
|
for lnum in range(1, min([line("$"), 500]))
|
||||||
|
let line = getline(lnum)
|
||||||
|
if line =~? '^header surface data'
|
||||||
|
setf trasys | return
|
||||||
|
endif
|
||||||
|
endfor
|
||||||
|
endfunc
|
||||||
|
|
||||||
|
func! polyglot#DetectAsaFiletype()
|
||||||
|
if exists("g:filetype_asa")
|
||||||
|
exe "setf " . g:filetype_asa | return
|
||||||
|
endif
|
||||||
|
setf aspvbs | return
|
||||||
|
endfunc
|
||||||
|
|
||||||
|
func! polyglot#DetectAspFiletype()
|
||||||
|
if exists("g:filetype_asp")
|
||||||
|
exe "setf " . g:filetype_asp | return
|
||||||
|
endif
|
||||||
|
for lnum in range(1, min([line("$"), 3]))
|
||||||
|
let line = getline(lnum)
|
||||||
|
if line =~? 'perlscript'
|
||||||
|
setf aspperl | return
|
||||||
|
endif
|
||||||
|
endfor
|
||||||
|
setf aspvbs | return
|
||||||
|
endfunc
|
||||||
|
|
||||||
|
func! polyglot#DetectMFiletype()
|
||||||
|
let saw_comment = 0
|
||||||
|
for lnum in range(1, min([line("$"), 100]))
|
||||||
|
let line = getline(lnum)
|
||||||
|
if line =~# '^\s*/\*'
|
||||||
|
let saw_comment = 1
|
||||||
|
endif
|
||||||
|
if line =~# '^\s*\(@\(interface\|class\|protocol\|property\|end\|synchronised\|selector\|implementation\)\(\<\|\>\)\|#import\s\+.\+\.h[">]\)'
|
||||||
|
setf objc | return
|
||||||
|
endif
|
||||||
|
if line =~# '^\s*%'
|
||||||
|
setf octave | return
|
||||||
|
endif
|
||||||
|
if line =~# '^\s*(\*'
|
||||||
|
setf mma | return
|
||||||
|
endif
|
||||||
|
if line =~? '^\s*\(\(type\|var\)\(\<\|\>\)\|--\)'
|
||||||
|
setf murphi | return
|
||||||
|
endif
|
||||||
|
endfor
|
||||||
|
if saw_comment
|
||||||
|
setf objc | return
|
||||||
|
endif
|
||||||
|
if exists("g:filetype_m")
|
||||||
|
exe "setf " . g:filetype_m | return
|
||||||
|
endif
|
||||||
|
setf octave | return
|
||||||
|
endfunc
|
||||||
|
|
||||||
|
func! polyglot#DetectFsFiletype()
|
||||||
|
for lnum in range(1, min([line("$"), 50]))
|
||||||
|
let line = getline(lnum)
|
||||||
|
if line =~# '^\(: \|new-device\)'
|
||||||
|
setf forth | return
|
||||||
|
endif
|
||||||
|
if line =~# '^\s*\(#light\|import\|let\|module\|namespace\|open\|type\)'
|
||||||
|
setf fsharp | return
|
||||||
|
endif
|
||||||
|
if line =~# '\s*\(#version\|precision\|uniform\|varying\|vec[234]\)'
|
||||||
|
setf glsl | return
|
||||||
|
endif
|
||||||
|
endfor
|
||||||
|
if exists("g:filetype_fs")
|
||||||
|
exe "setf " . g:filetype_fs | return
|
||||||
|
endif
|
||||||
|
setf forth | return
|
||||||
|
endfunc
|
||||||
|
|
||||||
|
func! polyglot#DetectReFiletype()
|
||||||
|
for lnum in range(1, min([line("$"), 50]))
|
||||||
|
let line = getline(lnum)
|
||||||
|
if line =~# '^\s*#\%(\%(if\|ifdef\|define\|pragma\)\s\+\w\|\s*include\s\+[<"]\|template\s*<\)'
|
||||||
|
setf cpp | return
|
||||||
|
endif
|
||||||
|
setf reason | return
|
||||||
|
endfor
|
||||||
|
endfunc
|
||||||
|
|
||||||
|
" Restore 'cpoptions'
|
||||||
|
let &cpo = s:cpo_save
|
||||||
|
unlet s:cpo_save
|
||||||
36
autoload/requirements.vim
Normal file
36
autoload/requirements.vim
Normal file
@@ -0,0 +1,36 @@
|
|||||||
|
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'requirements') == -1
|
||||||
|
|
||||||
|
" the Requirements File Format syntax support for Vim
|
||||||
|
" Version: 1.5.3
|
||||||
|
" Author: raimon <raimon49@hotmail.com>
|
||||||
|
" License: MIT LICENSE
|
||||||
|
" The MIT License (MIT)
|
||||||
|
"
|
||||||
|
" Copyright (c) 2015 raimon
|
||||||
|
"
|
||||||
|
" Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
" of this software and associated documentation files (the "Software"), to deal
|
||||||
|
" in the Software without restriction, including without limitation the rights
|
||||||
|
" to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
" copies of the Software, and to permit persons to whom the Software is
|
||||||
|
" furnished to do so, subject to the following conditions:
|
||||||
|
"
|
||||||
|
" The above copyright notice and this permission notice shall be included in all
|
||||||
|
" copies or substantial portions of the Software.
|
||||||
|
"
|
||||||
|
" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
" IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
" FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
" AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
" LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
" OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
" SOFTWARE.
|
||||||
|
|
||||||
|
let s:save_cpo = &cpo
|
||||||
|
set cpo&vim
|
||||||
|
|
||||||
|
let &cpo = s:save_cpo
|
||||||
|
unlet s:save_cpo
|
||||||
|
" vim: et sw=4 ts=4 sts=4:
|
||||||
|
|
||||||
|
endif
|
||||||
@@ -502,13 +502,8 @@ class VimRubyCompletion
|
|||||||
return if rails_base == nil
|
return if rails_base == nil
|
||||||
$:.push rails_base unless $:.index( rails_base )
|
$:.push rails_base unless $:.index( rails_base )
|
||||||
|
|
||||||
rails_config = rails_base + "config/"
|
bootfile = rails_base + "config/boot.rb"
|
||||||
rails_lib = rails_base + "lib/"
|
envfile = rails_base + "config/environment.rb"
|
||||||
$:.push rails_config unless $:.index( rails_config )
|
|
||||||
$:.push rails_lib unless $:.index( rails_lib )
|
|
||||||
|
|
||||||
bootfile = rails_config + "boot.rb"
|
|
||||||
envfile = rails_config + "environment.rb"
|
|
||||||
if File.exists?( bootfile ) && File.exists?( envfile )
|
if File.exists?( bootfile ) && File.exists?( envfile )
|
||||||
begin
|
begin
|
||||||
require bootfile
|
require bootfile
|
||||||
|
|||||||
@@ -1,6 +1,5 @@
|
|||||||
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'rust') == -1
|
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'rust') == -1
|
||||||
|
|
||||||
" Author: Kevin Ballard
|
|
||||||
" Description: Helper functions for Rust commands/mappings
|
" Description: Helper functions for Rust commands/mappings
|
||||||
" Last Modified: May 27, 2014
|
" Last Modified: May 27, 2014
|
||||||
" For bugs, patches and license go to https://github.com/rust-lang/rust.vim
|
" For bugs, patches and license go to https://github.com/rust-lang/rust.vim
|
||||||
@@ -502,7 +501,15 @@ function! s:SearchTestFunctionNameUnderCursor() abort
|
|||||||
|
|
||||||
" Search the end of test function (closing brace) to ensure that the
|
" Search the end of test function (closing brace) to ensure that the
|
||||||
" cursor position is within function definition
|
" cursor position is within function definition
|
||||||
normal! %
|
if maparg('<Plug>(MatchitNormalForward)') ==# ''
|
||||||
|
keepjumps normal! %
|
||||||
|
else
|
||||||
|
" Prefer matchit.vim official plugin to native % since the plugin
|
||||||
|
" provides better behavior than original % (#391)
|
||||||
|
" To load the plugin, run:
|
||||||
|
" :packadd matchit
|
||||||
|
execute 'keepjumps' 'normal' "\<Plug>(MatchitNormalForward)"
|
||||||
|
endif
|
||||||
if line('.') < cursor_line
|
if line('.') < cursor_line
|
||||||
return ''
|
return ''
|
||||||
endif
|
endif
|
||||||
@@ -510,14 +517,23 @@ function! s:SearchTestFunctionNameUnderCursor() abort
|
|||||||
return matchstr(getline(test_func_line), '\m\C^\s*fn\s\+\zs\h\w*')
|
return matchstr(getline(test_func_line), '\m\C^\s*fn\s\+\zs\h\w*')
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
function! rust#Test(all, options) abort
|
function! rust#Test(mods, winsize, all, options) abort
|
||||||
let manifest = findfile('Cargo.toml', expand('%:p:h') . ';')
|
let manifest = findfile('Cargo.toml', expand('%:p:h') . ';')
|
||||||
if manifest ==# ''
|
if manifest ==# ''
|
||||||
return rust#Run(1, '--test ' . a:options)
|
return rust#Run(1, '--test ' . a:options)
|
||||||
endif
|
endif
|
||||||
|
|
||||||
if has('terminal') || has('nvim')
|
" <count> defaults to 0, but we prefer an empty string
|
||||||
let cmd = 'terminal '
|
let winsize = a:winsize ? a:winsize : ''
|
||||||
|
|
||||||
|
if has('terminal')
|
||||||
|
if has('patch-8.0.910')
|
||||||
|
let cmd = printf('%s noautocmd %snew | terminal ++curwin ', a:mods, winsize)
|
||||||
|
else
|
||||||
|
let cmd = printf('%s terminal ', a:mods)
|
||||||
|
endif
|
||||||
|
elseif has('nvim')
|
||||||
|
let cmd = printf('%s noautocmd %snew | terminal ', a:mods, winsize)
|
||||||
else
|
else
|
||||||
let cmd = '!'
|
let cmd = '!'
|
||||||
let manifest = shellescape(manifest)
|
let manifest = shellescape(manifest)
|
||||||
@@ -535,21 +551,20 @@ function! rust#Test(all, options) abort
|
|||||||
let saved = getpos('.')
|
let saved = getpos('.')
|
||||||
try
|
try
|
||||||
let func_name = s:SearchTestFunctionNameUnderCursor()
|
let func_name = s:SearchTestFunctionNameUnderCursor()
|
||||||
if func_name ==# ''
|
|
||||||
echohl ErrorMsg
|
|
||||||
echomsg 'No test function was found under the cursor. Please add ! to command if you want to run all tests'
|
|
||||||
echohl None
|
|
||||||
return
|
|
||||||
endif
|
|
||||||
if a:options ==# ''
|
|
||||||
execute cmd . 'cargo test --manifest-path' manifest func_name
|
|
||||||
else
|
|
||||||
execute cmd . 'cargo test --manifest-path' manifest func_name a:options
|
|
||||||
endif
|
|
||||||
return
|
|
||||||
finally
|
finally
|
||||||
call setpos('.', saved)
|
call setpos('.', saved)
|
||||||
endtry
|
endtry
|
||||||
|
if func_name ==# ''
|
||||||
|
echohl ErrorMsg
|
||||||
|
echomsg 'No test function was found under the cursor. Please add ! to command if you want to run all tests'
|
||||||
|
echohl None
|
||||||
|
return
|
||||||
|
endif
|
||||||
|
if a:options ==# ''
|
||||||
|
execute cmd . 'cargo test --manifest-path' manifest func_name
|
||||||
|
else
|
||||||
|
execute cmd . 'cargo test --manifest-path' manifest func_name a:options
|
||||||
|
endif
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
" }}}1
|
" }}}1
|
||||||
|
|||||||
@@ -62,18 +62,19 @@ function! s:RustfmtWriteMode()
|
|||||||
endif
|
endif
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
function! s:RustfmtConfig()
|
function! s:RustfmtConfigOptions()
|
||||||
let l:rustfmt_toml = findfile('rustfmt.toml', expand('%:p:h') . ';')
|
let l:rustfmt_toml = findfile('rustfmt.toml', expand('%:p:h') . ';')
|
||||||
if l:rustfmt_toml !=# ''
|
if l:rustfmt_toml !=# ''
|
||||||
return '--config-path '.l:rustfmt_toml
|
return '--config-path '.fnamemodify(l:rustfmt_toml, ":p")
|
||||||
endif
|
endif
|
||||||
|
|
||||||
let l:_rustfmt_toml = findfile('.rustfmt.toml', expand('%:p:h') . ';')
|
let l:_rustfmt_toml = findfile('.rustfmt.toml', expand('%:p:h') . ';')
|
||||||
if l:_rustfmt_toml !=# ''
|
if l:_rustfmt_toml !=# ''
|
||||||
return '--config-path '.l:_rustfmt_toml
|
return '--config-path '.fnamemodify(l:_rustfmt_toml, ":p")
|
||||||
endif
|
endif
|
||||||
|
|
||||||
return ''
|
" Default to edition 2018 in case no rustfmt.toml was found.
|
||||||
|
return '--edition 2018'
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
function! s:RustfmtCommandRange(filename, line1, line2)
|
function! s:RustfmtCommandRange(filename, line1, line2)
|
||||||
@@ -84,7 +85,7 @@ function! s:RustfmtCommandRange(filename, line1, line2)
|
|||||||
|
|
||||||
let l:arg = {"file": shellescape(a:filename), "range": [a:line1, a:line2]}
|
let l:arg = {"file": shellescape(a:filename), "range": [a:line1, a:line2]}
|
||||||
let l:write_mode = s:RustfmtWriteMode()
|
let l:write_mode = s:RustfmtWriteMode()
|
||||||
let l:rustfmt_config = s:RustfmtConfig()
|
let l:rustfmt_config = s:RustfmtConfigOptions()
|
||||||
|
|
||||||
" FIXME: When --file-lines gets to be stable, add version range checking
|
" FIXME: When --file-lines gets to be stable, add version range checking
|
||||||
" accordingly.
|
" accordingly.
|
||||||
@@ -98,14 +99,9 @@ function! s:RustfmtCommandRange(filename, line1, line2)
|
|||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
function! s:RustfmtCommand()
|
function! s:RustfmtCommand()
|
||||||
if g:rustfmt_emit_files
|
let write_mode = g:rustfmt_emit_files ? '--emit=stdout' : '--write-mode=display'
|
||||||
let l:write_mode = "--emit=stdout"
|
let config = s:RustfmtConfigOptions()
|
||||||
else
|
return join([g:rustfmt_command, write_mode, config, g:rustfmt_options])
|
||||||
let l:write_mode = "--write-mode=display"
|
|
||||||
endif
|
|
||||||
" rustfmt will pick on the right config on its own due to the
|
|
||||||
" current directory change.
|
|
||||||
return g:rustfmt_command . " ". l:write_mode . " " . g:rustfmt_options
|
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
function! s:DeleteLines(start, end) abort
|
function! s:DeleteLines(start, end) abort
|
||||||
|
|||||||
221
autoload/sleuth.vim
Normal file
221
autoload/sleuth.vim
Normal file
@@ -0,0 +1,221 @@
|
|||||||
|
let s:globs = {
|
||||||
|
\ '8th': '{*.8th,}',
|
||||||
|
\ 'Dockerfile': '{*.dockerfile,*.dock,*.Dockerfile,Dockerfile,dockerfile,Dockerfile*,}',
|
||||||
|
\ 'Jenkinsfile': '{*.jenkinsfile,*.Jenkinsfile,Jenkinsfile,Jenkinsfile*,}',
|
||||||
|
\ 'a2ps': '{a2psrc,.a2psrc,}',
|
||||||
|
\ 'a65': '{*.a65,}',
|
||||||
|
\ 'aap': '{*.aap,}',
|
||||||
|
\ 'abap': '{*.abap,}',
|
||||||
|
\ 'abaqus': '{*.inp,}',
|
||||||
|
\ 'abc': '{*.abc,}',
|
||||||
|
\ 'abel': '{*.abl,}',
|
||||||
|
\ 'acedb': '{*.wrm,}',
|
||||||
|
\ 'ada': '{*.adb,*.ads,*.ada,*.gpr,}',
|
||||||
|
\ 'ahdl': '{*.tdf,}',
|
||||||
|
\ 'aidl': '{*.aidl,}',
|
||||||
|
\ 'alsaconf': '{.asoundrc,}',
|
||||||
|
\ 'aml': '{*.aml,}',
|
||||||
|
\ 'ampl': '{*.run,}',
|
||||||
|
\ 'ant': '{build.xml,}',
|
||||||
|
\ 'apache': '{.htaccess,}',
|
||||||
|
\ 'apiblueprint': '{*.apib,}',
|
||||||
|
\ 'applescript': '{*.applescript,*.scpt,}',
|
||||||
|
\ 'aptconf': '{apt.conf,}',
|
||||||
|
\ 'arch': '{.arch-inventory,=tagging-method,}',
|
||||||
|
\ 'arduino': '{*.pde,*.ino,}',
|
||||||
|
\ 'art': '{*.art,}',
|
||||||
|
\ 'asciidoc': '{*.asciidoc,*.adoc,*.asc,}',
|
||||||
|
\ 'asl': '{*.asl,*.dsl,}',
|
||||||
|
\ 'asn': '{*.asn,*.asn1,}',
|
||||||
|
\ 'aspperl': '{*.asp,}',
|
||||||
|
\ 'aspvbs': '{*.asa,*.asp,}',
|
||||||
|
\ 'atlas': '{*.atl,*.as,}',
|
||||||
|
\ 'autohotkey': '{*.ahk,*.ahkl,}',
|
||||||
|
\ 'autoit': '{*.au3,}',
|
||||||
|
\ 'automake': '{[Mm]akefile.am,GNUmakefile.am,}',
|
||||||
|
\ 'ave': '{*.ave,}',
|
||||||
|
\ 'awk': '{*.awk,}',
|
||||||
|
\ 'blade': '{*.blade,*.blade.php,}',
|
||||||
|
\ 'brewfile': '{Brewfile,}',
|
||||||
|
\ 'c': '{*.c,*.cats,*.h,*.idc,}',
|
||||||
|
\ 'caddyfile': '{Caddyfile,}',
|
||||||
|
\ 'carp': '{*.carp,}',
|
||||||
|
\ 'clojure': '{*.clj,*.boot,*.cl2,*.cljc,*.cljs,*.cljs.hl,*.cljscm,*.cljx,*.hic,*.edn,riemann.config,build.boot,profile.boot,}',
|
||||||
|
\ 'cmake': '{*.cmake,*.cmake.in,CMakeLists.txt,}',
|
||||||
|
\ 'coffee': '{*.coffee,*._coffee,*.cake,*.cjsx,*.iced,*.coffeekup,Cakefile,}',
|
||||||
|
\ 'cpp': '{*.cpp,*.c++,*.cc,*.cp,*.cxx,*.h,*.h++,*.hh,*.hpp,*.hxx,*.inc,*.inl,*.ino,*.ipp,*.re,*.tcc,*.tpp,}',
|
||||||
|
\ 'cql': '{*.cql,}',
|
||||||
|
\ 'cryptol': '{*.cry,*.cyl,*.lcry,*.lcyl,}',
|
||||||
|
\ 'crystal': '{*.cr,Projectfile,}',
|
||||||
|
\ 'csv': '{*.csv,*.tsv,*.tab,}',
|
||||||
|
\ 'cucumber': '{*.feature,*.story,}',
|
||||||
|
\ 'cuesheet': '{*.cue,}',
|
||||||
|
\ 'd': '{*.d,*.di,}',
|
||||||
|
\ 'dart': '{*.dart,}',
|
||||||
|
\ 'dcov': '{*.lst,}',
|
||||||
|
\ 'dd': '{*.dd,}',
|
||||||
|
\ 'ddoc': '{*.ddoc,}',
|
||||||
|
\ 'dhall': '{*.dhall,}',
|
||||||
|
\ 'dosini': '{*.wrap,}',
|
||||||
|
\ 'dsdl': '{*.sdl,}',
|
||||||
|
\ 'dune': '{jbuild,dune,dune-project,dune-workspace,}',
|
||||||
|
\ 'ecrystal': '{*.ecr,}',
|
||||||
|
\ 'eelixir': '{*.eex,*.leex,}',
|
||||||
|
\ 'elf': '{*.am,}',
|
||||||
|
\ 'elixir': '{*.ex,*.exs,mix.lock,}',
|
||||||
|
\ 'elm': '{*.elm,}',
|
||||||
|
\ 'embeddedpuppet': '{*.epp,}',
|
||||||
|
\ 'ember-script': '{*.em,*.emberscript,}',
|
||||||
|
\ 'emblem': '{*.emblem,*.em,}',
|
||||||
|
\ 'erlang': '{*.erl,*.app.src,*.es,*.escript,*.hrl,*.xrl,*.yrl,*.app,*.yaws,Emakefile,rebar.config,rebar.config.lock,rebar.lock,}',
|
||||||
|
\ 'eruby': '{*.erb,*.erb.deface,*.rhtml,}',
|
||||||
|
\ 'fbs': '{*.fbs,}',
|
||||||
|
\ 'fennel': '{*.fnl,}',
|
||||||
|
\ 'ferm': '{*.ferm,ferm.conf,}',
|
||||||
|
\ 'fish': '{*.fish,}',
|
||||||
|
\ 'flow': '{*.flow,}',
|
||||||
|
\ 'forth': '{*.fs,*.ft,*.fth,}',
|
||||||
|
\ 'fsharp': '{*.fs,*.fsi,*.fsx,}',
|
||||||
|
\ 'gdscript3': '{*.gd,}',
|
||||||
|
\ 'gitcommit': '{,}',
|
||||||
|
\ 'gitconfig': '{*.gitconfig,.gitconfig,.gitmodules,}',
|
||||||
|
\ 'gitrebase': '{git-rebase-todo,}',
|
||||||
|
\ 'gitsendemail': '{.gitsendemail.*,}',
|
||||||
|
\ 'glsl': '{*.glsl,*.fp,*.frag,*.frg,*.fs,*.fsh,*.fshader,*.geo,*.geom,*.glslf,*.glslv,*.gs,*.gshader,*.shader,*.tesc,*.tese,*.vert,*.vrx,*.vsh,*.vshader,*.comp,}',
|
||||||
|
\ 'gmpl': '{*.mod,}',
|
||||||
|
\ 'gnuplot': '{*.gp,*.gnu,*.gnuplot,*.p,*.plot,*.plt,}',
|
||||||
|
\ 'go': '{*.go,}',
|
||||||
|
\ 'gohtmltmpl': '{*.tmpl,}',
|
||||||
|
\ 'gomod': '{go.mod,}',
|
||||||
|
\ 'graphql': '{*.graphql,*.gql,*.graphqls,}',
|
||||||
|
\ 'groovy': '{*.gradle,}',
|
||||||
|
\ 'grub': '{,}',
|
||||||
|
\ 'haml': '{*.haml,*.haml.deface,*.hamlc,*.hamlbars,}',
|
||||||
|
\ 'haproxy': '{*.cfg,haproxy.cfg,haproxy*.c*,}',
|
||||||
|
\ 'haskell': '{*.hs,*.hs-boot,*.hsc,*.bpk,*.hsig,}',
|
||||||
|
\ 'haxe': '{*.hx,*.hxsl,}',
|
||||||
|
\ 'hcl': '{*.hcl,*.nomad,*.tf,*.tfvars,*.workflow,Appfile,}',
|
||||||
|
\ 'helm': '{,}',
|
||||||
|
\ 'help': '{,}',
|
||||||
|
\ 'hive': '{*.q,*.hql,*.ql,}',
|
||||||
|
\ 'html': '{*.html,*.htm,*.html.hl,*.inc,*.st,*.xht,*.xhtml,}',
|
||||||
|
\ 'html.twig': '{*.twig,}',
|
||||||
|
\ 'i3config': '{*.i3.config,*.i3config,i3.config,i3config,.i3.config,.i3config,}',
|
||||||
|
\ 'icalendar': '{*.ics,}',
|
||||||
|
\ 'idris': '{*.idr,*.lidr,idris-response,}',
|
||||||
|
\ 'ion': '{*.ion,}',
|
||||||
|
\ 'javascript': '{*.js,*._js,*.bones,*.cjs,*.es,*.es6,*.frag,*.gs,*.jake,*.jsb,*.jscad,*.jsfl,*.jsm,*.jss,*.mjs,*.njs,*.pac,*.sjs,*.ssjs,*.xsjs,*.xsjslib,Jakefile,}',
|
||||||
|
\ 'javascriptreact': '{*.jsx,}',
|
||||||
|
\ 'jinja.html': '{*.jinja,*.j2,*.jinja2,*.njk,}',
|
||||||
|
\ 'jq': '{*.jq,.jqrc,}',
|
||||||
|
\ 'json': '{*.json,*.avsc,*.geojson,*.gltf,*.har,*.ice,*.JSON-tmLanguage,*.jsonl,*.mcmeta,*.tfstate,*.tfstate.backup,*.topojson,*.webapp,*.webmanifest,*.yy,*.yyp,*.jsonp,*.template,.arcconfig,.htmlhintrc,.tern-config,.tern-project,.watchmanconfig,composer.lock,mcmod.info,}',
|
||||||
|
\ 'json5': '{*.json5,}',
|
||||||
|
\ 'jsonnet': '{*.jsonnet,*.libsonnet,}',
|
||||||
|
\ 'jst': '{*.ejs,*.ect,*.jst,}',
|
||||||
|
\ 'julia': '{*.jl,}',
|
||||||
|
\ 'kotlin': '{*.kt,*.ktm,*.kts,}',
|
||||||
|
\ 'ledger': '{*.ldg,*.ledger,*.journal,}',
|
||||||
|
\ 'less': '{*.less,}',
|
||||||
|
\ 'lilypond': '{*.ly,*.ily,}',
|
||||||
|
\ 'litcoffee': '{*.litcoffee,*.coffee.md,}',
|
||||||
|
\ 'livescript': '{*.ls,*._ls,Slakefile,}',
|
||||||
|
\ 'llvm': '{*.ll,}',
|
||||||
|
\ 'log': '{*.log,*.LOG,*_log,*_LOG,}',
|
||||||
|
\ 'lua': '{*.lua,*.fcgi,*.nse,*.p8,*.pd_lua,*.rbxs,*.rockspec,*.wlua,.luacheckrc,}',
|
||||||
|
\ 'm4': '{*.m4,*.at,}',
|
||||||
|
\ 'mako': '{*.mako,*.mao,}',
|
||||||
|
\ 'markdown': '{*.md,*.markdown,*.mdown,*.mdwn,*.mdx,*.mkd,*.mkdn,*.mkdown,*.ronn,*.workbook,contents.lr,}',
|
||||||
|
\ 'markdown.mdx': '{*.mdx,}',
|
||||||
|
\ 'meson': '{meson.build,meson_options.txt,}',
|
||||||
|
\ 'mma': '{*.mathematica,*.cdf,*.m,*.ma,*.mt,*.nb,*.nbp,*.wl,*.wlt,*.wls,}',
|
||||||
|
\ 'moon': '{*.moon,}',
|
||||||
|
\ 'murphi': '{*.m,}',
|
||||||
|
\ 'mustache': '{*.handlebars,*.hbs,*.hulk,*.hjs,*.mustache,*.njk,*.hogan,*.hdbs,*.hb,}',
|
||||||
|
\ 'nginx': '{*.nginx,*.nginxconf,*.vhost,nginx.conf,nginx*.conf,*nginx.conf,}',
|
||||||
|
\ 'nim': '{*.nim,*.nim.cfg,*.nimble,*.nimrod,*.nims,nim.cfg,}',
|
||||||
|
\ 'nix': '{*.nix,}',
|
||||||
|
\ 'oasis': '{_oasis,}',
|
||||||
|
\ 'objc': '{*.m,*.h,}',
|
||||||
|
\ 'ocaml': '{*.ml,*.eliom,*.eliomi,*.ml4,*.mli,*.mll,*.mly,*.mlt,*.mlp,*.mlip,*.mli.cppo,*.ml.cppo,.ocamlinit,}',
|
||||||
|
\ 'ocamlbuild_tags': '{_tags,}',
|
||||||
|
\ 'ocpbuild': '{*.ocp,}',
|
||||||
|
\ 'ocpbuildroot': '{*.root,}',
|
||||||
|
\ 'octave': '{*.oct,*.m,}',
|
||||||
|
\ 'omake': '{*.om,OMakefile,OMakeroot,OMakeroot.in,}',
|
||||||
|
\ 'opam': '{*.opam,*.opam.template,opam,}',
|
||||||
|
\ 'opencl': '{*.cl,*.opencl,}',
|
||||||
|
\ 'perl': '{*.pl,*.al,*.cgi,*.fcgi,*.perl,*.ph,*.plx,*.pm,*.psgi,*.t,Makefile.PL,Rexfile,ack,cpanfile,}',
|
||||||
|
\ 'php': '{*.php,*.aw,*.ctp,*.fcgi,*.inc,*.php3,*.php4,*.php5,*.phps,*.phpt,.php,.php_cs,.php_cs.dist,Phakefile,}',
|
||||||
|
\ 'plantuml': '{*.puml,*.iuml,*.plantuml,*.uml,*.pu,}',
|
||||||
|
\ 'pony': '{*.pony,}',
|
||||||
|
\ 'proto': '{*.proto,}',
|
||||||
|
\ 'ps1': '{*.ps1,*.psd1,*.psm1,*.pssc,}',
|
||||||
|
\ 'ps1xml': '{*.ps1xml,}',
|
||||||
|
\ 'pug': '{*.jade,*.pug,}',
|
||||||
|
\ 'puppet': '{*.pp,Modulefile,}',
|
||||||
|
\ 'purescript': '{*.purs,}',
|
||||||
|
\ 'python': '{*.py,*.cgi,*.fcgi,*.gyp,*.gypi,*.lmi,*.py3,*.pyde,*.pyi,*.pyp,*.pyt,*.pyw,*.rpy,*.smk,*.spec,*.tac,*.wsgi,*.xpy,.gclient,DEPS,SConscript,SConstruct,Snakefile,wscript,}',
|
||||||
|
\ 'qmake': '{*.pro,*.pri,}',
|
||||||
|
\ 'qml': '{*.qml,*.qbs,}',
|
||||||
|
\ 'r': '{*.r,*.rd,*.rsx,*.s,*.S,.Rprofile,expr-dist,}',
|
||||||
|
\ 'racket': '{*.rkt,*.rktd,*.rktl,*.scrbl,}',
|
||||||
|
\ 'ragel': '{*.rl,}',
|
||||||
|
\ 'raku': '{*.6pl,*.6pm,*.nqp,*.p6,*.p6l,*.p6m,*.pl,*.pl6,*.pm,*.pm6,*.t,*.rakudoc,*.rakutest,*.raku,*.rakumod,*.pod6,*.t6,}',
|
||||||
|
\ 'raml': '{*.raml,}',
|
||||||
|
\ 'razor': '{*.cshtml,*.razor,}',
|
||||||
|
\ 'reason': '{*.re,*.rei,}',
|
||||||
|
\ 'requirements': '{*.pip,*requirements.{txt,in},*require.{txt,in},constraints.{txt,in},}',
|
||||||
|
\ 'rhelp': '{*.rd,}',
|
||||||
|
\ 'rst': '{*.rst,*.rest,*.rest.txt,*.rst.txt,}',
|
||||||
|
\ 'ruby': '{*.rb,*.builder,*.eye,*.fcgi,*.gemspec,*.god,*.jbuilder,*.mspec,*.pluginspec,*.podspec,*.rabl,*.rake,*.rbi,*.rbuild,*.rbw,*.rbx,*.ru,*.ruby,*.spec,*.thor,*.watchr,*.rxml,*.rjs,*.rant,*.axlsx,*.cap,*.opal,.irbrc,.pryrc,.simplecov,Appraisals,Berksfile,Brewfile,Buildfile,Capfile,Dangerfile,Deliverfile,Fastfile,Gemfile,Gemfile.lock,Guardfile,Jarfile,Mavenfile,Podfile,Puppetfile,Rakefile,Snapfile,Thorfile,Vagrantfile,buildfile,Rantfile,.autotest,Cheffile,KitchenSink,Routefile,.Guardfile,.Brewfile,vagrantfile,[Rr]akefile*,*_spec.rb,}',
|
||||||
|
\ 'rust': '{*.rs,*.rs.in,}',
|
||||||
|
\ 'sbt.scala': '{*.sbt,}',
|
||||||
|
\ 'scala': '{*.scala,*.kojo,*.sbt,*.sc,}',
|
||||||
|
\ 'scss': '{*.scss,}',
|
||||||
|
\ 'sexplib': '{*.sexp,}',
|
||||||
|
\ 'sh': '{*.sh,*.bash,*.bats,*.cgi,*.command,*.env,*.fcgi,*.ksh,*.sh.in,*.tmux,*.tool,*.zsh,.bash_aliases,.bash_history,.bash_logout,.bash_profile,.bashrc,.cshrc,.env,.env.example,.flaskenv,.login,.profile,.zlogin,.zlogout,.zprofile,.zshenv,.zshrc,9fs,PKGBUILD,bash_aliases,bash_logout,bash_profile,bashrc,cshrc,gradlew,login,man,profile,zlogin,zlogout,zprofile,zshenv,zshrc,}',
|
||||||
|
\ 'slim': '{*.slim,}',
|
||||||
|
\ 'slime': '{*.slime,}',
|
||||||
|
\ 'smt2': '{*.smt2,*.smt,}',
|
||||||
|
\ 'solidity': '{*.sol,}',
|
||||||
|
\ 'sql': '{*.pgsql,*.sql,}',
|
||||||
|
\ 'stylus': '{*.styl,*.stylus,}',
|
||||||
|
\ 'svelte': '{*.svelte,}',
|
||||||
|
\ 'svg': '{*.svg,}',
|
||||||
|
\ 'swift': '{*.swift,}',
|
||||||
|
\ 'sxhkdrc': '{*.sxhkdrc,sxhkdrc,}',
|
||||||
|
\ 'systemd': '{*.automount,*.mount,*.path,*.service,*.socket,*.swap,*.target,*.timer,}',
|
||||||
|
\ 'tablegen': '{*.td,}',
|
||||||
|
\ 'terraform': '{*.hcl,*.nomad,*.tf,*.tfvars,*.workflow,}',
|
||||||
|
\ 'textile': '{*.textile,}',
|
||||||
|
\ 'thrift': '{*.thrift,}',
|
||||||
|
\ 'tmux': '{.tmux.conf,}',
|
||||||
|
\ 'toml': '{*.toml,Cargo.lock,Gopkg.lock,poetry.lock,Pipfile,}',
|
||||||
|
\ 'tptp': '{*.p,*.tptp,*.ax,}',
|
||||||
|
\ 'trasys': '{*.inp,}',
|
||||||
|
\ 'typescript': '{*.ts,}',
|
||||||
|
\ 'typescriptreact': '{*.tsx,}',
|
||||||
|
\ 'unison': '{*.u,*.uu,}',
|
||||||
|
\ 'v': '{*.v,}',
|
||||||
|
\ 'vala': '{*.vala,*.vapi,*.valadoc,}',
|
||||||
|
\ 'vbnet': '{*.vb,*.vbhtml,}',
|
||||||
|
\ 'vcl': '{*.vcl,}',
|
||||||
|
\ 'velocity': '{*.vm,}',
|
||||||
|
\ 'vmasm': '{*.mar,}',
|
||||||
|
\ 'vue': '{*.vue,*.wpy,}',
|
||||||
|
\ 'xdc': '{*.xdc,}',
|
||||||
|
\ 'xml': '{*.xml,*.adml,*.admx,*.ant,*.axml,*.builds,*.ccproj,*.ccxml,*.clixml,*.cproject,*.cscfg,*.csdef,*.csl,*.csproj,*.ct,*.depproj,*.dita,*.ditamap,*.ditaval,*.dll.config,*.dotsettings,*.filters,*.fsproj,*.fxml,*.glade,*.gml,*.gmx,*.grxml,*.gst,*.iml,*.ivy,*.jelly,*.jsproj,*.kml,*.launch,*.mdpolicy,*.mjml,*.mm,*.mod,*.mxml,*.natvis,*.ncl,*.ndproj,*.nproj,*.nuspec,*.odd,*.osm,*.pkgproj,*.pluginspec,*.proj,*.props,*.ps1xml,*.psc1,*.pt,*.rdf,*.resx,*.rss,*.sch,*.scxml,*.sfproj,*.shproj,*.srdf,*.storyboard,*.sublime-snippet,*.targets,*.tml,*.ts,*.tsx,*.ui,*.urdf,*.ux,*.vbproj,*.vcxproj,*.vsixmanifest,*.vssettings,*.vstemplate,*.vxml,*.wixproj,*.workflow,*.wsdl,*.wsf,*.wxi,*.wxl,*.wxs,*.x3d,*.xacro,*.xaml,*.xib,*.xlf,*.xliff,*.xmi,*.xml.dist,*.xproj,*.xsd,*.xspec,*.xul,*.zcml,*.cdxml,.classpath,.cproject,.project,App.config,NuGet.config,Settings.StyleCop,Web.Debug.config,Web.Release.config,Web.config,packages.config,}',
|
||||||
|
\ 'xml.twig': '{*.xml.twig,}',
|
||||||
|
\ 'xsl': '{*.xslt,*.xsl,}',
|
||||||
|
\ 'yaml': '{*.yml,*.mir,*.reek,*.rviz,*.sublime-syntax,*.syntax,*.yaml,*.yaml-tmlanguage,*.yaml.sed,*.yml.mysql,.clang-format,.clang-tidy,.gemrc,glide.lock,yarn.lock,fish_history,fish_read_history,}',
|
||||||
|
\ 'yaml.ansible': '{playbook.y{a,}ml,site.y{a,}ml,main.y{a,}ml,local.y{a,}ml,requirements.y{a,}ml,tasks.*.y{a,}ml,roles.*.y{a,}ml,handlers.*.y{a,}ml,}',
|
||||||
|
\ 'yaml.docker-compose': '{docker-compose*.yaml,docker-compose*.yml,}',
|
||||||
|
\ 'zephir': '{*.zep,}',
|
||||||
|
\ 'zig': '{*.zig,*.zir,}',
|
||||||
|
\ 'zir': '{*.zir,}',
|
||||||
|
\ 'zsh': '{*.zsh,.zshrc,.zshenv,.zlogin,.zprofile,.zlogout,}',
|
||||||
|
\}
|
||||||
|
|
||||||
|
func! sleuth#GlobForFiletype(type)
|
||||||
|
return get(s:globs, a:type, '')
|
||||||
|
endfunc
|
||||||
@@ -1,26 +1,39 @@
|
|||||||
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'terraform') == -1
|
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'terraform') == -1
|
||||||
|
|
||||||
|
let s:cpo_save = &cpoptions
|
||||||
|
set cpoptions&vim
|
||||||
|
|
||||||
" Ensure no conflict with arguments from the environment
|
" Ensure no conflict with arguments from the environment
|
||||||
let $TF_CLI_ARGS_fmt=''
|
let $TF_CLI_ARGS_fmt=''
|
||||||
|
|
||||||
function! terraform#fmt()
|
function! terraform#fmt() abort
|
||||||
if !filereadable(expand('%:p'))
|
" Save the view.
|
||||||
return
|
let curw = winsaveview()
|
||||||
endif
|
|
||||||
let l:curw = winsaveview()
|
|
||||||
" Make a fake change so that the undo point is right.
|
" Make a fake change so that the undo point is right.
|
||||||
normal! ix
|
normal! ix
|
||||||
normal! "_x
|
normal! "_x
|
||||||
|
|
||||||
|
" Execute `terraform fmt`, redirecting stderr to a temporary file.
|
||||||
|
let tmpfile = tempname()
|
||||||
|
let shellredir_save = &shellredir
|
||||||
|
let &shellredir = '>%s 2>'.tmpfile
|
||||||
silent execute '%!terraform fmt -no-color -'
|
silent execute '%!terraform fmt -no-color -'
|
||||||
|
let &shellredir = shellredir_save
|
||||||
|
|
||||||
|
" If there was an error, undo any changes and show stderr.
|
||||||
if v:shell_error != 0
|
if v:shell_error != 0
|
||||||
let output = getline(1, '$')
|
|
||||||
silent undo
|
silent undo
|
||||||
|
let output = readfile(tmpfile)
|
||||||
echo join(output, "\n")
|
echo join(output, "\n")
|
||||||
endif
|
endif
|
||||||
call winrestview(l:curw)
|
|
||||||
|
" Delete the temporary file, and restore the view.
|
||||||
|
call delete(tmpfile)
|
||||||
|
call winrestview(curw)
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
function! terraform#align()
|
function! terraform#align() abort
|
||||||
let p = '^.*=[^>]*$'
|
let p = '^.*=[^>]*$'
|
||||||
if exists(':Tabularize') && getline('.') =~# '^.*=' && (getline(line('.')-1) =~# p || getline(line('.')+1) =~# p)
|
if exists(':Tabularize') && getline('.') =~# '^.*=' && (getline(line('.')-1) =~# p || getline(line('.')+1) =~# p)
|
||||||
let column = strlen(substitute(getline('.')[0:col('.')],'[^=]','','g'))
|
let column = strlen(substitute(getline('.')[0:col('.')],'[^=]','','g'))
|
||||||
@@ -31,8 +44,8 @@ function! terraform#align()
|
|||||||
endif
|
endif
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
function! terraform#commands(ArgLead, CmdLine, CursorPos)
|
function! terraform#commands(ArgLead, CmdLine, CursorPos) abort
|
||||||
let l:commands = [
|
let commands = [
|
||||||
\ 'apply',
|
\ 'apply',
|
||||||
\ 'console',
|
\ 'console',
|
||||||
\ 'destroy',
|
\ 'destroy',
|
||||||
@@ -42,6 +55,8 @@ function! terraform#commands(ArgLead, CmdLine, CursorPos)
|
|||||||
\ 'graph',
|
\ 'graph',
|
||||||
\ 'import',
|
\ 'import',
|
||||||
\ 'init',
|
\ 'init',
|
||||||
|
\ 'login',
|
||||||
|
\ 'logout',
|
||||||
\ 'output',
|
\ 'output',
|
||||||
\ 'plan',
|
\ 'plan',
|
||||||
\ 'providers',
|
\ 'providers',
|
||||||
@@ -58,7 +73,10 @@ function! terraform#commands(ArgLead, CmdLine, CursorPos)
|
|||||||
\ 'push',
|
\ 'push',
|
||||||
\ 'state'
|
\ 'state'
|
||||||
\ ]
|
\ ]
|
||||||
return join(l:commands, "\n")
|
return join(commands, "\n")
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
|
let &cpoptions = s:cpo_save
|
||||||
|
unlet s:cpo_save
|
||||||
|
|
||||||
endif
|
endif
|
||||||
|
|||||||
@@ -1,18 +0,0 @@
|
|||||||
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'vifm') == -1
|
|
||||||
|
|
||||||
" common functions for vifm command-line editing buffer filetype plugins
|
|
||||||
" Maintainer: xaizek <xaizek@posteo.net>
|
|
||||||
" Last Change: August 18, 2013
|
|
||||||
|
|
||||||
" Prepare buffer
|
|
||||||
function! vifm#edit#Init()
|
|
||||||
" Mappings for quick leaving the buffer (behavior similar to Command line
|
|
||||||
" buffer in Vim)
|
|
||||||
nnoremap <buffer> <cr> :copy 0 \| wq<cr>
|
|
||||||
imap <buffer> <cr> <esc><cr>
|
|
||||||
|
|
||||||
" Start buffer editing in insert mode
|
|
||||||
startinsert
|
|
||||||
endfunction
|
|
||||||
|
|
||||||
endif
|
|
||||||
@@ -1,35 +0,0 @@
|
|||||||
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'vifm') == -1
|
|
||||||
|
|
||||||
" common functions for vifm plugin related to globals
|
|
||||||
" Maintainer: xaizek <xaizek@posteo.net>
|
|
||||||
" Last Change: November 03, 2018
|
|
||||||
|
|
||||||
" Initializes global variables to defaults unless they are already set
|
|
||||||
function! vifm#globals#Init()
|
|
||||||
if !exists('g:vifm_exec')
|
|
||||||
let g:vifm_exec = 'vifm'
|
|
||||||
endif
|
|
||||||
|
|
||||||
if !exists('g:vifm_exec_args')
|
|
||||||
let g:vifm_exec_args = ''
|
|
||||||
endif
|
|
||||||
|
|
||||||
if !exists('g:vifm_term')
|
|
||||||
if has('win32')
|
|
||||||
if filereadable('C:\Windows\system32\cmd.exe')
|
|
||||||
let g:vifm_term = 'C:\Windows\system32\cmd.exe /C'
|
|
||||||
else
|
|
||||||
" If don't find use the integrate shell it work too
|
|
||||||
let g:vifm_term = ''
|
|
||||||
endif
|
|
||||||
else
|
|
||||||
let g:vifm_term = 'xterm -e'
|
|
||||||
endif
|
|
||||||
endif
|
|
||||||
|
|
||||||
if !exists('g:vifm_embed_term')
|
|
||||||
let g:vifm_embed_term = has('gui_running')
|
|
||||||
endif
|
|
||||||
endfunction
|
|
||||||
|
|
||||||
endif
|
|
||||||
@@ -10,8 +10,6 @@ execute join(['function! vital#_crystal#ColorEcho#import() abort', printf("retur
|
|||||||
delfunction s:_SID
|
delfunction s:_SID
|
||||||
" ___vital___
|
" ___vital___
|
||||||
scriptencoding utf-8
|
scriptencoding utf-8
|
||||||
let s:save_cpo = &cpo
|
|
||||||
set cpo&vim
|
|
||||||
|
|
||||||
function! s:_is_available() abort
|
function! s:_is_available() abort
|
||||||
if has('gui_running')
|
if has('gui_running')
|
||||||
@@ -185,7 +183,4 @@ function! s:echo(str) abort
|
|||||||
call echorizer.echo()
|
call echorizer.echo()
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
let &cpo = s:save_cpo
|
|
||||||
unlet s:save_cpo
|
|
||||||
|
|
||||||
endif
|
endif
|
||||||
|
|||||||
@@ -11,9 +11,6 @@ delfunction s:_SID
|
|||||||
" ___vital___
|
" ___vital___
|
||||||
" Utilities for list.
|
" Utilities for list.
|
||||||
|
|
||||||
let s:save_cpo = &cpo
|
|
||||||
set cpo&vim
|
|
||||||
|
|
||||||
function! s:pop(list) abort
|
function! s:pop(list) abort
|
||||||
return remove(a:list, -1)
|
return remove(a:list, -1)
|
||||||
endfunction
|
endfunction
|
||||||
@@ -460,9 +457,6 @@ function! s:combinations(list, r) abort
|
|||||||
return result
|
return result
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
let &cpo = s:save_cpo
|
|
||||||
unlet s:save_cpo
|
|
||||||
|
|
||||||
" vim:set et ts=2 sts=2 sw=2 tw=0:
|
" vim:set et ts=2 sts=2 sw=2 tw=0:
|
||||||
|
|
||||||
endif
|
endif
|
||||||
|
|||||||
@@ -11,9 +11,6 @@ delfunction s:_SID
|
|||||||
" ___vital___
|
" ___vital___
|
||||||
" Utilities for string.
|
" Utilities for string.
|
||||||
|
|
||||||
let s:save_cpo = &cpo
|
|
||||||
set cpo&vim
|
|
||||||
|
|
||||||
function! s:_vital_loaded(V) abort
|
function! s:_vital_loaded(V) abort
|
||||||
let s:V = a:V
|
let s:V = a:V
|
||||||
let s:L = s:V.import('Data.List')
|
let s:L = s:V.import('Data.List')
|
||||||
@@ -624,8 +621,6 @@ function! s:split_posix_text(text, ...) abort
|
|||||||
return split(text, newline, 1)
|
return split(text, newline, 1)
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
let &cpo = s:save_cpo
|
|
||||||
unlet s:save_cpo
|
|
||||||
" vim:set et ts=2 sts=2 sw=2 tw=0:
|
" vim:set et ts=2 sts=2 sw=2 tw=0:
|
||||||
|
|
||||||
endif
|
endif
|
||||||
|
|||||||
@@ -15,9 +15,6 @@ delfunction s:_SID
|
|||||||
" FIXME: This module name should be Vital.System ?
|
" FIXME: This module name should be Vital.System ?
|
||||||
" But the name has been already taken.
|
" But the name has been already taken.
|
||||||
|
|
||||||
let s:save_cpo = &cpo
|
|
||||||
set cpo&vim
|
|
||||||
|
|
||||||
|
|
||||||
" FIXME: Unfortunately, can't use s:_vital_loaded() for this purpose.
|
" FIXME: Unfortunately, can't use s:_vital_loaded() for this purpose.
|
||||||
" Because these variables are used when this script file is loaded.
|
" Because these variables are used when this script file is loaded.
|
||||||
@@ -169,9 +166,6 @@ else
|
|||||||
endif
|
endif
|
||||||
|
|
||||||
|
|
||||||
let &cpo = s:save_cpo
|
|
||||||
unlet s:save_cpo
|
|
||||||
|
|
||||||
" vim:set et ts=2 sts=2 sw=2 tw=0:
|
" vim:set et ts=2 sts=2 sw=2 tw=0:
|
||||||
|
|
||||||
endif
|
endif
|
||||||
|
|||||||
@@ -9,8 +9,6 @@ endfunction
|
|||||||
execute join(['function! vital#_crystal#Web#JSON#import() abort', printf("return map({'decode': '', '_vital_depends': '', '_vital_created': '', 'encode': '', '_vital_loaded': ''}, \"vital#_crystal#function('<SNR>%s_' . v:key)\")", s:_SID()), 'endfunction'], "\n")
|
execute join(['function! vital#_crystal#Web#JSON#import() abort', printf("return map({'decode': '', '_vital_depends': '', '_vital_created': '', 'encode': '', '_vital_loaded': ''}, \"vital#_crystal#function('<SNR>%s_' . v:key)\")", s:_SID()), 'endfunction'], "\n")
|
||||||
delfunction s:_SID
|
delfunction s:_SID
|
||||||
" ___vital___
|
" ___vital___
|
||||||
let s:save_cpo = &cpo
|
|
||||||
set cpo&vim
|
|
||||||
|
|
||||||
function! s:_true() abort
|
function! s:_true() abort
|
||||||
return 1
|
return 1
|
||||||
@@ -174,9 +172,6 @@ function! s:_encode_dict(val, settings) abort
|
|||||||
endfunction
|
endfunction
|
||||||
" @vimlint(EVL102, 0, l:ns)
|
" @vimlint(EVL102, 0, l:ns)
|
||||||
|
|
||||||
let &cpo = s:save_cpo
|
|
||||||
unlet s:save_cpo
|
|
||||||
|
|
||||||
" vim:set et ts=2 sts=2 sw=2 tw=0:
|
" vim:set et ts=2 sts=2 sw=2 tw=0:
|
||||||
|
|
||||||
endif
|
endif
|
||||||
|
|||||||
@@ -131,6 +131,7 @@ let attributes_value = {
|
|||||||
\ 'label': ['Text', ''],
|
\ 'label': ['Text', ''],
|
||||||
\ 'lang': ['Lang Tag', ''],
|
\ 'lang': ['Lang Tag', ''],
|
||||||
\ 'list': ['ID', ''],
|
\ 'list': ['ID', ''],
|
||||||
|
\ 'loading': ['eager/lazy', ''],
|
||||||
\ 'loop': ['Bool', ''],
|
\ 'loop': ['Bool', ''],
|
||||||
\ 'low': ['Number', ''],
|
\ 'low': ['Number', ''],
|
||||||
\ 'manifest': ['URL', ''],
|
\ 'manifest': ['URL', ''],
|
||||||
@@ -588,11 +589,11 @@ let g:xmldata_html5 = {
|
|||||||
\ ],
|
\ ],
|
||||||
\ 'iframe': [
|
\ 'iframe': [
|
||||||
\ [],
|
\ [],
|
||||||
\ extend(copy(global_attributes), {'src': [], 'srcdoc': [], 'name': [], 'width': [], 'height': [], 'sandbox': ['allow-same-origin', 'allow-forms', 'allow-scripts'], 'seamless': ['seamless', ''], 'referrerpolicy': referrerpolicy, 'allowfullscreen': [], 'allowpaymentrequest': [], 'allowpresentation': [], 'allowusermedia': []})
|
\ extend(copy(global_attributes), {'src': [], 'srcdoc': [], 'name': [], 'width': [], 'height': [], 'sandbox': ['allow-same-origin', 'allow-forms', 'allow-scripts'], 'seamless': ['seamless', ''], 'referrerpolicy': referrerpolicy, 'allowfullscreen': [], 'allowpaymentrequest': [], 'allowpresentation': [], 'allowusermedia': [], 'loading': ['eager', 'lazy']})
|
||||||
\ ],
|
\ ],
|
||||||
\ 'img': [
|
\ 'img': [
|
||||||
\ [],
|
\ [],
|
||||||
\ extend(copy(global_attributes), {'src': [], 'alt': [], 'height': [], 'width': [], 'decoding': ['async', 'sync', 'auto'], 'usemap': [], 'ismap': ['ismap', ''], 'referrerpolicy': referrerpolicy, 'crossorigin': ['anonymous', 'use-credentials']})
|
\ extend(copy(global_attributes), {'src': [], 'alt': [], 'height': [], 'width': [], 'decoding': ['async', 'sync', 'auto'], 'usemap': [], 'ismap': ['ismap', ''], 'referrerpolicy': referrerpolicy, 'crossorigin': ['anonymous', 'use-credentials'], 'loading': ['eager', 'lazy']})
|
||||||
\ ],
|
\ ],
|
||||||
\ 'input': [
|
\ 'input': [
|
||||||
\ [],
|
\ [],
|
||||||
@@ -746,6 +747,10 @@ let g:xmldata_html5 = {
|
|||||||
\ [],
|
\ [],
|
||||||
\ global_attributes
|
\ global_attributes
|
||||||
\ ],
|
\ ],
|
||||||
|
\ 'slot': [
|
||||||
|
\ [],
|
||||||
|
\ extend(copy(global_attributes), {'name': []})
|
||||||
|
\ ],
|
||||||
\ 'small': [
|
\ 'small': [
|
||||||
\ phrasing_elements,
|
\ phrasing_elements,
|
||||||
\ global_attributes
|
\ global_attributes
|
||||||
|
|||||||
319
build
319
build
@@ -1,319 +0,0 @@
|
|||||||
#!/usr/bin/env bash
|
|
||||||
|
|
||||||
set -E
|
|
||||||
|
|
||||||
DIRS="syntax indent compiler autoload ftplugin after/syntax after/indent after/ftplugin"
|
|
||||||
# shellcheck disable=SC2034
|
|
||||||
DIRS_BASIC="syntax compiler indent after/syntax after/indent"
|
|
||||||
# shellcheck disable=SC2034
|
|
||||||
DIRS_ALL="syntax indent compiler autoload ftplugin after extras"
|
|
||||||
# shellcheck disable=SC2034
|
|
||||||
DIRS_SYNTAX="syntax indent after/syntax after/indent"
|
|
||||||
# shellcheck disable=SC2034
|
|
||||||
DIRS_NOAFTER="syntax compiler indent autoload ftplugin"
|
|
||||||
DIRS_JAVASCRIPT="${DIRS} extras"
|
|
||||||
read -r -a DIRS_RM <<<"$DIRS_ALL"
|
|
||||||
|
|
||||||
OUTPUT=""
|
|
||||||
|
|
||||||
output() {
|
|
||||||
OUTPUT="$OUTPUT$1"
|
|
||||||
echo -n "$1"
|
|
||||||
}
|
|
||||||
|
|
||||||
download() {
|
|
||||||
for pack in $1; do
|
|
||||||
path="$(cut -d ':' -f 2 <<<"$pack")"
|
|
||||||
dir="tmp/$(cut -d '/' -f 2 <<<"$path")"
|
|
||||||
repo="$(awk -F\# '{print $1}' <<<"$path")"
|
|
||||||
branch="$(awk -F\# '{print $2}' <<<"$path")"
|
|
||||||
rm -rf "$dir"
|
|
||||||
(mkdir -p "$dir" && curl --silent -L "https://codeload.github.com/$repo/tar.gz/${branch:-master}" | tar -zx -C "$dir" --strip 1 && printf '.') &
|
|
||||||
done
|
|
||||||
|
|
||||||
wait
|
|
||||||
}
|
|
||||||
|
|
||||||
extract() {
|
|
||||||
echo
|
|
||||||
|
|
||||||
cat config.vim >> tmp/polyglot.vim
|
|
||||||
|
|
||||||
for pack in $1; do
|
|
||||||
name="$(cut -d ':' -f 1 <<<"$pack")"
|
|
||||||
path="$(cut -d ':' -f 2 <<<"$pack")"
|
|
||||||
dir="tmp/$(cut -d '/' -f 2 <<<"$path")"
|
|
||||||
directories="DIRS$(cut -d ':' -f 3 <<<"$pack")"
|
|
||||||
subtree="$(cut -d ':' -f 4 <<<"$pack")"
|
|
||||||
output "- [$name](https://github.com/$path) ("
|
|
||||||
|
|
||||||
subdirs=""
|
|
||||||
for subdir in ${!directories}; do
|
|
||||||
if [ -d "${dir}${subtree:-/}${subdir}" ]; then
|
|
||||||
base="$(basename "$subdir")"
|
|
||||||
if [[ "$subdirs" != *"$base"* ]]; then
|
|
||||||
subdirs="$subdirs, $base"
|
|
||||||
fi
|
|
||||||
|
|
||||||
copy_dir "${dir}${subtree}" "$subdir" "$name"
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
|
|
||||||
# syntax for go.vim depends on autoload for go.vim, but we exclude the
|
|
||||||
# autoload always and the ftplugin because it's too complex. FML.
|
|
||||||
if [ "${pack%%:*}" = "go" ]; then
|
|
||||||
copy_file "${dir}${subtree}" "${dir}${subtree}/autoload/go/config.vim" "${name}"
|
|
||||||
fi
|
|
||||||
|
|
||||||
output "${subdirs##, })"$'\n'
|
|
||||||
|
|
||||||
if (echo "julia coffee-script elixir fish git plantuml scala swift jinja" | grep -qF "$name"); then
|
|
||||||
echo "Skipping ftdetect installation of $name" >&2
|
|
||||||
continue
|
|
||||||
fi
|
|
||||||
|
|
||||||
[ -d "${dir}${subtree:-/}ftdetect" ] && for f in "${dir}${subtree:-/}ftdetect/"*; do
|
|
||||||
cat <<EOF >> tmp/polyglot.vim
|
|
||||||
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, '${pack%%:*}') == -1
|
|
||||||
augroup filetypedetect
|
|
||||||
" ${pack%%:*}, from ${f##*/ftdetect/} in ${pack#*:}
|
|
||||||
$(cat "${f}")
|
|
||||||
augroup end
|
|
||||||
endif
|
|
||||||
|
|
||||||
EOF
|
|
||||||
done
|
|
||||||
|
|
||||||
done
|
|
||||||
|
|
||||||
mv tmp/polyglot.vim ftdetect/
|
|
||||||
|
|
||||||
for pack in $1; do
|
|
||||||
name="$(cut -d ':' -f 1 <<<"$pack")"
|
|
||||||
path="$(cut -d ':' -f 2 <<<"$pack")"
|
|
||||||
dir="tmp/$(cut -d '/' -f 2 <<<"$path")"
|
|
||||||
subtree="$(cut -d ':' -f 4 <<<"$pack")"
|
|
||||||
|
|
||||||
if [ -d "$dir${subtree:-/}plugin" ]; then
|
|
||||||
echo "Possible error (plugin directory exists): $path" >&2
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
}
|
|
||||||
|
|
||||||
copy_dir() {
|
|
||||||
find "$1/$2" \( -name '*.vim' -o -name '*.vital' \) -print0 | while read -r -d $'\0' file; do
|
|
||||||
copy_file "$1" "$file" "$3"
|
|
||||||
done
|
|
||||||
}
|
|
||||||
|
|
||||||
copy_file() {
|
|
||||||
## $1 is the build dir (e.g. tmp/vim-go)
|
|
||||||
## $2 is the full file path, as returned by `find` (e.g. tmp/vim-go/indent/go.vim)
|
|
||||||
## $3 is the name of the package (so that we can detect if it's disabled at runtime)
|
|
||||||
local tmp_dir="$1"
|
|
||||||
local file_in_tmp="$2"
|
|
||||||
local file_basename="${2##*/}"
|
|
||||||
local file_path="${file_in_tmp##$tmp_dir/}" # Just this file's (full) path
|
|
||||||
file_path="${file_path%/*}" # Minus the actual name of the file
|
|
||||||
local file_in_dst="${file_path}/${file_basename}" # Could also be ${file_in_tmp##$tmp_dir/}
|
|
||||||
local package_name="$3"
|
|
||||||
|
|
||||||
if [ "${file_in_tmp##$tmp_dir/}" != "${file_in_dst}" ]; then
|
|
||||||
echo "Failure in logic in build script; '${file_in_tmp##$tmp_dir/}' != '${file_in_dst}'. Bailing." >&2
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
mkdir -p "${file_path}"
|
|
||||||
touch "$file_in_dst"
|
|
||||||
|
|
||||||
# Use comma instead of / to handle cases like c/c++
|
|
||||||
if [[ "${package_name}" == "jsx" ]]; then
|
|
||||||
sed -e "s,%%PACK%%,${package_name}," -e "/%%CONTENT%%/{r ${file_in_tmp}" -e "d;}" plugin_guard_jsx.vim.template >> "$file_in_dst"
|
|
||||||
else
|
|
||||||
sed -e "s,%%PACK%%,${package_name}," -e "/%%CONTENT%%/{r ${file_in_tmp}" -e "d;}" plugin_guard.vim.template >> "$file_in_dst"
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
update_readme() {
|
|
||||||
local tf of
|
|
||||||
tf="$(mktemp)"
|
|
||||||
of="$(mktemp)"
|
|
||||||
LC_ALL=C sort <<<"$OUTPUT" | grep -vxE '[[:space:]]*' > "$of"
|
|
||||||
|
|
||||||
awk 'suppress == 0 {
|
|
||||||
gsub(/<!--Package Count-->[^<]*<!--\/Package Count-->/,
|
|
||||||
"<!--Package Count-->'"$(awk 'END {print NR}' "$of")"'<!--/Package Count-->");
|
|
||||||
print;
|
|
||||||
}
|
|
||||||
/<!--Language Packs-->/ {
|
|
||||||
suppress = 1;
|
|
||||||
while ( ( getline line < "'"$of"'" ) > 0 ) {
|
|
||||||
print line;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
/<!--\/Language Packs-->/ {
|
|
||||||
suppress = 0;
|
|
||||||
print;
|
|
||||||
}' "README.md" >"$tf"
|
|
||||||
mv "$tf" "README.md"
|
|
||||||
}
|
|
||||||
|
|
||||||
PACKS="
|
|
||||||
acpiasl:martinlroth/vim-acpi-asl
|
|
||||||
ansible:pearofducks/ansible-vim
|
|
||||||
apiblueprint:sheerun/apiblueprint.vim
|
|
||||||
applescript:mityu/vim-applescript:_SYNTAX
|
|
||||||
arduino:sudar/vim-arduino-syntax
|
|
||||||
asciidoc:asciidoc/vim-asciidoc
|
|
||||||
autohotkey:hnamikaw/vim-autohotkey
|
|
||||||
blade:jwalton512/vim-blade
|
|
||||||
c++11:octol/vim-cpp-enhanced-highlight
|
|
||||||
c/c++:vim-jp/vim-cpp
|
|
||||||
caddyfile:isobit/vim-caddyfile
|
|
||||||
carp:hellerve/carp-vim
|
|
||||||
cjsx:mtscout6/vim-cjsx
|
|
||||||
clojure:guns/vim-clojure-static
|
|
||||||
cmake:pboettch/vim-cmake-syntax
|
|
||||||
coffee-script:kchmck/vim-coffee-script:_NOAFTER
|
|
||||||
cql:elubow/cql-vim
|
|
||||||
cryptol:victoredwardocallaghan/cryptol.vim
|
|
||||||
crystal:rhysd/vim-crystal
|
|
||||||
csv:chrisbra/csv.vim
|
|
||||||
cucumber:tpope/vim-cucumber
|
|
||||||
cue:mgrabovsky/vim-cuesheet
|
|
||||||
dart:dart-lang/dart-vim-plugin
|
|
||||||
dhall:vmchale/dhall-vim
|
|
||||||
dlang:JesseKPhillips/d.vim
|
|
||||||
dockerfile:ekalinin/Dockerfile.vim
|
|
||||||
elixir:elixir-lang/vim-elixir
|
|
||||||
elm:ElmCast/elm-vim
|
|
||||||
emberscript:yalesov/vim-ember-script
|
|
||||||
emblem:yalesov/vim-emblem
|
|
||||||
erlang:vim-erlang/vim-erlang-runtime
|
|
||||||
ferm:vim-scripts/ferm.vim
|
|
||||||
fish:georgewitteman/vim-fish
|
|
||||||
flatbuffers:dcharbon/vim-flatbuffers
|
|
||||||
fsharp:fsharp/vim-fsharp:_BASIC
|
|
||||||
git:tpope/vim-git
|
|
||||||
glsl:tikhomirov/vim-glsl:_NOAFTER
|
|
||||||
gmpl:maelvalais/gmpl.vim
|
|
||||||
gnuplot:vim-scripts/gnuplot-syntax-highlighting
|
|
||||||
go:fatih/vim-go:_BASIC
|
|
||||||
graphql:jparise/vim-graphql:_ALL
|
|
||||||
gradle:tfnico/vim-gradle
|
|
||||||
groovy:vim-scripts/groovy.vim
|
|
||||||
groovy-indent:vim-scripts/groovyindent-unix
|
|
||||||
haml:sheerun/vim-haml
|
|
||||||
handlebars:mustache/vim-mustache-handlebars
|
|
||||||
haproxy:CH-DanReif/haproxy.vim
|
|
||||||
haskell:neovimhaskell/haskell-vim
|
|
||||||
haxe:yaymukund/vim-haxe
|
|
||||||
hcl:b4b4r07/vim-hcl
|
|
||||||
helm:towolf/vim-helm
|
|
||||||
hive:zebradil/hive.vim
|
|
||||||
html5:othree/html5.vim
|
|
||||||
i3:mboughaba/i3config.vim
|
|
||||||
idris:idris-hackers/idris-vim
|
|
||||||
ion:vmchale/ion-vim
|
|
||||||
jasmine:glanotte/vim-jasmine
|
|
||||||
javascript:pangloss/vim-javascript:_JAVASCRIPT
|
|
||||||
jenkins:martinda/Jenkinsfile-vim-syntax
|
|
||||||
jinja:lepture/vim-jinja
|
|
||||||
json5:GutenYe/json5.vim
|
|
||||||
json:elzr/vim-json
|
|
||||||
jst:briancollins/vim-jst
|
|
||||||
jsx:MaxMEllon/vim-jsx-pretty:_ALL
|
|
||||||
julia:JuliaEditorSupport/julia-vim
|
|
||||||
kotlin:udalov/kotlin-vim
|
|
||||||
latex:LaTeX-Box-Team/LaTeX-Box
|
|
||||||
less:groenewege/vim-less:_NOAFTER
|
|
||||||
lilypond:anowlcalledjosh/vim-lilypond
|
|
||||||
livescript:gkz/vim-ls
|
|
||||||
llvm:rhysd/vim-llvm
|
|
||||||
log:MTDL9/vim-log-highlighting
|
|
||||||
lua:tbastos/vim-lua
|
|
||||||
mako:sophacles/vim-bundle-mako
|
|
||||||
markdown:plasticboy/vim-markdown:_SYNTAX
|
|
||||||
mathematica:voldikss/vim-mma
|
|
||||||
mdx:jxnblk/vim-mdx-js
|
|
||||||
meson:mesonbuild/meson:_ALL:/data/syntax-highlighting/vim/
|
|
||||||
moonscript:leafo/moonscript-vim
|
|
||||||
nginx:chr4/nginx.vim
|
|
||||||
nim:zah/nim.vim:_BASIC
|
|
||||||
nix:LnL7/vim-nix
|
|
||||||
objc:b4winckler/vim-objc
|
|
||||||
ocaml:rgrinberg/vim-ocaml
|
|
||||||
octave:McSinyx/vim-octave
|
|
||||||
opencl:petRUShka/vim-opencl
|
|
||||||
perl:vim-perl/vim-perl
|
|
||||||
pgsql:lifepillar/pgsql.vim
|
|
||||||
php:StanAngeloff/php.vim
|
|
||||||
plantuml:aklt/plantuml-syntax
|
|
||||||
pony:jakwings/vim-pony
|
|
||||||
powershell:PProvost/vim-ps1
|
|
||||||
protobuf:uarun/vim-protobuf
|
|
||||||
pug:digitaltoad/vim-pug
|
|
||||||
puppet:rodjek/vim-puppet
|
|
||||||
purescript:purescript-contrib/purescript-vim
|
|
||||||
python-compiler:aliev/vim-compiler-python
|
|
||||||
python-indent:Vimjas/vim-python-pep8-indent
|
|
||||||
python:vim-python/python-syntax
|
|
||||||
qmake:artoj/qmake-syntax-vim
|
|
||||||
qml:peterhoeg/vim-qml
|
|
||||||
r-lang:vim-scripts/R.vim:_BASIC
|
|
||||||
racket:wlangstroth/vim-racket
|
|
||||||
ragel:jneen/ragel.vim
|
|
||||||
raml:IN3D/vim-raml
|
|
||||||
reason:reasonml-editor/vim-reason-plus
|
|
||||||
rspec:sheerun/rspec.vim
|
|
||||||
rst:marshallward/vim-restructuredtext
|
|
||||||
ruby:vim-ruby/vim-ruby
|
|
||||||
rust:rust-lang/rust.vim
|
|
||||||
sbt:derekwyatt/vim-sbt
|
|
||||||
scala:derekwyatt/vim-scala
|
|
||||||
scss:cakebaker/scss-syntax.vim
|
|
||||||
slim:slim-template/vim-slim
|
|
||||||
slime:slime-lang/vim-slime-syntax
|
|
||||||
smt2:bohlender/vim-smt2
|
|
||||||
solidity:tomlion/vim-solidity
|
|
||||||
stylus:wavded/vim-stylus
|
|
||||||
svelte:evanleck/vim-svelte
|
|
||||||
svg-indent:jasonshell/vim-svg-indent
|
|
||||||
svg:vim-scripts/svg.vim
|
|
||||||
swift:keith/swift.vim
|
|
||||||
sxhkd:baskerville/vim-sxhkdrc
|
|
||||||
systemd:wgwoods/vim-systemd-syntax
|
|
||||||
terraform:hashivim/vim-terraform
|
|
||||||
textile:timcharper/textile.vim
|
|
||||||
thrift:solarnz/thrift.vim
|
|
||||||
tmux:ericpruitt/tmux.vim:_ALL:/vim/
|
|
||||||
tomdoc:wellbredgrapefruit/tomdoc.vim
|
|
||||||
toml:cespare/vim-toml
|
|
||||||
tptp:c-cube/vim-tptp
|
|
||||||
twig:lumiliet/vim-twig
|
|
||||||
typescript:HerringtonDarkholme/yats.vim
|
|
||||||
vala:arrufat/vala.vim
|
|
||||||
vbnet:vim-scripts/vbnet.vim
|
|
||||||
vcl:smerrill/vcl-vim-plugin
|
|
||||||
vifm:vifm/vifm.vim
|
|
||||||
vm:lepture/vim-velocity
|
|
||||||
vue:posva/vim-vue
|
|
||||||
xdc:amal-khailtash/vim-xdc-syntax
|
|
||||||
xml:amadeus/vim-xml
|
|
||||||
xls:vim-scripts/XSLT-syntax
|
|
||||||
yaml:stephpy/vim-yaml
|
|
||||||
yard:sheerun/vim-yardoc
|
|
||||||
zephir:xwsoul/vim-zephir
|
|
||||||
zig:ziglang/zig.vim
|
|
||||||
"
|
|
||||||
|
|
||||||
rm -rf tmp
|
|
||||||
rm -rf "${DIRS_RM[@]}"
|
|
||||||
mkdir tmp
|
|
||||||
|
|
||||||
printf "Downloading packs..."
|
|
||||||
download "$(sed '/^#/d' <<<"$PACKS")"
|
|
||||||
extract "$(sed '/^#/d' <<<"$PACKS")"
|
|
||||||
update_readme
|
|
||||||
|
|
||||||
rm -rf tmp
|
|
||||||
42
compiler/ant.vim
Normal file
42
compiler/ant.vim
Normal file
@@ -0,0 +1,42 @@
|
|||||||
|
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'ant') == -1
|
||||||
|
|
||||||
|
" Vim Compiler File
|
||||||
|
" Compiler: ant
|
||||||
|
" Maintainer: Johannes Zellner <johannes@zellner.org>
|
||||||
|
" Last Change: Mi, 13 Apr 2005 22:50:07 CEST
|
||||||
|
|
||||||
|
if exists("current_compiler")
|
||||||
|
finish
|
||||||
|
endif
|
||||||
|
let current_compiler = "ant"
|
||||||
|
|
||||||
|
if exists(":CompilerSet") != 2 " older Vim always used :setlocal
|
||||||
|
command -nargs=* CompilerSet setlocal <args>
|
||||||
|
endif
|
||||||
|
|
||||||
|
let s:cpo_save = &cpo
|
||||||
|
set cpo&vim
|
||||||
|
|
||||||
|
CompilerSet makeprg=ant
|
||||||
|
|
||||||
|
" first line:
|
||||||
|
" ant with jikes +E, which assumes the following
|
||||||
|
" two property lines in your 'build.xml':
|
||||||
|
"
|
||||||
|
" <property name = "build.compiler" value = "jikes"/>
|
||||||
|
" <property name = "build.compiler.emacs" value = "true"/>
|
||||||
|
"
|
||||||
|
" second line:
|
||||||
|
" ant with javac
|
||||||
|
"
|
||||||
|
" note that this will work also for tasks like [wtkbuild]
|
||||||
|
"
|
||||||
|
CompilerSet errorformat=\ %#[%.%#]\ %#%f:%l:%v:%*\\d:%*\\d:\ %t%[%^:]%#:%m,
|
||||||
|
\%A\ %#[%.%#]\ %f:%l:\ %m,%-Z\ %#[%.%#]\ %p^,%C\ %#[%.%#]\ %#%m
|
||||||
|
|
||||||
|
" ,%-C%.%#
|
||||||
|
|
||||||
|
let &cpo = s:cpo_save
|
||||||
|
unlet s:cpo_save
|
||||||
|
|
||||||
|
endif
|
||||||
@@ -3,7 +3,7 @@ if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'cucumber') == -
|
|||||||
" Vim compiler file
|
" Vim compiler file
|
||||||
" Compiler: Cucumber
|
" Compiler: Cucumber
|
||||||
" Maintainer: Tim Pope <vimNOSPAM@tpope.org>
|
" Maintainer: Tim Pope <vimNOSPAM@tpope.org>
|
||||||
" Last Change: 2010 Aug 09
|
" Last Change: 2016 Aug 29
|
||||||
|
|
||||||
if exists("current_compiler")
|
if exists("current_compiler")
|
||||||
finish
|
finish
|
||||||
|
|||||||
@@ -1,20 +0,0 @@
|
|||||||
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'javascript') == -1
|
|
||||||
|
|
||||||
" Vim compiler plugin
|
|
||||||
" Language: JavaScript
|
|
||||||
" Maintainer: vim-javascript community
|
|
||||||
" URL: https://github.com/pangloss/vim-javascript
|
|
||||||
|
|
||||||
if exists("current_compiler")
|
|
||||||
finish
|
|
||||||
endif
|
|
||||||
let current_compiler = "eslint"
|
|
||||||
|
|
||||||
if exists(":CompilerSet") != 2
|
|
||||||
command! -nargs=* CompilerSet setlocal <args>
|
|
||||||
endif
|
|
||||||
|
|
||||||
CompilerSet makeprg=eslint\ -f\ compact\ %
|
|
||||||
CompilerSet errorformat=%f:\ line\ %l\\,\ col\ %c\\,\ %m
|
|
||||||
|
|
||||||
endif
|
|
||||||
@@ -3,7 +3,7 @@ if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'haml') == -1
|
|||||||
" Vim compiler file
|
" Vim compiler file
|
||||||
" Compiler: Haml
|
" Compiler: Haml
|
||||||
" Maintainer: Tim Pope <vimNOSPAM@tpope.org>
|
" Maintainer: Tim Pope <vimNOSPAM@tpope.org>
|
||||||
" Last Change: 2013 May 30
|
" Last Change: 2016 Aug 29
|
||||||
|
|
||||||
if exists("current_compiler")
|
if exists("current_compiler")
|
||||||
finish
|
finish
|
||||||
|
|||||||
36
compiler/ledger.vim
Normal file
36
compiler/ledger.vim
Normal file
@@ -0,0 +1,36 @@
|
|||||||
|
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'ledger') == -1
|
||||||
|
|
||||||
|
" Vim Compiler File
|
||||||
|
" Compiler: ledger
|
||||||
|
" by Johann Klähn; Use according to the terms of the GPL>=2.
|
||||||
|
" vim:ts=2:sw=2:sts=2:foldmethod=marker
|
||||||
|
|
||||||
|
scriptencoding utf-8
|
||||||
|
|
||||||
|
if exists('current_compiler') || !exists('g:ledger_bin')
|
||||||
|
finish
|
||||||
|
endif
|
||||||
|
|
||||||
|
let current_compiler = g:ledger_bin
|
||||||
|
|
||||||
|
if exists(':CompilerSet') != 2
|
||||||
|
command -nargs=* CompilerSet setlocal <args>
|
||||||
|
endif
|
||||||
|
|
||||||
|
if !exists('g:ledger_main')
|
||||||
|
let g:ledger_main = '%'
|
||||||
|
endif
|
||||||
|
|
||||||
|
if !g:ledger_is_hledger
|
||||||
|
" Capture Ledger errors (%-C ignores all lines between "While parsing..." and "Error:..."):
|
||||||
|
CompilerSet errorformat=%EWhile\ parsing\ file\ \"%f\"\\,\ line\ %l:,%ZError:\ %m,%-C%.%#
|
||||||
|
" Capture Ledger warnings:
|
||||||
|
CompilerSet errorformat+=%tarning:\ \"%f\"\\,\ line\ %l:\ %m
|
||||||
|
" Skip all other lines:
|
||||||
|
CompilerSet errorformat+=%-G%.%#
|
||||||
|
exe 'CompilerSet makeprg='.substitute(g:ledger_bin, ' ', '\\ ', 'g').'\ -f\ ' . shellescape(expand(g:ledger_main)) . '\ '.substitute(g:ledger_extra_options, ' ', '\\ ', 'g').'\ source\ ' . shellescape(expand(g:ledger_main))
|
||||||
|
else
|
||||||
|
exe 'CompilerSet makeprg=('.substitute(g:ledger_bin, ' ', '\\ ', 'g').'\ -f\ ' . shellescape(expand(g:ledger_main)) . '\ print\ '.substitute(g:ledger_extra_options, ' ', '\\ ', 'g').'\ >\ /dev/null)'
|
||||||
|
endif
|
||||||
|
|
||||||
|
endif
|
||||||
@@ -5,9 +5,9 @@ if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'ocaml') == -1
|
|||||||
" Maintainer: Markus Mottl <markus.mottl@gmail.com>
|
" Maintainer: Markus Mottl <markus.mottl@gmail.com>
|
||||||
" URL: http://www.ocaml.info/vim/compiler/ocaml.vim
|
" URL: http://www.ocaml.info/vim/compiler/ocaml.vim
|
||||||
" Last Change:
|
" Last Change:
|
||||||
|
" 2020 Mar 28 - Improved error format (Thomas Leonard)
|
||||||
" 2017 Nov 26 - Improved error format (Markus Mottl)
|
" 2017 Nov 26 - Improved error format (Markus Mottl)
|
||||||
" 2013 Aug 27 - Added a new OCaml error format (Markus Mottl)
|
" 2013 Aug 27 - Added a new OCaml error format (Markus Mottl)
|
||||||
" 2013 Jun 30 - Initial version (Marc Weber)
|
|
||||||
"
|
"
|
||||||
" Marc Weber's comments:
|
" Marc Weber's comments:
|
||||||
" Setting makeprg doesn't make sense, because there is ocamlc, ocamlopt,
|
" Setting makeprg doesn't make sense, because there is ocamlc, ocamlopt,
|
||||||
@@ -33,6 +33,7 @@ let s:cpo_save = &cpo
|
|||||||
set cpo&vim
|
set cpo&vim
|
||||||
|
|
||||||
CompilerSet errorformat =
|
CompilerSet errorformat =
|
||||||
|
\%EFile\ \"%f\"\\,\ lines\ %*\\d-%l\\,\ characters\ %c-%*\\d:,
|
||||||
\%EFile\ \"%f\"\\,\ line\ %l\\,\ characters\ %c-%*\\d:,
|
\%EFile\ \"%f\"\\,\ line\ %l\\,\ characters\ %c-%*\\d:,
|
||||||
\%EFile\ \"%f\"\\,\ line\ %l\\,\ characters\ %c-%*\\d\ %.%#,
|
\%EFile\ \"%f\"\\,\ line\ %l\\,\ characters\ %c-%*\\d\ %.%#,
|
||||||
\%EFile\ \"%f\"\\,\ line\ %l\\,\ character\ %c:%m,
|
\%EFile\ \"%f\"\\,\ line\ %l\\,\ character\ %c:%m,
|
||||||
|
|||||||
87
compiler/powershell.vim
Normal file
87
compiler/powershell.vim
Normal file
@@ -0,0 +1,87 @@
|
|||||||
|
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'powershell') == -1
|
||||||
|
|
||||||
|
" Compiler: powershell
|
||||||
|
" Run ps1 scripts in powershell and process their output. Quickly jump through
|
||||||
|
" stack traces and see script output in the quickfix.
|
||||||
|
|
||||||
|
if exists("current_compiler")
|
||||||
|
finish
|
||||||
|
endif
|
||||||
|
let current_compiler = "powershell"
|
||||||
|
|
||||||
|
if exists(":CompilerSet") != 2 " older Vim always used :setlocal
|
||||||
|
command -nargs=* CompilerSet setlocal <args>
|
||||||
|
endif
|
||||||
|
|
||||||
|
let s:cpo_save = &cpo
|
||||||
|
set cpo-=C
|
||||||
|
|
||||||
|
if !exists("g:ps1_makeprg_cmd")
|
||||||
|
if executable('pwsh')
|
||||||
|
" pwsh is the future
|
||||||
|
let g:ps1_makeprg_cmd = 'pwsh'
|
||||||
|
elseif executable('pwsh.exe')
|
||||||
|
let g:ps1_makeprg_cmd = 'pwsh.exe'
|
||||||
|
elseif executable('powershell.exe')
|
||||||
|
let g:ps1_makeprg_cmd = 'powershell.exe'
|
||||||
|
else
|
||||||
|
let g:ps1_makeprg_cmd = ''
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
|
||||||
|
if !executable(g:ps1_makeprg_cmd)
|
||||||
|
echoerr "To use the powershell compiler, please set g:ps1_makeprg_cmd to the powershell executable!"
|
||||||
|
endif
|
||||||
|
|
||||||
|
" Show CategoryInfo, FullyQualifiedErrorId, etc?
|
||||||
|
let g:ps1_efm_show_error_categories = get(g:, 'ps1_efm_show_error_categories', 0)
|
||||||
|
|
||||||
|
" Use absolute path because powershell requires explicit relative paths
|
||||||
|
" (./file.ps1 is okay, but # expands to file.ps1)
|
||||||
|
let &l:makeprg = g:ps1_makeprg_cmd .' %:p:S'
|
||||||
|
|
||||||
|
" Parse file, line, char from callstacks:
|
||||||
|
" Write-Ouput : The term 'Write-Ouput' is not recognized as the name of a
|
||||||
|
" cmdlet, function, script file, or operable program. Check the spelling
|
||||||
|
" of the name, or if a path was included, verify that the path is correct
|
||||||
|
" and try again.
|
||||||
|
" At C:\script.ps1:11 char:5
|
||||||
|
" + Write-Ouput $content
|
||||||
|
" + ~~~~~~~~~~~
|
||||||
|
" + CategoryInfo : ObjectNotFound: (Write-Ouput:String) [], CommandNotFoundException
|
||||||
|
" + FullyQualifiedErrorId : CommandNotFoundException
|
||||||
|
|
||||||
|
" Showing error in context with underlining.
|
||||||
|
CompilerSet errorformat=%+G+%m
|
||||||
|
" Error summary.
|
||||||
|
CompilerSet errorformat+=%E%*\\S\ :\ %m
|
||||||
|
" Error location.
|
||||||
|
CompilerSet errorformat+=%CAt\ %f:%l\ char:%c
|
||||||
|
" Errors that span multiple lines (may be wrapped to width of terminal).
|
||||||
|
CompilerSet errorformat+=%C%m
|
||||||
|
" Ignore blank/whitespace-only lines.
|
||||||
|
CompilerSet errorformat+=%Z\\s%#
|
||||||
|
|
||||||
|
if g:ps1_efm_show_error_categories
|
||||||
|
CompilerSet errorformat^=%+G\ \ \ \ +\ %.%#\\s%#:\ %m
|
||||||
|
else
|
||||||
|
CompilerSet errorformat^=%-G\ \ \ \ +\ %.%#\\s%#:\ %m
|
||||||
|
endif
|
||||||
|
|
||||||
|
|
||||||
|
" Parse file, line, char from of parse errors:
|
||||||
|
" At C:\script.ps1:22 char:16
|
||||||
|
" + Stop-Process -Name "invalidprocess
|
||||||
|
" + ~~~~~~~~~~~~~~~
|
||||||
|
" The string is missing the terminator: ".
|
||||||
|
" + CategoryInfo : ParserError: (:) [], ParseException
|
||||||
|
" + FullyQualifiedErrorId : TerminatorExpectedAtEndOfString
|
||||||
|
CompilerSet errorformat+=At\ %f:%l\ char:%c
|
||||||
|
|
||||||
|
|
||||||
|
let &cpo = s:cpo_save
|
||||||
|
unlet s:cpo_save
|
||||||
|
|
||||||
|
" vim:set sw=2 sts=2:
|
||||||
|
|
||||||
|
endif
|
||||||
@@ -26,7 +26,7 @@ else
|
|||||||
if has('patch-7.4.191')
|
if has('patch-7.4.191')
|
||||||
CompilerSet makeprg=rustc\ \%:S
|
CompilerSet makeprg=rustc\ \%:S
|
||||||
else
|
else
|
||||||
CompilerSet makeprg=rustc\ \%
|
CompilerSet makeprg=rustc\ \"%\"
|
||||||
endif
|
endif
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
|||||||
43
compiler/swift.vim
Normal file
43
compiler/swift.vim
Normal file
@@ -0,0 +1,43 @@
|
|||||||
|
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'swift') == -1
|
||||||
|
|
||||||
|
" Vim compiler file
|
||||||
|
" Compiler: Swift Compiler
|
||||||
|
" Maintainer: Ayman Bagabas <ayman.bagabas@gmail.com>
|
||||||
|
" Latest Revision: 2020 Feb 16
|
||||||
|
|
||||||
|
if exists("current_compiler")
|
||||||
|
finish
|
||||||
|
endif
|
||||||
|
let current_compiler = "swiftc"
|
||||||
|
|
||||||
|
" vint: -ProhibitAbbreviationOption
|
||||||
|
let s:save_cpo = &cpo
|
||||||
|
set cpo&vim
|
||||||
|
" vint: +ProhibitAbbreviationOption
|
||||||
|
|
||||||
|
if exists(":CompilerSet") != 2
|
||||||
|
command -nargs=* CompilerSet setlocal <args>
|
||||||
|
endif
|
||||||
|
|
||||||
|
if has('patch-7.4.191')
|
||||||
|
CompilerSet makeprg=swiftc\ \%:S
|
||||||
|
else
|
||||||
|
CompilerSet makeprg=swiftc\ \%
|
||||||
|
endif
|
||||||
|
|
||||||
|
CompilerSet errorformat=
|
||||||
|
\%E%f:%l:%c:\ %trror:\ %m,
|
||||||
|
\%W%f:%l:%c:\ %tarning:\ %m,
|
||||||
|
\%I%f:%l:%c:\ note:\ %m,
|
||||||
|
\%E%f:%l:\ %trror:\ %m,
|
||||||
|
\%W%f:%l:\ %tarning:\ %m,
|
||||||
|
\%I%f:%l:\ note:\ %m,
|
||||||
|
|
||||||
|
" vint: -ProhibitAbbreviationOption
|
||||||
|
let &cpo = s:save_cpo
|
||||||
|
unlet s:save_cpo
|
||||||
|
" vint: +ProhibitAbbreviationOption
|
||||||
|
|
||||||
|
" vim: set et sw=4 sts=4 ts=8:
|
||||||
|
|
||||||
|
endif
|
||||||
82
config.vim
82
config.vim
@@ -1,82 +0,0 @@
|
|||||||
" Enable jsx syntax by default
|
|
||||||
if !exists('g:jsx_ext_required')
|
|
||||||
let g:jsx_ext_required = 0
|
|
||||||
endif
|
|
||||||
|
|
||||||
" Make csv loading faster
|
|
||||||
if !exists('g:csv_start')
|
|
||||||
let g:csv_start = 1
|
|
||||||
endif
|
|
||||||
if !exists('g:csv_end')
|
|
||||||
let g:csv_end = 2
|
|
||||||
endif
|
|
||||||
|
|
||||||
" Disable json concealing by default
|
|
||||||
if !exists('g:vim_json_syntax_conceal')
|
|
||||||
let g:vim_json_syntax_conceal = 0
|
|
||||||
endif
|
|
||||||
|
|
||||||
let g:filetype_euphoria = 'elixir'
|
|
||||||
|
|
||||||
augroup filetypedetect
|
|
||||||
autocmd BufNewFile,BufReadPost *.vb setlocal filetype=vbnet
|
|
||||||
augroup END
|
|
||||||
|
|
||||||
let g:python_highlight_all = 1
|
|
||||||
|
|
||||||
augroup filetypedetect
|
|
||||||
if v:version < 704
|
|
||||||
" NOTE: this line fixes an issue with the default system-wide lisp ftplugin
|
|
||||||
" which didn't define b:undo_ftplugin on older Vim versions
|
|
||||||
" (*.jl files are recognized as lisp)
|
|
||||||
autocmd BufRead,BufNewFile *.jl let b:undo_ftplugin = "setlocal comments< define< formatoptions< iskeyword< lisp<"
|
|
||||||
endif
|
|
||||||
|
|
||||||
autocmd BufRead,BufNewFile *.jl set filetype=julia
|
|
||||||
|
|
||||||
" coffeescript
|
|
||||||
autocmd BufNewFile,BufRead *.coffee set filetype=coffee
|
|
||||||
autocmd BufNewFile,BufRead *Cakefile set filetype=coffee
|
|
||||||
autocmd BufNewFile,BufRead *.coffeekup,*.ck set filetype=coffee
|
|
||||||
autocmd BufNewFile,BufRead *._coffee set filetype=coffee
|
|
||||||
autocmd BufNewFile,BufRead *.litcoffee set filetype=litcoffee
|
|
||||||
autocmd BufNewFile,BufRead *.coffee.md set filetype=litcoffee
|
|
||||||
|
|
||||||
|
|
||||||
" elixir
|
|
||||||
au BufRead,BufNewFile *.ex,*.exs set filetype=elixir
|
|
||||||
au BufRead,BufNewFile *.eex,*.leex set filetype=eelixir
|
|
||||||
au BufRead,BufNewFile mix.lock set filetype=elixir
|
|
||||||
|
|
||||||
" fish
|
|
||||||
autocmd BufRead,BufNewFile *.fish setfiletype fish
|
|
||||||
autocmd BufRead fish_funced_*_*.fish call search('^$')
|
|
||||||
autocmd BufRead,BufNewFile ~/.config/fish/fish_{read_,}history setfiletype yaml
|
|
||||||
autocmd BufRead,BufNewFile ~/.config/fish/fishd.* setlocal readonly
|
|
||||||
autocmd BufNewFile ~/.config/fish/functions/*.fish
|
|
||||||
\ call append(0, ['function '.expand('%:t:r'),
|
|
||||||
\'',
|
|
||||||
\'end']) |
|
|
||||||
\ 2
|
|
||||||
|
|
||||||
" git
|
|
||||||
autocmd BufNewFile,BufRead *.git/{,modules/**/,worktrees/*/}{COMMIT_EDIT,TAG_EDIT,MERGE_,}MSG set ft=gitcommit
|
|
||||||
autocmd BufNewFile,BufRead *.git/config,.gitconfig,gitconfig,.gitmodules set ft=gitconfig
|
|
||||||
autocmd BufNewFile,BufRead */.config/git/config set ft=gitconfig
|
|
||||||
autocmd BufNewFile,BufRead *.git/modules/**/config set ft=gitconfig
|
|
||||||
autocmd BufNewFile,BufRead git-rebase-todo set ft=gitrebase
|
|
||||||
autocmd BufNewFile,BufRead .gitsendemail.* set ft=gitsendemail
|
|
||||||
|
|
||||||
" plantuml
|
|
||||||
autocmd BufRead,BufNewFile *.pu,*.uml,*.plantuml,*.puml setfiletype plantuml | set filetype=plantuml
|
|
||||||
|
|
||||||
" scala
|
|
||||||
au BufRead,BufNewFile *.scala,*.sc set filetype=scala
|
|
||||||
au BufRead,BufNewFile *.sbt setfiletype sbt.scala
|
|
||||||
|
|
||||||
" swift
|
|
||||||
autocmd BufNewFile,BufRead *.swift set filetype=swift
|
|
||||||
|
|
||||||
"jinja
|
|
||||||
autocmd BufNewFile,BufRead *.jinja2,*.j2,*.jinja,*.nunjucks,*.nunjs,*.njk set ft=jinja
|
|
||||||
augroup END
|
|
||||||
16
ctags/puppet.ctags
Normal file
16
ctags/puppet.ctags
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'puppet') == -1
|
||||||
|
|
||||||
|
--langdef=puppet
|
||||||
|
--langmap=puppet:.pp
|
||||||
|
--regex-puppet=/^[[:space:]]*class[[:space:]]*([a-z][a-zA-Z0-9_:\-]+)/\1/c,class/
|
||||||
|
--regex-puppet=/^[[:space:]]*site[[:space:]]*([a-zA-Z0-9_\-]+)/\1/s,site/
|
||||||
|
--regex-puppet=/^[[:space:]]*node[[:space:]]*[\'|\"]*([a-zA-Z0-9_\.\-]+)[\'|\"]*/\1/n,node/
|
||||||
|
--regex-puppet=/^[[:space:]]*define[[:space:]]*([a-z][a-zA-Z0-9_:\-]+)/\1/d,definition/
|
||||||
|
--regex-puppet=/^[[:space:]]*(include|require)[[:space:]]*([a-zA-Z0-9_:]+)/\1 \2/i,include/
|
||||||
|
--regex-puppet=/^[[:space:]]*([\$][a-zA-Z0-9_:]+)[[:space:]]*=/\1/v,variable/
|
||||||
|
--regex-puppet=/^[[:space:]]*[~|\-]?>?[[:space:]]*([a-z][a-zA-Z0-9_:]+)[[:space:]]*\{ *(.*):/\1[\2]/r,resource/
|
||||||
|
--regex-puppet=/([A-Z][a-zA-Z0-9_:]+)[[:space:]]*\{/\1/f,default/
|
||||||
|
--regex-puppet=/^[[:space:]]*type[[:space:]]*([A-Z][a-zA-Z0-9_:]*)[[:space:]]*=/\1/t,type/
|
||||||
|
--regex-puppet=/^[[:space:]]*function[[:space:]]*([a-zA-Z0-9_:]*)[[:space:]]*/\1/u,function/
|
||||||
|
|
||||||
|
endif
|
||||||
16
ctags/puppet_u.ctags
Normal file
16
ctags/puppet_u.ctags
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'puppet') == -1
|
||||||
|
|
||||||
|
--langdef=puppet
|
||||||
|
--map-puppet=+.pp
|
||||||
|
--regex-puppet=/^[[:space:]]*node[[:space:]]*[\'|\"]*([a-zA-Z0-9_\.\-]+)[\'|\"]*/\1/n,node/{scope=set}
|
||||||
|
--regex-puppet=/^[[:space:]]*class[[:space:]]*([a-z][a-zA-Z0-9_:\-]+)[[:space:]]*\{*/\1/c,class,classes/{scope=set}
|
||||||
|
--regex-puppet=/^[[:space:]]*define[[:space:]]*([a-z][a-zA-Z0-9_:\-]+)/\1/d,definition/{scope=set}
|
||||||
|
--regex-puppet=/^[[:space:]]*(include|require)[[:space:]]*([a-zA-Z0-9_:]+)/\1 \2/i,include,includes/{scope=ref}
|
||||||
|
--regex-puppet=/^[[:space:]]*[~|\-]?>?[[:space:]]*([a-z][a-zA-Z0-9_:]+)[[:space:]]*\{[[:space:]]*(.*):/\1[\2]/r,resource/{scope=ref}
|
||||||
|
--regex-puppet=/^[[:space:]]*([\$][a-zA-Z0-9_:]+)[[:space:]]*=/\1/v,variable/{scope=ref}
|
||||||
|
--regex-puppet=/([A-Z][a-zA-Z0-9_:]+)[[:space:]]*\{/\1/f,default/
|
||||||
|
--regex-puppet=/^[[:space:]]*site[[:space:]]*([a-zA-Z0-9_\-]+)/\1/s,site/
|
||||||
|
--regex-puppet=/^[[:space:]]*type[[:space:]]*([A-Z][a-zA-Z0-9_:]*)[[:space:]]*=/\1/t,type/
|
||||||
|
--regex-puppet=/^[[:space:]]*function[[:space:]]*([a-zA-Z0-9_:]*)[[:space:]]*/\1/u,function/
|
||||||
|
|
||||||
|
endif
|
||||||
15
ctags/rust.ctags
Normal file
15
ctags/rust.ctags
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'rust') == -1
|
||||||
|
|
||||||
|
--langdef=Rust
|
||||||
|
--langmap=Rust:.rs
|
||||||
|
--regex-Rust=/^[ \t]*(#\[[^\]]\][ \t]*)*(pub[ \t]+)?(extern[ \t]+)?("[^"]+"[ \t]+)?(unsafe[ \t]+)?fn[ \t]+([a-zA-Z0-9_]+)/\6/f,functions,function definitions/
|
||||||
|
--regex-Rust=/^[ \t]*(pub[ \t]+)?type[ \t]+([a-zA-Z0-9_]+)/\2/T,types,type definitions/
|
||||||
|
--regex-Rust=/^[ \t]*(pub[ \t]+)?enum[ \t]+([a-zA-Z0-9_]+)/\2/g,enum,enumeration names/
|
||||||
|
--regex-Rust=/^[ \t]*(pub[ \t]+)?struct[ \t]+([a-zA-Z0-9_]+)/\2/s,structure names/
|
||||||
|
--regex-Rust=/^[ \t]*(pub[ \t]+)?mod[ \t]+([a-zA-Z0-9_]+)/\2/m,modules,module names/
|
||||||
|
--regex-Rust=/^[ \t]*(pub[ \t]+)?(static|const)[ \t]+([a-zA-Z0-9_]+)/\3/c,consts,static constants/
|
||||||
|
--regex-Rust=/^[ \t]*(pub[ \t]+)?trait[ \t]+([a-zA-Z0-9_]+)/\2/t,traits,traits/
|
||||||
|
--regex-Rust=/^[ \t]*(pub[ \t]+)?impl([ \t\n]*<[^>]*>)?[ \t]+(([a-zA-Z0-9_:]+)[ \t]*(<[^>]*>)?[ \t]+(for)[ \t]+)?([a-zA-Z0-9_]+)/\4 \6 \7/i,impls,trait implementations/
|
||||||
|
--regex-Rust=/^[ \t]*macro_rules![ \t]+([a-zA-Z0-9_]+)/\1/d,macros,macro definitions/
|
||||||
|
|
||||||
|
endif
|
||||||
17
ctags/scala.ctags
Normal file
17
ctags/scala.ctags
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'scala') == -1
|
||||||
|
|
||||||
|
--langdef=scala
|
||||||
|
--langmap=scala:.scala
|
||||||
|
|
||||||
|
--regex-scala=/^[ \t]*((abstract|final|sealed|implicit|lazy)[ \t]*)*(private[^ ]*|protected)?[ \t]*class[ \t]+([a-zA-Z0-9_]+)/\4/c,classes/
|
||||||
|
--regex-scala=/^[ \t]*((abstract|final|sealed|implicit|lazy)[ \t]*)*(private[^ ]*|protected)?[ \t]*object[ \t]+([a-zA-Z0-9_]+)/\4/o,objects/
|
||||||
|
--regex-scala=/^[ \t]*((abstract|final|sealed|implicit|lazy)[ \t]*)*(private[^ ]*|protected)?[ \t]*((abstract|final|sealed|implicit|lazy)[ \t ]*)*case class[ \t ]+([a-zA-Z0-9_]+)/\6/C,case classes/
|
||||||
|
--regex-scala=/^[ \t]*((abstract|final|sealed|implicit|lazy)[ \t]*)*(private[^ ]*|protected)?[ \t]*case object[ \t]+([a-zA-Z0-9_]+)/\4/O,case objects/
|
||||||
|
--regex-scala=/^[ \t]*((abstract|final|sealed|implicit|lazy)[ \t]*)*(private[^ ]*|protected)?[ \t]*trait[ \t]+([a-zA-Z0-9_]+)/\4/t,traits/
|
||||||
|
--regex-scala=/^[ \t]*type[ \t]+([a-zA-Z0-9_]+)/\1/T,types/
|
||||||
|
--regex-scala=/^[ \t]*((abstract|final|sealed|implicit|lazy|override|private[^ ]*(\[[a-z]*\])*|protected)[ \t]*)*def[ \t]+([a-zA-Z0-9_]+)/\4/m,methods/
|
||||||
|
--regex-scala=/^[ \t]*((abstract|final|sealed|implicit|lazy|override|private[^ ]*|protected)[ \t]*)*val[ \t]+([a-zA-Z0-9_]+)/\3/V,values/
|
||||||
|
--regex-scala=/^[ \t]*((abstract|final|sealed|implicit|lazy|override|private[^ ]*|protected)[ \t]*)*var[ \t]+([a-zA-Z0-9_]+)/\3/v,variables/
|
||||||
|
--regex-scala=/^[ \t]*package[ \t]+([a-zA-Z0-9_.]+)/\1/p,packages/
|
||||||
|
|
||||||
|
endif
|
||||||
17
ctags/typescript.ctags
Normal file
17
ctags/typescript.ctags
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'typescript') == -1
|
||||||
|
|
||||||
|
--langdef=typescript
|
||||||
|
--langmap=typescript:.ts
|
||||||
|
--regex-typescript=/^[ \t]*(export)?[ \t]*class[ \t]+([a-zA-Z0-9_]+)/\2/c,classes/
|
||||||
|
--regex-typescript=/^[ \t]*(export)?[ \t]*abstract class[ \t]+([a-zA-Z0-9_]+)/\2/a,abstract classes/
|
||||||
|
--regex-typescript=/^[ \t]*(export)?[ \t]*module[ \t]+([a-zA-Z0-9_]+)/\2/n,modules/
|
||||||
|
--regex-typescript=/^[ \t]*(export)?[ \t]*type[ \t]+([a-zA-Z0-9_]+)/\2/t,types/
|
||||||
|
--regex-typescript=/^[ \t]*(export)?[ \t]*namespace[ \t]+([a-zA-Z0-9_]+)/\2/n,modules/
|
||||||
|
--regex-typescript=/^[ \t]*(export)?[ \t]*function[ \t]+([a-zA-Z0-9_]+)/\2/f,functions/
|
||||||
|
--regex-typescript=/^[ \t]*export[ \t]+(var|const|let)[ \t]+([a-zA-Z0-9_]+)/\1/v,variables/
|
||||||
|
--regex-typescript=/^[ \t]*var[ \t]+([a-zA-Z0-9_]+)[ \t]*=[ \t]*function[ \t]*\(\)/\1/l,varlambdas/
|
||||||
|
--regex-typescript=/^[ \t]*(export)?[ \t]*(public|private)[ \t]+(static|readonly)?[ \t]*([a-zA-Z0-9_]+)/\4/m,members/
|
||||||
|
--regex-typescript=/^[ \t]*(export)?[ \t]*interface[ \t]+([a-zA-Z0-9_]+)/\2/i,interfaces/
|
||||||
|
--regex-typescript=/^[ \t]*(export)?[ \t]*enum[ \t]+([a-zA-Z0-9_]+)/\2/e,enums/
|
||||||
|
|
||||||
|
endif
|
||||||
185
doc/clojure.txt
Normal file
185
doc/clojure.txt
Normal file
@@ -0,0 +1,185 @@
|
|||||||
|
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'clojure') == -1
|
||||||
|
|
||||||
|
*clojure.txt* Clojure runtime files
|
||||||
|
|
||||||
|
INTRODUCTION *clojure-introduction*
|
||||||
|
|
||||||
|
Meikel Brandmeyer's excellent Clojure runtime files. Includes syntax, indent,
|
||||||
|
ftdetect, and ftplugin scripts.
|
||||||
|
|
||||||
|
CLOJURE *ft-clojure-indent* *clojure-indent*
|
||||||
|
|
||||||
|
Clojure indentation differs somewhat from traditional Lisps, due in part to
|
||||||
|
the use of square and curly brackets, and otherwise by community convention.
|
||||||
|
These conventions are not universally followed, so the Clojure indent script
|
||||||
|
offers a few configurable options, listed below.
|
||||||
|
|
||||||
|
If the current vim does not include searchpairpos(), the indent script falls
|
||||||
|
back to normal 'lisp' indenting, and the following options are ignored.
|
||||||
|
|
||||||
|
*g:clojure_maxlines*
|
||||||
|
|
||||||
|
Set maximum scan distance of searchpairpos(). Larger values trade performance
|
||||||
|
for correctness when dealing with very long forms. A value of 0 will scan
|
||||||
|
without limits.
|
||||||
|
>
|
||||||
|
" Default
|
||||||
|
let g:clojure_maxlines = 100
|
||||||
|
<
|
||||||
|
*g:clojure_fuzzy_indent*
|
||||||
|
*g:clojure_fuzzy_indent_patterns*
|
||||||
|
*g:clojure_fuzzy_indent_blacklist*
|
||||||
|
|
||||||
|
The 'lispwords' option is a list of comma-separated words that mark special
|
||||||
|
forms whose subforms must be indented with two spaces.
|
||||||
|
|
||||||
|
For example:
|
||||||
|
>
|
||||||
|
(defn bad []
|
||||||
|
"Incorrect indentation")
|
||||||
|
|
||||||
|
(defn good []
|
||||||
|
"Correct indentation")
|
||||||
|
<
|
||||||
|
If you would like to specify 'lispwords' with a |pattern| instead, you can use
|
||||||
|
the fuzzy indent feature:
|
||||||
|
>
|
||||||
|
" Default
|
||||||
|
let g:clojure_fuzzy_indent = 1
|
||||||
|
let g:clojure_fuzzy_indent_patterns = ['^with', '^def', '^let']
|
||||||
|
let g:clojure_fuzzy_indent_blacklist =
|
||||||
|
\ ['-fn$', '\v^with-%(meta|out-str|loading-context)$']
|
||||||
|
|
||||||
|
" Legacy comma-delimited string version; the list format above is
|
||||||
|
" recommended. Note that patterns are implicitly anchored with ^ and $
|
||||||
|
let g:clojure_fuzzy_indent_patterns = 'with.*,def.*,let.*'
|
||||||
|
<
|
||||||
|
|g:clojure_fuzzy_indent_patterns| and |g:clojure_fuzzy_indent_blacklist| are
|
||||||
|
|Lists| of patterns that will be matched against the unquoted, unqualified
|
||||||
|
symbol at the head of a list. This means that a pattern like "^foo" will match
|
||||||
|
all these candidates: "foobar", "my.ns/foobar", and "#'foobar".
|
||||||
|
|
||||||
|
Each candidate word is tested for special treatment in this order:
|
||||||
|
|
||||||
|
1. Return true if word is literally in 'lispwords'
|
||||||
|
2. Return false if word matches a pattern in
|
||||||
|
|g:clojure_fuzzy_indent_blacklist|
|
||||||
|
3. Return true if word matches a pattern in
|
||||||
|
|g:clojure_fuzzy_indent_patterns|
|
||||||
|
4. Return false and indent normally otherwise
|
||||||
|
|
||||||
|
*g:clojure_special_indent_words*
|
||||||
|
|
||||||
|
Some forms in Clojure are indented so that every subform is indented only two
|
||||||
|
spaces, regardless of 'lispwords'. If you have a custom construct that should
|
||||||
|
be indented in this idiosyncratic fashion, you can add your symbols to the
|
||||||
|
default list below.
|
||||||
|
>
|
||||||
|
" Default
|
||||||
|
let g:clojure_special_indent_words =
|
||||||
|
\ 'deftype,defrecord,reify,proxy,extend-type,extend-protocol,letfn'
|
||||||
|
<
|
||||||
|
*g:clojure_align_multiline_strings*
|
||||||
|
|
||||||
|
Align subsequent lines in multiline strings to the column after the opening
|
||||||
|
quote, instead of the same column.
|
||||||
|
|
||||||
|
For example:
|
||||||
|
>
|
||||||
|
(def default
|
||||||
|
"Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do
|
||||||
|
eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut
|
||||||
|
enim ad minim veniam, quis nostrud exercitation ullamco laboris
|
||||||
|
nisi ut aliquip ex ea commodo consequat.")
|
||||||
|
|
||||||
|
(def aligned
|
||||||
|
"Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do
|
||||||
|
eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut
|
||||||
|
enim ad minim veniam, quis nostrud exercitation ullamco laboris
|
||||||
|
nisi ut aliquip ex ea commodo consequat.")
|
||||||
|
<
|
||||||
|
This option is off by default.
|
||||||
|
>
|
||||||
|
" Default
|
||||||
|
let g:clojure_align_multiline_strings = 0
|
||||||
|
<
|
||||||
|
*g:clojure_align_subforms*
|
||||||
|
|
||||||
|
By default, parenthesized compound forms that look like function calls and
|
||||||
|
whose head subform is on its own line have subsequent subforms indented by
|
||||||
|
two spaces relative to the opening paren:
|
||||||
|
>
|
||||||
|
(foo
|
||||||
|
bar
|
||||||
|
baz)
|
||||||
|
<
|
||||||
|
Setting this option changes this behavior so that all subforms are aligned to
|
||||||
|
the same column, emulating the default behavior of clojure-mode.el:
|
||||||
|
>
|
||||||
|
(foo
|
||||||
|
bar
|
||||||
|
baz)
|
||||||
|
<
|
||||||
|
This option is off by default.
|
||||||
|
>
|
||||||
|
" Default
|
||||||
|
let g:clojure_align_subforms = 0
|
||||||
|
<
|
||||||
|
|
||||||
|
CLOJURE *ft-clojure-syntax*
|
||||||
|
|
||||||
|
The default syntax groups can be augmented through the
|
||||||
|
*g:clojure_syntax_keywords* and *b:clojure_syntax_keywords* variables. The
|
||||||
|
value should be a |Dictionary| of syntax group names to a |List| of custom
|
||||||
|
identifiers:
|
||||||
|
>
|
||||||
|
let g:clojure_syntax_keywords = {
|
||||||
|
\ 'clojureMacro': ["defproject", "defcustom"],
|
||||||
|
\ 'clojureFunc': ["string/join", "string/replace"]
|
||||||
|
\ }
|
||||||
|
<
|
||||||
|
Refer to the Clojure syntax script for valid syntax group names.
|
||||||
|
|
||||||
|
If the |buffer-variable| *b:clojure_syntax_without_core_keywords* is set, only
|
||||||
|
language constants and special forms are matched.
|
||||||
|
|
||||||
|
Setting *g:clojure_fold* enables folding Clojure code via the syntax engine.
|
||||||
|
Any list, vector, or map that extends over more than one line can be folded
|
||||||
|
using the standard Vim |fold-commands|.
|
||||||
|
|
||||||
|
Please note that this option does not work with scripts that redefine the
|
||||||
|
bracket syntax regions, such as rainbow-parentheses plugins.
|
||||||
|
|
||||||
|
This option is off by default.
|
||||||
|
>
|
||||||
|
" Default
|
||||||
|
let g:clojure_fold = 0
|
||||||
|
<
|
||||||
|
|
||||||
|
ABOUT *clojure-about*
|
||||||
|
|
||||||
|
This document and associated runtime files are maintained at:
|
||||||
|
https://github.com/guns/vim-clojure-static
|
||||||
|
|
||||||
|
Distributed under the Vim license. See |license|.
|
||||||
|
|
||||||
|
syntax/clojure.vim
|
||||||
|
|
||||||
|
Copyright 2007-2008 (c) Toralf Wittner <toralf.wittner@gmail.com>
|
||||||
|
Copyright 2008-2012 (c) Meikel Brandmeyer <mb@kotka.de>
|
||||||
|
|
||||||
|
ftdetect/clojure.vim,
|
||||||
|
ftplugin/clojure.vim,
|
||||||
|
indent/clojure.vim
|
||||||
|
|
||||||
|
Copyright 2008-2012 (c) Meikel Brandmeyer <mb@kotka.de>
|
||||||
|
|
||||||
|
Modified and relicensed under the Vim License for distribution with Vim:
|
||||||
|
|
||||||
|
Copyright 2013-2014 (c) Sung Pae <self@sungpae.com>
|
||||||
|
|
||||||
|
Last Change: %%RELEASE_DATE%%
|
||||||
|
|
||||||
|
vim:tw=78:noet:sw=8:sts=8:ts=8:ft=help:norl:
|
||||||
|
|
||||||
|
endif
|
||||||
8
doc/coffee-script.txt
Normal file
8
doc/coffee-script.txt
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'coffee-script') == -1
|
||||||
|
|
||||||
|
Please see the project readme for up-to-date docs:
|
||||||
|
https://github.com/kchmck/vim-coffee-script
|
||||||
|
|
||||||
|
vim:tw=78:ts=8:ft=help:norl:
|
||||||
|
|
||||||
|
endif
|
||||||
108
doc/cryptol.txt
Normal file
108
doc/cryptol.txt
Normal file
@@ -0,0 +1,108 @@
|
|||||||
|
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'cryptol') == -1
|
||||||
|
|
||||||
|
*cryptol.txt* functionality for the Cryptol programming language
|
||||||
|
|
||||||
|
Copyright © 2013 Edward O'Callaghan. All Rights Reserved.
|
||||||
|
|
||||||
|
.oooooo. . oooo
|
||||||
|
d8P' `Y8b .o8 `888
|
||||||
|
888 oooo d8b oooo ooo oo.ooooo. .o888oo .ooooo. 888
|
||||||
|
888 `888""8P `88. .8' 888' `88b 888 d88' `88b 888
|
||||||
|
888 888 `88..8' 888 888 888 888 888 888
|
||||||
|
`88b ooo 888 `888' 888 888 888 . 888 888 888
|
||||||
|
`Y8bood8P' d888b .8' 888bod8P' "888" `Y8bod8P' o888o
|
||||||
|
.o..P' 888
|
||||||
|
`Y8P' o888o
|
||||||
|
|
||||||
|
Functionality for the Cryptol programming language.
|
||||||
|
Includes syntax highlighting, code folding, and more!
|
||||||
|
|
||||||
|
==============================================================================
|
||||||
|
CONTENTS *CryptolContents*
|
||||||
|
|
||||||
|
1. Usage ................ |CryptolUsage|
|
||||||
|
2. Mappings ............. |CryptolMappings|
|
||||||
|
3. License .............. |CryptolLicense|
|
||||||
|
4. Bugs ................. |CryptolBugs|
|
||||||
|
5. Contributing ......... |CryptolContributing|
|
||||||
|
6. Changelog ............ |CryptolChangelog|
|
||||||
|
7. Credits .............. |CryptolCredits|
|
||||||
|
|
||||||
|
==============================================================================
|
||||||
|
Section 1: Usage *CryptolUsage*
|
||||||
|
|
||||||
|
This plugin will automatically provide syntax highlighting for Cryptol files
|
||||||
|
(files ending in .cry).
|
||||||
|
|
||||||
|
Cryptol is a purely functional domain specific language, developed over the
|
||||||
|
past decade by Galois for the NSA, for the design, implementation and
|
||||||
|
verification of cryptographic algorithms.
|
||||||
|
|
||||||
|
==============================================================================
|
||||||
|
Section 2: Mappings *CryptolMappings*
|
||||||
|
|
||||||
|
Code folding is done in the typical way, for example:
|
||||||
|
* za - When on a closed fold - open it.
|
||||||
|
* zM - Close all foldings to level 0.
|
||||||
|
* zR - Reduce folding
|
||||||
|
|
||||||
|
For more information see, for example, :help za
|
||||||
|
|
||||||
|
==============================================================================
|
||||||
|
Section 3: License *CryptolLicense*
|
||||||
|
|
||||||
|
Copyright © 2013 Edward O'Callaghan. All Rights Reserved.
|
||||||
|
|
||||||
|
HOWEVER:
|
||||||
|
Be it known, The syntax file was written by
|
||||||
|
Copyright © 2005 Fergus Henderson. All Rights Reserved.
|
||||||
|
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
in the Software without restriction, including without limitation the rights
|
||||||
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
copies of the Software, and to permit persons to whom the Software is
|
||||||
|
furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in
|
||||||
|
all copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||||
|
THE SOFTWARE.
|
||||||
|
|
||||||
|
==============================================================================
|
||||||
|
Section 4: Bugs *CryptolBugs*
|
||||||
|
|
||||||
|
* https://github.com/victoredwardocallaghan/cryptol.vim/issues
|
||||||
|
|
||||||
|
==============================================================================
|
||||||
|
Section 5: TODOs *CryptolTODOs
|
||||||
|
|
||||||
|
* Add compiler support
|
||||||
|
- .
|
||||||
|
|
||||||
|
==============================================================================
|
||||||
|
Section 6: Contributing *CryptolContributing*
|
||||||
|
|
||||||
|
* Edward O'Callaghan
|
||||||
|
|
||||||
|
==============================================================================
|
||||||
|
Section 7: Changelog *CryptolChangelog*
|
||||||
|
|
||||||
|
* Initial 25 Apr 2013.
|
||||||
|
|
||||||
|
==============================================================================
|
||||||
|
Section 8: Credits *CryptolCredits*
|
||||||
|
|
||||||
|
* Edward O'Callaghan
|
||||||
|
* Fergus Henderson - wrote the orginal syntax file.
|
||||||
|
|
||||||
|
vim:ts=4:ft=help:tw=78:et
|
||||||
|
|
||||||
|
endif
|
||||||
90
doc/dart.txt
Normal file
90
doc/dart.txt
Normal file
@@ -0,0 +1,90 @@
|
|||||||
|
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'dart') == -1
|
||||||
|
|
||||||
|
*dart-vim-plugin* Dart support for Vim
|
||||||
|
|
||||||
|
INTRODUCTION *dart.vim*
|
||||||
|
|
||||||
|
dart-vim-plugin provides filetype detection, syntax highlighting, and
|
||||||
|
indentation for Dart code in Vim.
|
||||||
|
|
||||||
|
https://github.com/dart-lang/dart-vim-plugin
|
||||||
|
|
||||||
|
TOOLS *dart-tools*
|
||||||
|
|
||||||
|
An `includeexpr` is set that can read `.packages` files and resolve `package:`
|
||||||
|
uris to a file. See |gf| for an example use.
|
||||||
|
|
||||||
|
COMMANDS *dart-commands*
|
||||||
|
|
||||||
|
These commands are available in buffers with the dart filetype.
|
||||||
|
|
||||||
|
*:Dart2Js*
|
||||||
|
Runs dart2js to compile the current file. Takes the same arguments as the
|
||||||
|
dart2js binary and always passes the path to the current file as the last
|
||||||
|
argument.
|
||||||
|
If there are any errors they will be shown in the quickfix window.
|
||||||
|
|
||||||
|
*:DartFmt*
|
||||||
|
Runs dartfmt and passes the current buffer content through stdin. If the
|
||||||
|
format is successful replaces the current buffer content with the formatted
|
||||||
|
result. If the format is unsuccessful errors are shown in the quickfix window.
|
||||||
|
This command does not use the file content on disk so it is safe to run with
|
||||||
|
unwritten changes.
|
||||||
|
Passes arguments through to dartfmt.
|
||||||
|
|
||||||
|
*:DartAnalyzer*
|
||||||
|
Runs dartanalyzer to analyze the current file. Takes the same arguments as the
|
||||||
|
dartanalyzer binary and always passes the path to the current file as the last
|
||||||
|
argument.
|
||||||
|
If there are any errors they will be shown in the quickfix window.
|
||||||
|
|
||||||
|
CONFIGURATION *dart-configure*
|
||||||
|
|
||||||
|
*g:dart_html_in_string*
|
||||||
|
Set to `v:true` to highlights HTML syntax inside Strings within Dart files.
|
||||||
|
Default `v:false`
|
||||||
|
|
||||||
|
*g:dart_corelib_highlight*
|
||||||
|
Set to `v:false` to disable highlighting of code Dart classes like `Map` or
|
||||||
|
`List`.
|
||||||
|
Default `v:true`
|
||||||
|
*g:dart_style_guide*
|
||||||
|
Set to any value (set to `2` by convention) to set tab and width behavior to
|
||||||
|
match the Dart style guide - spaces only with an indent of 2. Also sets
|
||||||
|
`formatoptions += t` to auto wrap text.
|
||||||
|
|
||||||
|
Configure DartFmt options with `let g:dartfmt_options`, for example, enable
|
||||||
|
auto syntax fixes with `let g:dartfmt_options = ['--fix']`
|
||||||
|
(discover formatter options with `dartfmt -h`)
|
||||||
|
|
||||||
|
|
||||||
|
SYNTAX HIGHLIGHTING *dart-syntax*
|
||||||
|
|
||||||
|
This plugin uses narrow highlight groups to allow selectively disabling the
|
||||||
|
syntax highlights. Link any of the following groups to the `Normal` highlight
|
||||||
|
group to disable them:
|
||||||
|
|
||||||
|
`dartSdkException`: Capitalized exception or error classes defined in the SDK.
|
||||||
|
|
||||||
|
`dartCoreType`: `void`, `var`, `dynamic`
|
||||||
|
|
||||||
|
`dartSdkClass`: Capitalized classes defined in the SDK, along with `bool`,
|
||||||
|
`int`, `double`, and `num`.
|
||||||
|
|
||||||
|
`dartUserType`: Any capitalized identifier.
|
||||||
|
|
||||||
|
`dartType`: Combines `dartCoreType`, `dartSdkClass`, and `dartUserType`.
|
||||||
|
|
||||||
|
`dartSdkTypedef`: SDK defined `typdef`s.
|
||||||
|
|
||||||
|
`dartFunction`: Any lower cased identifier preceding an open parenthesis.
|
||||||
|
|
||||||
|
For example, to remove the highlighting for type and function names:
|
||||||
|
>
|
||||||
|
highlight link dartType Normal
|
||||||
|
highlight link dartFunction Normal
|
||||||
|
<
|
||||||
|
|
||||||
|
vim:tw=78:sw=4:ts=8:ft=help:norl:
|
||||||
|
|
||||||
|
endif
|
||||||
43
doc/dhall.txt
Normal file
43
doc/dhall.txt
Normal file
@@ -0,0 +1,43 @@
|
|||||||
|
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'dhall') == -1
|
||||||
|
|
||||||
|
*dhall* Dhall syntax highlighting for Vim
|
||||||
|
____
|
||||||
|
=====================================================================
|
||||||
|
CONTENTS *DhallContents*
|
||||||
|
|
||||||
|
1. Config ......................................... ❘DhallConfig❘
|
||||||
|
2. License ....................................... ❘DhallLicense❘
|
||||||
|
|
||||||
|
======================================================================
|
||||||
|
Section 1: Config *DhallConfig*
|
||||||
|
|
||||||
|
----------------------------------------------------------------------
|
||||||
|
*'g:dhall_use_ctags'*
|
||||||
|
Values: 0, 1
|
||||||
|
Default: ''
|
||||||
|
|
||||||
|
Generate tags file for vim on write, using universal ctags. >
|
||||||
|
let g:dhall_use_ctags=1
|
||||||
|
<
|
||||||
|
|
||||||
|
*'g:dhall_format'*
|
||||||
|
Values: 0, 1
|
||||||
|
Default: ''
|
||||||
|
|
||||||
|
Format Dhall files on write >
|
||||||
|
let g:dhall_format=1
|
||||||
|
<
|
||||||
|
*'g:dhall_strip_whitespace'*
|
||||||
|
Values: 0, 1
|
||||||
|
Default: ''
|
||||||
|
|
||||||
|
To enable whitespace stripping >
|
||||||
|
let g:dhall_strip_whitespace=1
|
||||||
|
<
|
||||||
|
|
||||||
|
======================================================================
|
||||||
|
Section 2: License *DhallLicense*
|
||||||
|
|
||||||
|
This plugin is licensed under the BDS3 license.
|
||||||
|
|
||||||
|
endif
|
||||||
116
doc/elixir.txt
Normal file
116
doc/elixir.txt
Normal file
@@ -0,0 +1,116 @@
|
|||||||
|
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'elixir') == -1
|
||||||
|
|
||||||
|
*elixir.txt* Vim configuration files for Elixir http://elixir-lang.org/
|
||||||
|
|
||||||
|
Author: Plataformatec
|
||||||
|
License: Apache License Version 2.0
|
||||||
|
|
||||||
|
==============================================================================
|
||||||
|
CONTENTS *elixir-contents*
|
||||||
|
|
||||||
|
INTRODUCTION |elixir-introduction|
|
||||||
|
INTERFACE |elixir-interface|
|
||||||
|
FUNCTIONS |elixir-functions|
|
||||||
|
KEY MAPPINGS |elixir-key-mappings|
|
||||||
|
OPTIONS |elixir-options|
|
||||||
|
SETTINGS |elixir-settings|
|
||||||
|
|
||||||
|
==============================================================================
|
||||||
|
INTRODUCTION *elixir-introduction*
|
||||||
|
|
||||||
|
*elixir* provides Vim configuration files for Elixir http://elixir-lang.org/
|
||||||
|
|
||||||
|
* Syntax highlighting for Elixir and EEx files
|
||||||
|
* Filetype detection for `.ex`, `.exs`, `.eex` and `.leex` files
|
||||||
|
* Automatic indentation
|
||||||
|
* Integration between Ecto projects and |vim-dadbod| for running SQL queries
|
||||||
|
on defined Ecto repositories
|
||||||
|
|
||||||
|
|
||||||
|
Latest Version:
|
||||||
|
https://github.com/elixir-editors/vim-elixir
|
||||||
|
|
||||||
|
|
||||||
|
==============================================================================
|
||||||
|
INTERFACE *elixir-interface*
|
||||||
|
|
||||||
|
------------------------------------------------------------------------------
|
||||||
|
FUNCTIONS *elixir-functions*
|
||||||
|
|
||||||
|
db#adapter#ecto#canonicalize({url}) *db#adapter#ecto#canonicalize()*
|
||||||
|
TODO
|
||||||
|
|
||||||
|
db#adapter#ecto#complete_opaque({url}) *db#adapter#ecto#complete_opaque()*
|
||||||
|
TODO
|
||||||
|
|
||||||
|
elixir#indent#indent({lnum}) *elixir#indent#indent()*
|
||||||
|
TODO
|
||||||
|
|
||||||
|
elixir#indent#searchpair_back_skip() *elixir#indent#searchpair_back_skip()*
|
||||||
|
TODO
|
||||||
|
|
||||||
|
*elixir#indent#handle_top_of_file()*
|
||||||
|
elixir#indent#handle_top_of_file({context})
|
||||||
|
TODO
|
||||||
|
|
||||||
|
*elixir#indent#handle_follow_prev_nb()*
|
||||||
|
elixir#indent#handle_follow_prev_nb({context})
|
||||||
|
TODO
|
||||||
|
|
||||||
|
*elixir#indent#handle_following_trailing_binary_operator()*
|
||||||
|
elixir#indent#handle_following_trailing_binary_operator({context})
|
||||||
|
TODO
|
||||||
|
|
||||||
|
*elixir#indent#handle_starts_with_pipe()*
|
||||||
|
elixir#indent#handle_starts_with_pipe({context})
|
||||||
|
TODO
|
||||||
|
|
||||||
|
*elixir#indent#handle_starts_with_end()*
|
||||||
|
elixir#indent#handle_starts_with_end({context})
|
||||||
|
TODO
|
||||||
|
|
||||||
|
*elixir#indent#handle_starts_with_binary_operator()*
|
||||||
|
elixir#indent#handle_starts_with_binary_operator({context})
|
||||||
|
TODO
|
||||||
|
|
||||||
|
*elixir#indent#handle_inside_block()*
|
||||||
|
elixir#indent#handle_inside_block({context})
|
||||||
|
TODO
|
||||||
|
|
||||||
|
*elixir#indent#handle_inside_generic_block()*
|
||||||
|
elixir#indent#handle_inside_generic_block({context})
|
||||||
|
TODO
|
||||||
|
|
||||||
|
elixir#util#get_filename({word}) *elixir#util#get_filename({word})*
|
||||||
|
TODO
|
||||||
|
|
||||||
|
|
||||||
|
------------------------------------------------------------------------------
|
||||||
|
KEY MAPPINGS *elixir-key-mappings*
|
||||||
|
|
||||||
|
TODO
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
==============================================================================
|
||||||
|
SETTINGS *elixir-settings*
|
||||||
|
|
||||||
|
*g:eelixir_default_subtype*
|
||||||
|
TODO
|
||||||
|
|
||||||
|
*g:elixir_indent_debug*
|
||||||
|
TODO
|
||||||
|
|
||||||
|
*g:elixir_indent_max_lookbehind*
|
||||||
|
TODO
|
||||||
|
|
||||||
|
*g:elixir_use_markdown_for_docs*
|
||||||
|
TODO
|
||||||
|
|
||||||
|
*g:path*
|
||||||
|
TODO
|
||||||
|
|
||||||
|
==============================================================================
|
||||||
|
vim:tw=78:fo=tcq2mM:ts=8:ft=help:norl
|
||||||
|
|
||||||
|
endif
|
||||||
1759
doc/ft-csv.txt
Normal file
1759
doc/ft-csv.txt
Normal file
File diff suppressed because it is too large
Load Diff
25
doc/ft-gitcommit-plugin.txt
Normal file
25
doc/ft-gitcommit-plugin.txt
Normal file
@@ -0,0 +1,25 @@
|
|||||||
|
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'git') == -1
|
||||||
|
|
||||||
|
GIT COMMIT *ft-gitcommit-plugin*
|
||||||
|
|
||||||
|
One command, :DiffGitCached, is provided to show a diff of the current commit
|
||||||
|
in the preview window. It is equivalent to calling "git diff --cached" plus
|
||||||
|
any arguments given to the command.
|
||||||
|
|
||||||
|
GIT REBASE *ft-gitrebase-plugin*
|
||||||
|
|
||||||
|
In a gitrebase filetype buffer, the following commands are provided:
|
||||||
|
|
||||||
|
`:Pick` Changes the cursor line to a `pick` line.
|
||||||
|
`:Squash` Changes the cursor line to a `squash` line
|
||||||
|
`:Edit` Changes the cursor line to an `edit` line
|
||||||
|
`:Reword` Changes the cursor line to a `reword` line
|
||||||
|
`:Fixup` Changes the cursor line to a `fixup` line
|
||||||
|
`:Drop` Changes the cursor line to a `drop` line
|
||||||
|
`:Cycle` Cycles between the first 5 gitrebase commands
|
||||||
|
|
||||||
|
To make the `:Cycle` command more useful, it might be mapped, e.g. >
|
||||||
|
nnoremap <buffer> <silent> S :Cycle<CR>
|
||||||
|
<
|
||||||
|
|
||||||
|
endif
|
||||||
152
doc/ft-ruby-indent.txt
Normal file
152
doc/ft-ruby-indent.txt
Normal file
@@ -0,0 +1,152 @@
|
|||||||
|
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'ruby') == -1
|
||||||
|
|
||||||
|
RUBY *ft-ruby-indent*
|
||||||
|
*vim-ruby-indent*
|
||||||
|
|
||||||
|
Ruby: Access modifier indentation |ruby-access-modifier-indentation|
|
||||||
|
Ruby: Block style indentation |ruby-block-style-indentation|
|
||||||
|
Ruby: Assignment style indentation |ruby-assignment-style-indentation|
|
||||||
|
Ruby: Hanging element indentation |ruby-hanging-element-indentation|
|
||||||
|
|
||||||
|
*ruby-access-modifier-indentation*
|
||||||
|
*g:ruby_indent_access_modifier_style*
|
||||||
|
Ruby: Access modifier indentation ~
|
||||||
|
|
||||||
|
Different access modifier indentation styles can be used by setting: >
|
||||||
|
|
||||||
|
:let g:ruby_indent_access_modifier_style = 'normal'
|
||||||
|
:let g:ruby_indent_access_modifier_style = 'indent'
|
||||||
|
:let g:ruby_indent_access_modifier_style = 'outdent'
|
||||||
|
<
|
||||||
|
By default, the "normal" access modifier style is used.
|
||||||
|
|
||||||
|
Access modifier style "normal":
|
||||||
|
>
|
||||||
|
class Indent
|
||||||
|
private :method
|
||||||
|
protected :method
|
||||||
|
private
|
||||||
|
def method; end
|
||||||
|
protected
|
||||||
|
def method; end
|
||||||
|
public
|
||||||
|
def method; end
|
||||||
|
end
|
||||||
|
<
|
||||||
|
Access modifier style "indent":
|
||||||
|
>
|
||||||
|
class Indent
|
||||||
|
private :method
|
||||||
|
protected :method
|
||||||
|
private
|
||||||
|
def method; end
|
||||||
|
protected
|
||||||
|
def method; end
|
||||||
|
public
|
||||||
|
def method; end
|
||||||
|
end
|
||||||
|
<
|
||||||
|
Access modifier style "outdent":
|
||||||
|
>
|
||||||
|
class Indent
|
||||||
|
private :method
|
||||||
|
protected :method
|
||||||
|
private
|
||||||
|
def method; end
|
||||||
|
protected
|
||||||
|
def method; end
|
||||||
|
public
|
||||||
|
def method; end
|
||||||
|
end
|
||||||
|
<
|
||||||
|
*ruby-block-style-indentation*
|
||||||
|
*g:ruby_indent_block_style*
|
||||||
|
Ruby: Block style indentation ~
|
||||||
|
|
||||||
|
Different block indentation styles can be used by setting: >
|
||||||
|
|
||||||
|
:let g:ruby_indent_block_style = 'expression'
|
||||||
|
:let g:ruby_indent_block_style = 'do'
|
||||||
|
<
|
||||||
|
By default, the "do" block indent style is used.
|
||||||
|
|
||||||
|
Block indent style "expression":
|
||||||
|
>
|
||||||
|
first
|
||||||
|
.second do |x|
|
||||||
|
something
|
||||||
|
end
|
||||||
|
<
|
||||||
|
Block indent style "do":
|
||||||
|
>
|
||||||
|
first
|
||||||
|
.second do |x|
|
||||||
|
something
|
||||||
|
end
|
||||||
|
<
|
||||||
|
|
||||||
|
*ruby-assignment-style-indentation*
|
||||||
|
*g:ruby_indent_assignment_style*
|
||||||
|
Ruby: Assignment style indentation ~
|
||||||
|
|
||||||
|
Different styles of indenting assignment for multiline expressions:
|
||||||
|
>
|
||||||
|
:let g:ruby_indent_assignment_style = 'hanging'
|
||||||
|
:let g:ruby_indent_assignment_style = 'variable'
|
||||||
|
<
|
||||||
|
By default, the "hanging" style is used.
|
||||||
|
|
||||||
|
Assignment indent style "hanging":
|
||||||
|
>
|
||||||
|
x = if condition
|
||||||
|
something
|
||||||
|
end
|
||||||
|
<
|
||||||
|
Assignment indent style "variable":
|
||||||
|
>
|
||||||
|
x = if condition
|
||||||
|
something
|
||||||
|
end
|
||||||
|
<
|
||||||
|
|
||||||
|
*ruby-hanging-element-indentation*
|
||||||
|
*g:ruby_indent_hanging_elements*
|
||||||
|
Ruby: Hanging element indentation ~
|
||||||
|
|
||||||
|
Elements of multiline collections -- such as arrays, hashes, and method
|
||||||
|
argument lists -- can have hanging indentation enabled or disabled with the
|
||||||
|
following setting.
|
||||||
|
>
|
||||||
|
:let g:ruby_indent_hanging_elements = 1
|
||||||
|
:let g:ruby_indent_hanging_elements = 0
|
||||||
|
<
|
||||||
|
By default, this setting is "1" (true) meaning that hanging indentation is
|
||||||
|
enabled in some cases.
|
||||||
|
|
||||||
|
Here is an example method call when the setting is true (non-zero):
|
||||||
|
>
|
||||||
|
render('product/show',
|
||||||
|
product: product,
|
||||||
|
on_sale: true,
|
||||||
|
)
|
||||||
|
<
|
||||||
|
And the same method call when the setting is false (zero):
|
||||||
|
>
|
||||||
|
render('product/show',
|
||||||
|
product: product,
|
||||||
|
on_sale: true,
|
||||||
|
)
|
||||||
|
<
|
||||||
|
Note that, even if the setting is turned on, you can still get non-hanging
|
||||||
|
indentation by putting each argument on a separate line:
|
||||||
|
>
|
||||||
|
render(
|
||||||
|
'product/show',
|
||||||
|
product: product,
|
||||||
|
on_sale: true,
|
||||||
|
)
|
||||||
|
<
|
||||||
|
|
||||||
|
vim:tw=78:sw=4:ts=8:ft=help:norl:
|
||||||
|
|
||||||
|
endif
|
||||||
56
doc/ft-ruby-omni.txt
Normal file
56
doc/ft-ruby-omni.txt
Normal file
@@ -0,0 +1,56 @@
|
|||||||
|
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'ruby') == -1
|
||||||
|
|
||||||
|
RUBY *ft-ruby-omni*
|
||||||
|
*vim-ruby-omni*
|
||||||
|
|
||||||
|
Completion of Ruby code requires that Vim be built with |+ruby|.
|
||||||
|
|
||||||
|
Ruby completion will parse your buffer on demand in order to provide a list of
|
||||||
|
completions. These completions will be drawn from modules loaded by "require"
|
||||||
|
and modules defined in the current buffer.
|
||||||
|
|
||||||
|
The completions provided by CTRL-X CTRL-O are sensitive to the context:
|
||||||
|
|
||||||
|
CONTEXT COMPLETIONS PROVIDED ~
|
||||||
|
|
||||||
|
1. Not inside a class definition Classes, constants and globals
|
||||||
|
|
||||||
|
2. Inside a class definition Methods or constants defined in the class
|
||||||
|
|
||||||
|
3. After '.', '::' or ':' Methods applicable to the object being
|
||||||
|
dereferenced
|
||||||
|
|
||||||
|
4. After ':' or ':foo' Symbol name (beginning with "foo")
|
||||||
|
|
||||||
|
Notes:
|
||||||
|
- Vim will load/evaluate code in order to provide completions. This may
|
||||||
|
cause some code execution, which may be a concern. This is no longer
|
||||||
|
enabled by default, to enable this feature add >
|
||||||
|
let g:rubycomplete_buffer_loading = 1
|
||||||
|
< - In context 1 above, Vim can parse the entire buffer to add a list of
|
||||||
|
classes to the completion results. This feature is turned off by default,
|
||||||
|
to enable it add >
|
||||||
|
let g:rubycomplete_classes_in_global = 1
|
||||||
|
< to your vimrc
|
||||||
|
- In context 2 above, anonymous classes are not supported.
|
||||||
|
- In context 3 above, Vim will attempt to determine the methods supported by
|
||||||
|
the object.
|
||||||
|
- Vim can detect and load the Rails environment for files within a rails
|
||||||
|
project. The feature is disabled by default, to enable it add >
|
||||||
|
let g:rubycomplete_rails = 1
|
||||||
|
< to your vimrc
|
||||||
|
- Vim can parse a Gemfile, in case gems are being implicitly required. To
|
||||||
|
activate the feature: >
|
||||||
|
let g:rubycomplete_load_gemfile = 1
|
||||||
|
< To specify an alternative path, use: >
|
||||||
|
let g:rubycomplete_gemfile_path = 'Gemfile.aux'
|
||||||
|
< To use Bundler.require instead of parsing the Gemfile, set: >
|
||||||
|
let g:rubycomplete_use_bundler = 1
|
||||||
|
< To use custom paths that should be added to $LOAD_PATH to correctly
|
||||||
|
resolve requires, set: >
|
||||||
|
let g:rubycomplete_load_paths = ["/path/to/code", "./lib/example"]
|
||||||
|
|
||||||
|
|
||||||
|
vim:tw=78:sw=4:ts=8:ft=help:norl:
|
||||||
|
|
||||||
|
endif
|
||||||
85
doc/ft-ruby-plugin.txt
Normal file
85
doc/ft-ruby-plugin.txt
Normal file
@@ -0,0 +1,85 @@
|
|||||||
|
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'ruby') == -1
|
||||||
|
|
||||||
|
RUBY *ft-ruby-plugin*
|
||||||
|
*vim-ruby-plugin*
|
||||||
|
|
||||||
|
|
||||||
|
Ruby: Recommended settings |ruby-recommended|
|
||||||
|
Ruby: Motion commands |ruby-motion|
|
||||||
|
Ruby: Text objects |ruby-text-objects|
|
||||||
|
|
||||||
|
*ruby-recommended*
|
||||||
|
*g:ruby_recommended_style*
|
||||||
|
Ruby: Recommended settings ~
|
||||||
|
|
||||||
|
The `g:ruby_recommended_style` variable activates indentation settings
|
||||||
|
according to the most common ruby convention: two spaces for indentation. It's
|
||||||
|
turned on by default to ensure an unsurprising default experience for most
|
||||||
|
ruby developers.
|
||||||
|
|
||||||
|
If you'd like to enforce your own style, it's possible to apply your own
|
||||||
|
preferences in your own configuration in `after/ftplugin/ruby.vim`. You can
|
||||||
|
also disable the setting by setting the variable to 0:
|
||||||
|
>
|
||||||
|
let g:ruby_recommended_style = 0
|
||||||
|
<
|
||||||
|
|
||||||
|
*ruby-motion*
|
||||||
|
Ruby: Motion commands ~
|
||||||
|
|
||||||
|
Vim provides motions such as |[m| and |]m| for jumping to the start or end of
|
||||||
|
a method definition. Out of the box, these work for curly-bracket languages,
|
||||||
|
but not for Ruby. The vim-ruby plugin enhances these motions, by making them
|
||||||
|
also work on Ruby files.
|
||||||
|
|
||||||
|
*ruby-]m*
|
||||||
|
]m Go to start of next method definition.
|
||||||
|
|
||||||
|
*ruby-]M*
|
||||||
|
]M Go to end of next method definition.
|
||||||
|
|
||||||
|
*ruby-[m*
|
||||||
|
[m Go to start of previous method definition.
|
||||||
|
|
||||||
|
*ruby-[M*
|
||||||
|
[M Go to end of previous method definition.
|
||||||
|
|
||||||
|
*ruby-]]*
|
||||||
|
]] Go to start of next module or class definition.
|
||||||
|
|
||||||
|
*ruby-][*
|
||||||
|
][ Go to end of next module or class definition.
|
||||||
|
|
||||||
|
*ruby-[[*
|
||||||
|
[[ Go to start of previous module or class definition.
|
||||||
|
|
||||||
|
*ruby-[]*
|
||||||
|
[] Go to end of previous module or class definition.
|
||||||
|
|
||||||
|
*ruby-text-objects*
|
||||||
|
Ruby: Text objects ~
|
||||||
|
|
||||||
|
Vim's |text-objects| can be used to select or operate upon regions of text
|
||||||
|
that are defined by structure. The vim-ruby plugin adds text objects for
|
||||||
|
operating on methods and classes.
|
||||||
|
|
||||||
|
*ruby-v_am* *ruby-am*
|
||||||
|
am "a method", select from "def" until matching "end"
|
||||||
|
keyword.
|
||||||
|
|
||||||
|
*ruby-v_im* *ruby-im*
|
||||||
|
im "inner method", select contents of "def"/"end" block,
|
||||||
|
excluding the "def" and "end" themselves.
|
||||||
|
|
||||||
|
*ruby-v_aM* *ruby-aM*
|
||||||
|
aM "a class", select from "class" until matching "end"
|
||||||
|
keyword.
|
||||||
|
|
||||||
|
*ruby-v_iM* *ruby-iM*
|
||||||
|
iM "inner class", select contents of "class"/"end"
|
||||||
|
block, excluding the "class" and "end" themselves.
|
||||||
|
|
||||||
|
|
||||||
|
vim:tw=78:sw=4:ts=8:ft=help:norl:
|
||||||
|
|
||||||
|
endif
|
||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user