mirror of
https://github.com/sheerun/vim-polyglot.git
synced 2025-11-08 11:33:52 -05:00
Compare commits
120 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
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 | ||
|
|
31c55b85a0 | ||
|
|
199846c6d8 | ||
|
|
f95026252c |
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
|
||||
!*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
|
||||
7
Makefile
Normal file
7
Makefile
Normal file
@@ -0,0 +1,7 @@
|
||||
.PHONY: all
|
||||
|
||||
all:
|
||||
@ scripts/build
|
||||
|
||||
test:
|
||||
@ scripts/test
|
||||
143
README.md
143
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.
|
||||
|
||||
> 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 **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-->155<!--/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.
|
||||
- All unnecessary files are ignored (like enormous documentation from php support).
|
||||
- No support for esoteric languages, only most popular ones (modern too, like `slim`).
|
||||
- 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
|
||||
|
||||
@@ -38,7 +36,7 @@ mkdir -p ~/.vim/pack/default/start
|
||||
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.
|
||||
|
||||
@@ -47,180 +45,185 @@ If you need full functionality of any plugin, please use it directly with your p
|
||||
<!--Language Packs-->
|
||||
- [acpiasl](https://github.com/martinlroth/vim-acpi-asl) (syntax)
|
||||
- [ansible](https://github.com/pearofducks/ansible-vim) (syntax, indent, ftplugin)
|
||||
- [apiblueprint](https://github.com/sheerun/apiblueprint.vim) (syntax)
|
||||
- [apiblueprint](https://github.com/sheerun/apiblueprint.vim) (syntax, ctags)
|
||||
- [applescript](https://github.com/mityu/vim-applescript) (syntax, indent)
|
||||
- [arduino](https://github.com/sudar/vim-arduino-syntax) (syntax, indent)
|
||||
- [asciidoc](https://github.com/asciidoc/vim-asciidoc) (syntax)
|
||||
- [autohotkey](https://github.com/hnamikaw/vim-autohotkey) (indent)
|
||||
- [blade](https://github.com/jwalton512/vim-blade) (syntax, indent, ftplugin)
|
||||
- [brewfile](https://github.com/bfontaine/Brewfile.vim) (syntax)
|
||||
- [c++11](https://github.com/octol/vim-cpp-enhanced-highlight) (syntax)
|
||||
- [c/c++](https://github.com/vim-jp/vim-cpp) (syntax)
|
||||
- [caddyfile](https://github.com/isobit/vim-caddyfile) (syntax, indent, ftplugin)
|
||||
- [carp](https://github.com/hellerve/carp-vim) (syntax)
|
||||
- [cjsx](https://github.com/mtscout6/vim-cjsx) (syntax, ftplugin)
|
||||
- [clojure](https://github.com/guns/vim-clojure-static) (syntax, indent, autoload, ftplugin)
|
||||
- [clojure](https://github.com/guns/vim-clojure-static) (syntax, indent, doc, autoload, ftplugin)
|
||||
- [cmake](https://github.com/pboettch/vim-cmake-syntax) (syntax, indent)
|
||||
- [coffee-script](https://github.com/kchmck/vim-coffee-script) (syntax, compiler, indent, autoload, ftplugin)
|
||||
- [coffee-script](https://github.com/kchmck/vim-coffee-script) (syntax, indent, doc, compiler, autoload, ftplugin)
|
||||
- [cql](https://github.com/elubow/cql-vim) (syntax)
|
||||
- [cryptol](https://github.com/victoredwardocallaghan/cryptol.vim) (syntax, compiler, ftplugin)
|
||||
- [cryptol](https://github.com/victoredwardocallaghan/cryptol.vim) (syntax, doc, compiler, ftplugin)
|
||||
- [crystal](https://github.com/rhysd/vim-crystal) (syntax, indent, autoload, ftplugin)
|
||||
- [csv](https://github.com/chrisbra/csv.vim) (syntax, autoload, ftplugin)
|
||||
- [csv](https://github.com/chrisbra/csv.vim) (syntax, doc, autoload, ftplugin)
|
||||
- [cucumber](https://github.com/tpope/vim-cucumber) (syntax, indent, compiler, ftplugin)
|
||||
- [cue](https://github.com/mgrabovsky/vim-cuesheet) (syntax)
|
||||
- [dart](https://github.com/dart-lang/dart-vim-plugin) (syntax, indent, autoload, ftplugin)
|
||||
- [dhall](https://github.com/vmchale/dhall-vim) (syntax, ftplugin)
|
||||
- [dart](https://github.com/dart-lang/dart-vim-plugin) (syntax, indent, doc, autoload, ftplugin)
|
||||
- [dhall](https://github.com/vmchale/dhall-vim) (syntax, doc, ftplugin)
|
||||
- [dlang](https://github.com/JesseKPhillips/d.vim) (syntax, indent)
|
||||
- [dockerfile](https://github.com/ekalinin/Dockerfile.vim) (syntax, indent, ftplugin)
|
||||
- [elixir](https://github.com/elixir-lang/vim-elixir) (syntax, indent, compiler, autoload, ftplugin)
|
||||
- [elm](https://github.com/ElmCast/elm-vim) (syntax, indent, autoload, ftplugin)
|
||||
- [elixir](https://github.com/elixir-lang/vim-elixir) (syntax, indent, doc, compiler, autoload, ftplugin)
|
||||
- [elm](https://github.com/andys8/vim-elm-syntax) (syntax, indent)
|
||||
- [emberscript](https://github.com/yalesov/vim-ember-script) (syntax, indent, ftplugin)
|
||||
- [emblem](https://github.com/yalesov/vim-emblem) (syntax, indent, ftplugin)
|
||||
- [erlang](https://github.com/vim-erlang/vim-erlang-runtime) (syntax, indent)
|
||||
- [fennel](https://github.com/bakpakin/fennel.vim) (syntax, indent, ftplugin)
|
||||
- [ferm](https://github.com/vim-scripts/ferm.vim) (syntax)
|
||||
- [fish](https://github.com/georgewitteman/vim-fish) (syntax, indent, compiler, autoload, ftplugin)
|
||||
- [flatbuffers](https://github.com/dcharbon/vim-flatbuffers) (syntax)
|
||||
- [fsharp](https://github.com/fsharp/vim-fsharp) (syntax, indent)
|
||||
- [git](https://github.com/tpope/vim-git) (syntax, indent, ftplugin)
|
||||
- [fsharp](https://github.com/ionide/Ionide-vim) (syntax, indent, doc, autoload)
|
||||
- [gdscript](https://github.com/calviken/vim-gdscript3) (syntax, indent)
|
||||
- [git](https://github.com/tpope/vim-git) (syntax, indent, doc, ftplugin)
|
||||
- [glsl](https://github.com/tikhomirov/vim-glsl) (syntax, indent)
|
||||
- [gmpl](https://github.com/maelvalais/gmpl.vim) (syntax)
|
||||
- [gnuplot](https://github.com/vim-scripts/gnuplot-syntax-highlighting) (syntax)
|
||||
- [go](https://github.com/fatih/vim-go) (syntax, compiler, indent)
|
||||
- [go](https://github.com/fatih/vim-go) (syntax, indent, doc, compiler)
|
||||
- [gradle](https://github.com/tfnico/vim-gradle) (compiler)
|
||||
- [graphql](https://github.com/jparise/vim-graphql) (syntax, indent, autoload, ftplugin, after)
|
||||
- [groovy-indent](https://github.com/vim-scripts/groovyindent-unix) (indent)
|
||||
- [groovy](https://github.com/vim-scripts/groovy.vim) (syntax)
|
||||
- [graphql](https://github.com/jparise/vim-graphql) (syntax, indent, autoload, ftplugin, after, doc)
|
||||
- [haml](https://github.com/sheerun/vim-haml) (syntax, indent, compiler, ftplugin)
|
||||
- [handlebars](https://github.com/mustache/vim-mustache-handlebars) (syntax, indent, ftplugin)
|
||||
- [handlebars](https://github.com/sheerun/vim-mustache-handlebars) (syntax, indent, ftplugin)
|
||||
- [haproxy](https://github.com/CH-DanReif/haproxy.vim) (syntax)
|
||||
- [haskell](https://github.com/neovimhaskell/haskell-vim) (syntax, indent, ftplugin)
|
||||
- [haskell](https://github.com/neovimhaskell/haskell-vim) (syntax, indent, doc, ftplugin)
|
||||
- [haxe](https://github.com/yaymukund/vim-haxe) (syntax)
|
||||
- [hcl](https://github.com/b4b4r07/vim-hcl) (syntax, indent, ftplugin)
|
||||
- [helm](https://github.com/towolf/vim-helm) (syntax)
|
||||
- [hive](https://github.com/zebradil/hive.vim) (syntax, ftplugin)
|
||||
- [html5](https://github.com/othree/html5.vim) (syntax, indent, autoload, ftplugin)
|
||||
- [i3](https://github.com/mboughaba/i3config.vim) (syntax, ftplugin)
|
||||
- [idris](https://github.com/idris-hackers/idris-vim) (syntax, indent, ftplugin)
|
||||
- [icalendar](https://github.com/chutzpah/icalendar.vim) (syntax)
|
||||
- [idris](https://github.com/idris-hackers/idris-vim) (syntax, indent, doc, ftplugin)
|
||||
- [ion](https://github.com/vmchale/ion-vim) (syntax, ftplugin)
|
||||
- [jasmine](https://github.com/glanotte/vim-jasmine) (syntax)
|
||||
- [javascript](https://github.com/pangloss/vim-javascript) (syntax, indent, compiler, ftplugin, extras)
|
||||
- [javascript](https://github.com/pangloss/vim-javascript) (syntax, indent, ftplugin, extras)
|
||||
- [jenkins](https://github.com/martinda/Jenkinsfile-vim-syntax) (syntax, indent)
|
||||
- [jinja](https://github.com/lepture/vim-jinja) (syntax, indent)
|
||||
- [jq](https://github.com/vito-c/jq.vim) (syntax, ftplugin)
|
||||
- [json5](https://github.com/GutenYe/json5.vim) (syntax)
|
||||
- [json](https://github.com/elzr/vim-json) (syntax, indent, ftplugin)
|
||||
- [jsonnet](https://github.com/google/vim-jsonnet) (syntax, doc, autoload, ftplugin)
|
||||
- [jst](https://github.com/briancollins/vim-jst) (syntax, indent)
|
||||
- [jsx](https://github.com/MaxMEllon/vim-jsx-pretty) (autoload, after)
|
||||
- [julia](https://github.com/JuliaEditorSupport/julia-vim) (syntax, indent, autoload, ftplugin)
|
||||
- [jsx](https://github.com/MaxMEllon/vim-jsx-pretty) (autoload, after, doc)
|
||||
- [julia](https://github.com/JuliaEditorSupport/julia-vim) (syntax, indent, doc, autoload, ftplugin)
|
||||
- [kotlin](https://github.com/udalov/kotlin-vim) (syntax, indent, ftplugin)
|
||||
- [latex](https://github.com/LaTeX-Box-Team/LaTeX-Box) (syntax, indent, ftplugin)
|
||||
- [ledger](https://github.com/ledger/vim-ledger) (syntax, indent, doc, compiler, autoload)
|
||||
- [less](https://github.com/groenewege/vim-less) (syntax, indent, ftplugin)
|
||||
- [lilypond](https://github.com/anowlcalledjosh/vim-lilypond) (syntax, indent, compiler, ftplugin)
|
||||
- [livescript](https://github.com/gkz/vim-ls) (syntax, indent, compiler, ftplugin)
|
||||
- [llvm](https://github.com/rhysd/vim-llvm) (syntax, indent, ftplugin)
|
||||
- [log](https://github.com/MTDL9/vim-log-highlighting) (syntax)
|
||||
- [log](https://github.com/MTDL9/vim-log-highlighting) (syntax, doc)
|
||||
- [lua](https://github.com/tbastos/vim-lua) (syntax, indent)
|
||||
- [mako](https://github.com/sophacles/vim-bundle-mako) (syntax, indent, ftplugin)
|
||||
- [markdown](https://github.com/plasticboy/vim-markdown) (syntax, indent)
|
||||
- [markdown](https://github.com/plasticboy/vim-markdown) (syntax, indent, doc, ftplugin)
|
||||
- [mathematica](https://github.com/voldikss/vim-mma) (syntax, ftplugin)
|
||||
- [mdx](https://github.com/jxnblk/vim-mdx-js) (syntax)
|
||||
- [meson](https://github.com/mesonbuild/meson) (syntax, indent, ftplugin)
|
||||
- [moonscript](https://github.com/leafo/moonscript-vim) (syntax, indent, ftplugin)
|
||||
- [nginx](https://github.com/chr4/nginx.vim) (syntax, indent, ftplugin)
|
||||
- [nim](https://github.com/zah/nim.vim) (syntax, compiler, indent)
|
||||
- [nim](https://github.com/zah/nim.vim) (syntax, indent, compiler, autoload)
|
||||
- [nix](https://github.com/LnL7/vim-nix) (syntax, indent, compiler, ftplugin)
|
||||
- [objc](https://github.com/b4winckler/vim-objc) (ftplugin, syntax, indent)
|
||||
- [ocaml](https://github.com/rgrinberg/vim-ocaml) (syntax, indent, compiler, ftplugin)
|
||||
- [octave](https://github.com/vim-scripts/octave.vim--) (syntax)
|
||||
- [ocaml](https://github.com/rgrinberg/vim-ocaml) (syntax, indent, doc, compiler, ftplugin)
|
||||
- [octave](https://github.com/McSinyx/vim-octave) (syntax, indent)
|
||||
- [opencl](https://github.com/petRUShka/vim-opencl) (syntax, indent, ftplugin)
|
||||
- [perl](https://github.com/vim-perl/vim-perl) (syntax, indent, ftplugin)
|
||||
- [pgsql](https://github.com/lifepillar/pgsql.vim) (syntax, indent)
|
||||
- [pgsql](https://github.com/lifepillar/pgsql.vim) (syntax, indent, doc)
|
||||
- [php](https://github.com/StanAngeloff/php.vim) (syntax)
|
||||
- [plantuml](https://github.com/aklt/plantuml-syntax) (syntax, indent, ftplugin)
|
||||
- [pony](https://github.com/jakwings/vim-pony) (syntax, indent, autoload, ftplugin)
|
||||
- [powershell](https://github.com/PProvost/vim-ps1) (syntax, indent, ftplugin)
|
||||
- [powershell](https://github.com/PProvost/vim-ps1) (syntax, indent, doc, compiler, ftplugin)
|
||||
- [protobuf](https://github.com/uarun/vim-protobuf) (syntax, indent)
|
||||
- [pug](https://github.com/digitaltoad/vim-pug) (syntax, indent, ftplugin)
|
||||
- [puppet](https://github.com/rodjek/vim-puppet) (syntax, indent, autoload, ftplugin)
|
||||
- [puppet](https://github.com/rodjek/vim-puppet) (syntax, indent, autoload, ftplugin, ctags)
|
||||
- [purescript](https://github.com/purescript-contrib/purescript-vim) (syntax, indent, ftplugin)
|
||||
- [python-compiler](https://github.com/aliev/vim-compiler-python) (compiler, autoload)
|
||||
- [python-indent](https://github.com/Vimjas/vim-python-pep8-indent) (indent)
|
||||
- [python](https://github.com/vim-python/python-syntax) (syntax)
|
||||
- [python](https://github.com/vim-python/python-syntax) (syntax, doc)
|
||||
- [qmake](https://github.com/artoj/qmake-syntax-vim) (syntax)
|
||||
- [qml](https://github.com/peterhoeg/vim-qml) (syntax, indent, ftplugin)
|
||||
- [r-lang](https://github.com/vim-scripts/R.vim) (syntax)
|
||||
- [racket](https://github.com/wlangstroth/vim-racket) (syntax, indent, ftplugin)
|
||||
- [ragel](https://github.com/jneen/ragel.vim) (syntax)
|
||||
- [raml](https://github.com/IN3D/vim-raml) (syntax, ftplugin)
|
||||
- [reason](https://github.com/reasonml-editor/vim-reason-plus) (syntax, indent)
|
||||
- [rspec](https://github.com/sheerun/rspec.vim) (syntax)
|
||||
- [rst](https://github.com/marshallward/vim-restructuredtext) (syntax, autoload, ftplugin)
|
||||
- [ruby](https://github.com/vim-ruby/vim-ruby) (syntax, indent, compiler, autoload, ftplugin)
|
||||
- [rust](https://github.com/rust-lang/rust.vim) (syntax, indent, compiler, autoload, ftplugin)
|
||||
- [raku](https://github.com/Raku/vim-raku) (syntax, indent, ftplugin)
|
||||
- [raml](https://github.com/IN3D/vim-raml) (syntax, doc, ftplugin)
|
||||
- [razor](https://github.com/adamclerk/vim-razor) (syntax, indent, ftplugin)
|
||||
- [reason](https://github.com/reasonml-editor/vim-reason-plus) (syntax, indent, doc)
|
||||
- [requirements](https://github.com/raimon49/requirements.txt.vim) (syntax, autoload)
|
||||
- [rspec](https://github.com/keith/rspec.vim) (syntax)
|
||||
- [rst](https://github.com/marshallward/vim-restructuredtext) (syntax, indent, autoload, ftplugin)
|
||||
- [ruby](https://github.com/vim-ruby/vim-ruby) (syntax, indent, doc, compiler, autoload, ftplugin)
|
||||
- [rust](https://github.com/rust-lang/rust.vim) (syntax, indent, doc, compiler, autoload, ftplugin, ctags)
|
||||
- [sbt](https://github.com/derekwyatt/vim-sbt) (syntax)
|
||||
- [scala](https://github.com/derekwyatt/vim-scala) (syntax, indent, compiler, ftplugin)
|
||||
- [scala](https://github.com/derekwyatt/vim-scala) (syntax, indent, doc, compiler, ftplugin, ctags)
|
||||
- [scss](https://github.com/cakebaker/scss-syntax.vim) (syntax, indent, ftplugin)
|
||||
- [sh](https://github.com/arzg/vim-sh) (syntax)
|
||||
- [slim](https://github.com/slim-template/vim-slim) (syntax, indent, ftplugin)
|
||||
- [slime](https://github.com/slime-lang/vim-slime-syntax) (syntax, indent)
|
||||
- [smt2](https://github.com/bohlender/vim-smt2) (syntax, autoload, ftplugin)
|
||||
- [solidity](https://github.com/tomlion/vim-solidity) (syntax, indent, ftplugin)
|
||||
- [sql](https://github.com/shmup/vim-sql-syntax) (syntax)
|
||||
- [stylus](https://github.com/wavded/vim-stylus) (syntax, indent, ftplugin)
|
||||
- [svelte](https://github.com/evanleck/vim-svelte) (syntax, indent)
|
||||
- [svelte](https://github.com/evanleck/vim-svelte) (syntax, indent, ftplugin)
|
||||
- [svg-indent](https://github.com/jasonshell/vim-svg-indent) (indent)
|
||||
- [svg](https://github.com/vim-scripts/svg.vim) (syntax)
|
||||
- [swift](https://github.com/keith/swift.vim) (syntax, indent, ftplugin)
|
||||
- [swift](https://github.com/keith/swift.vim) (syntax, indent, compiler, ftplugin, ctags)
|
||||
- [sxhkd](https://github.com/baskerville/vim-sxhkdrc) (syntax)
|
||||
- [systemd](https://github.com/wgwoods/vim-systemd-syntax) (syntax)
|
||||
- [terraform](https://github.com/hashivim/vim-terraform) (syntax, indent, autoload, ftplugin)
|
||||
- [textile](https://github.com/timcharper/textile.vim) (syntax, ftplugin)
|
||||
- [systemd](https://github.com/wgwoods/vim-systemd-syntax) (syntax, ftplugin)
|
||||
- [terraform](https://github.com/hashivim/vim-terraform) (syntax, indent, doc, autoload, ftplugin)
|
||||
- [textile](https://github.com/timcharper/textile.vim) (syntax, doc, ftplugin)
|
||||
- [thrift](https://github.com/solarnz/thrift.vim) (syntax)
|
||||
- [tmux](https://github.com/ericpruitt/tmux.vim) (syntax, ftplugin)
|
||||
- [tomdoc](https://github.com/wellbredgrapefruit/tomdoc.vim) (syntax)
|
||||
- [toml](https://github.com/cespare/vim-toml) (syntax, ftplugin)
|
||||
- [tptp](https://github.com/c-cube/vim-tptp) (syntax)
|
||||
- [twig](https://github.com/lumiliet/vim-twig) (syntax, indent, ftplugin)
|
||||
- [typescript](https://github.com/HerringtonDarkholme/yats.vim) (syntax, indent, compiler, ftplugin)
|
||||
- [vala](https://github.com/arrufat/vala.vim) (syntax, indent)
|
||||
- [typescript](https://github.com/HerringtonDarkholme/yats.vim) (syntax, indent, compiler, ftplugin, ctags)
|
||||
- [unison](https://github.com/unisonweb/unison) (syntax)
|
||||
- [v](https://github.com/ollykel/v-vim) (syntax, indent, ftplugin)
|
||||
- [vala](https://github.com/arrufat/vala.vim) (syntax, indent, ftplugin)
|
||||
- [vbnet](https://github.com/vim-scripts/vbnet.vim) (syntax)
|
||||
- [vcl](https://github.com/smerrill/vcl-vim-plugin) (syntax)
|
||||
- [vifm](https://github.com/vifm/vifm.vim) (syntax, autoload, ftplugin)
|
||||
- [vm](https://github.com/lepture/vim-velocity) (syntax, indent)
|
||||
- [velocity](https://github.com/lepture/vim-velocity) (syntax, indent)
|
||||
- [vue](https://github.com/posva/vim-vue) (syntax, indent, ftplugin)
|
||||
- [xdc](https://github.com/amal-khailtash/vim-xdc-syntax) (syntax)
|
||||
- [xls](https://github.com/vim-scripts/XSLT-syntax) (syntax)
|
||||
- [xml](https://github.com/amadeus/vim-xml) (syntax)
|
||||
- [xsl](https://github.com/vim-scripts/XSLT-syntax) (syntax)
|
||||
- [yaml](https://github.com/stephpy/vim-yaml) (syntax, ftplugin)
|
||||
- [yard](https://github.com/sheerun/vim-yardoc) (syntax)
|
||||
- [zephir](https://github.com/xwsoul/vim-zephir) (syntax)
|
||||
- [zig](https://github.com/ziglang/zig.vim) (syntax, autoload, ftplugin)
|
||||
- [zig](https://github.com/ziglang/zig.vim) (syntax, indent, autoload, ftplugin)
|
||||
- [zinit](https://github.com/zinit-zsh/zplugin-vim-syntax) (syntax)
|
||||
<!--/Language Packs-->
|
||||
|
||||
## 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
|
||||
|
||||
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:
|
||||
|
||||
```viml
|
||||
" ~/.vimrc
|
||||
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
|
||||
|
||||
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:
|
||||
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.
|
||||
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.
|
||||
|
||||
## License
|
||||
|
||||
See linked repositories for detailed license information.
|
||||
See linked repositories for detailed license information. This repository is MIT-licensed.
|
||||
|
||||
@@ -39,11 +39,11 @@ if exists("loaded_matchup")
|
||||
let b:match_skip = 's:comment\|string'
|
||||
endif
|
||||
|
||||
let b:original_commentstring = &l:commentstring
|
||||
let b:jsx_pretty_old_cms = &l:commentstring
|
||||
|
||||
augroup jsx_comment
|
||||
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
|
||||
|
||||
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, 'typescript') != -1 || index(g:polyglot_disabled, 'typescript') != -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
|
||||
endif
|
||||
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
|
||||
|
||||
function! s:next_section(stop_func_begin) abort
|
||||
@@ -85,11 +85,16 @@ function! s:prev_section(stop_func_begin) abort
|
||||
endwhile
|
||||
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
|
||||
nnoremap <buffer><silent>]] :<C-u>call <SID>next_section(1)<CR>
|
||||
nnoremap <buffer><silent>[[ :<C-u>call <SID>prev_section(1)<CR>
|
||||
nnoremap <buffer><silent>][ :<C-u>call <SID>next_section(0)<CR>
|
||||
nnoremap <buffer><silent>[] :<C-u>call <SID>prev_section(0)<CR>
|
||||
nmap <buffer><silent>]] <Plug>(llvm-next-section-begin)
|
||||
nmap <buffer><silent>[[ <Plug>(llvm-prev-section-begin)
|
||||
nmap <buffer><silent>][ <Plug>(llvm-next-section-end)
|
||||
nmap <buffer><silent>[] <Plug>(llvm-prev-section-end)
|
||||
endif
|
||||
|
||||
function! s:function_range_at(linum) abort
|
||||
@@ -222,9 +227,12 @@ function! s:move_to_following_block() abort
|
||||
endtry
|
||||
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
|
||||
nnoremap <buffer><silent>[b :<C-u>call <SID>move_to_pred_block()<CR>
|
||||
nnoremap <buffer><silent>]b :<C-u>call <SID>move_to_following_block()<CR>
|
||||
nmap <buffer><silent>[b <Plug>(llvm-move-block-prev)
|
||||
nmap <buffer><silent>]b <Plug>(llvm-move-block-next)
|
||||
endif
|
||||
|
||||
function! s:get_func_identifiers(line) abort
|
||||
@@ -438,8 +446,10 @@ function! s:goto_definition() abort
|
||||
echom "No definition for '" . ident . "' found"
|
||||
endfunction
|
||||
|
||||
nnoremap <buffer><Plug>(llvm-goto-definition) :<C-u>call <SID>goto_definition()<CR>
|
||||
|
||||
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
|
||||
|
||||
function! s:run_lli(...) abort
|
||||
|
||||
@@ -2,6 +2,11 @@ if !exists('g:polyglot_disabled') || !(index(g:polyglot_disabled, 'typescript')
|
||||
|
||||
" modified from html.vim
|
||||
" For matchit plugin
|
||||
|
||||
if get(g:, 'vim_jsx_pretty_disable_tsx', 0)
|
||||
finish
|
||||
endif
|
||||
|
||||
if exists("loaded_matchit")
|
||||
let b:match_ignorecase = 0
|
||||
let b:match_words = '(:),\[:\],{:},<:>,' .
|
||||
@@ -15,11 +20,11 @@ if exists("loaded_matchup")
|
||||
let b:match_skip = 's:comment\|string'
|
||||
endif
|
||||
|
||||
let b:original_commentstring = &l:commentstring
|
||||
let b:jsx_pretty_old_cms = &l:commentstring
|
||||
|
||||
augroup jsx_comment
|
||||
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
|
||||
|
||||
setlocal suffixesadd+=.tsx
|
||||
@@ -1,5 +1,5 @@
|
||||
if !exists('g:polyglot_disabled') || !(index(g:polyglot_disabled, 'typescript') != -1 || index(g:polyglot_disabled, 'typescript') != -1 || index(g:polyglot_disabled, 'jsx') != -1)
|
||||
|
||||
%%CONTENT%%
|
||||
source <sfile>:h/tsx.vim
|
||||
|
||||
endif
|
||||
@@ -21,7 +21,7 @@ if exists('s:did_indent')
|
||||
endif
|
||||
|
||||
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()
|
||||
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, 'typescript') != -1 || index(g:polyglot_disabled, 'typescript') != -1 || index(g:polyglot_disabled, 'jsx') != -1)
|
||||
|
||||
source <sfile>:h/javascript.vim
|
||||
|
||||
endif
|
||||
@@ -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
|
||||
|
||||
if exists('b:did_indent')
|
||||
let s:did_indent = b:did_indent
|
||||
unlet b:did_indent
|
||||
@@ -21,8 +25,10 @@ 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\,,!^F,o,O,e,*<Return>,<>>,<<>,/
|
||||
setlocal indentkeys=0.,0{,0},0),0],0?,0\*,0\,,!^F,:,<:>,o,O,e,<>>,=*/
|
||||
|
||||
function! GetJsxIndent()
|
||||
return jsx_pretty#indent#get(function('GetTypescriptIndent'))
|
||||
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, 'typescript') != -1 || index(g:polyglot_disabled, 'typescript') != -1 || index(g:polyglot_disabled, 'jsx') != -1)
|
||||
|
||||
source <sfile>:h/tsx.vim
|
||||
|
||||
endif
|
||||
@@ -36,6 +36,19 @@ if exists('g:cpp_member_variable_highlight') && g:cpp_member_variable_highlight
|
||||
hi def link cCustomMemVar Function
|
||||
endif
|
||||
|
||||
" -----------------------------------------------------------------------------
|
||||
" Highlight POSIX functions.
|
||||
" -----------------------------------------------------------------------------
|
||||
if exists('g:cpp_posix_standard') && g:cpp_posix_standard
|
||||
syn keyword cPOSIXFunction socket accept bind connect getsockname
|
||||
syn keyword cPOSIXFunction listen recv recvfrom recvmsg
|
||||
syn keyword cPOSIXFunction send sendto sendmsg setsockopt socketpair
|
||||
syn keyword cPOSIXFunction htonl htons ntohl ntohs
|
||||
syn keyword cPOSIXFunction inet_ntop inet_pton getaddrinfo
|
||||
syn keyword cPOSIXFunction poll select pselect
|
||||
hi def link cPOSIXFunction Function
|
||||
endif
|
||||
|
||||
" -----------------------------------------------------------------------------
|
||||
" Source: aftersyntaxc.vim
|
||||
" -----------------------------------------------------------------------------
|
||||
|
||||
@@ -633,21 +633,19 @@ syntax keyword cppSTLios unitbuf
|
||||
syntax keyword cppSTLios uppercase
|
||||
"syntax keyword cppSTLios ws
|
||||
syntax keyword cppSTLiterator back_insert_iterator
|
||||
syntax keyword cppSTLiterator bidirectional_iterator
|
||||
syntax keyword cppSTLiterator const_iterator
|
||||
syntax keyword cppSTLiterator const_reverse_iterator
|
||||
syntax keyword cppSTLiterator forward_iterator
|
||||
syntax keyword cppSTLiterator front_insert_iterator
|
||||
syntax keyword cppSTLiterator input_iterator
|
||||
syntax keyword cppSTLiterator insert_iterator
|
||||
syntax keyword cppSTLiterator istreambuf_iterator
|
||||
syntax keyword cppSTLiterator istream_iterator
|
||||
syntax keyword cppSTLiterator ostreambuf_iterator
|
||||
syntax keyword cppSTLiterator ostream_iterator
|
||||
syntax keyword cppSTLiterator iterator
|
||||
syntax keyword cppSTLiterator ostream_iterator
|
||||
syntax keyword cppSTLiterator output_iterator
|
||||
syntax keyword cppSTLiterator random_access_iterator
|
||||
syntax keyword cppSTLiterator raw_storage_iterator
|
||||
syntax keyword cppSTLiterator reverse_bidirectional_iterator
|
||||
syntax keyword cppSTLiterator move_iterator
|
||||
syntax keyword cppSTLiterator reverse_iterator
|
||||
syntax keyword cppSTLiterator_tag bidirectional_iterator_tag
|
||||
syntax keyword cppSTLiterator_tag forward_iterator_tag
|
||||
@@ -1593,6 +1591,8 @@ endif " C++14
|
||||
|
||||
|
||||
if !exists("cpp_no_cpp17")
|
||||
syntax keyword cppSTLnamespace pmr
|
||||
|
||||
" algorithm
|
||||
syntax keyword cppSTLfunction clamp
|
||||
syntax keyword cppSTLfunction for_each_n
|
||||
@@ -1985,87 +1985,278 @@ endif " C++17
|
||||
|
||||
|
||||
if !exists("cpp_no_cpp20")
|
||||
" type_traits
|
||||
syntax keyword cppSTLtype remove_cvref remove_cvref_t
|
||||
syntax keyword cppType char8_t
|
||||
syntax keyword cppStatement co_yield co_return co_await
|
||||
syntax keyword cppStorageClass consteval
|
||||
syntax keyword cppSTLnamespace ranges
|
||||
|
||||
" algorithm
|
||||
syntax keyword cppSTLfunction shift_left
|
||||
syntax keyword cppSTLfunction shift_right
|
||||
syntax keyword cppSTLfunction lexicographical_compare_three_way
|
||||
|
||||
" bit
|
||||
syntax keyword cppSTLcast bit_cast
|
||||
syntax keyword cppSTLfunction ispow2
|
||||
syntax keyword cppSTLfunction ceil2
|
||||
syntax keyword cppSTLfunction floor2
|
||||
syntax keyword cppSTLfunction log2p1
|
||||
syntax keyword cppSTLfunction rotl
|
||||
syntax keyword cppSTLfunction rotr
|
||||
syntax keyword cppSTLfunction countl_zero
|
||||
syntax keyword cppSTLfunction countl_one
|
||||
syntax keyword cppSTLfunction countr_zero
|
||||
syntax keyword cppSTLfunction countr_one
|
||||
syntax keyword cppSTLfunction popcount
|
||||
syntax keyword cppSTLtype endian
|
||||
|
||||
" compare
|
||||
syntax keyword cppSTLtype weak_equality
|
||||
syntax keyword cppSTLtype strong_equality
|
||||
syntax keyword cppSTLtype partial_ordering
|
||||
syntax keyword cppSTLtype weak_ordering
|
||||
syntax keyword cppSTLtype strong_ordering
|
||||
syntax keyword cppSTLtype common_comparison_category
|
||||
syntax keyword cppSTLtype compare_three_way_result
|
||||
syntax keyword cppSTLtype compare_three_way
|
||||
syntax keyword cppSTLtype strong_order
|
||||
syntax keyword cppSTLtype weak_order
|
||||
syntax keyword cppSTLtype parital_order
|
||||
syntax keyword cppSTLtype compare_strong_order_fallback
|
||||
syntax keyword cppSTLtype compare_weak_order_fallback
|
||||
syntax keyword cppSTLtype compare_parital_order_fallback
|
||||
syntax keyword cppSTLfunction is_eq
|
||||
syntax keyword cppSTLfunction is_neq
|
||||
syntax keyword cppSTLfunction is_lt
|
||||
syntax keyword cppSTLfunction is_lteq
|
||||
syntax keyword cppSTLfunction is_gt
|
||||
syntax keyword cppSTLfunction is_gteq
|
||||
|
||||
" format
|
||||
syntax keyword cppSTLtype formatter
|
||||
syntax keyword cppSTLtype basic_format_parse_context
|
||||
syntax keyword cppSTLtype format_parse_context
|
||||
syntax keyword cppSTLtype wformat_parse_context
|
||||
syntax keyword cppSTLtype basic_format_context
|
||||
syntax keyword cppSTLtype format_context
|
||||
syntax keyword cppSTLtype wformat_context
|
||||
syntax keyword cppSTLtype basic_format_arg
|
||||
syntax keyword cppSTLtype basic_format_args
|
||||
syntax keyword cppSTLtype format_args
|
||||
syntax keyword cppSTLtype wformat_args
|
||||
syntax keyword cppSTLtype format_args_t
|
||||
syntax keyword cppSTLtype format_error
|
||||
syntax keyword cppSTLfuntion format
|
||||
syntax keyword cppSTLfuntion format_to
|
||||
syntax keyword cppSTLfuntion format_to_n
|
||||
syntax keyword cppSTLfuntion formatted_size
|
||||
syntax keyword cppSTLfuntion vformat
|
||||
syntax keyword cppSTLfuntion vformat_to
|
||||
syntax keyword cppSTLfuntion visit_format_arg
|
||||
syntax keyword cppSTLfuntion make_format_args
|
||||
syntax keyword cppSTLfuntion make_wformat_args
|
||||
|
||||
" iterator
|
||||
syntax keyword cppSTLtype default_sentinel_t unreachable_sentinel_t
|
||||
syntax keyword cppSTLiterator common_iterator
|
||||
syntax keyword cppSTLiterator counted_iterator
|
||||
syntax keyword cppSTLiterator_tag contiguous_iterator_tag
|
||||
|
||||
" memory
|
||||
syntax keyword cppSTLfunction to_address
|
||||
syntax keyword cppSTLfunction assume_aligned
|
||||
syntax keyword cppSTLfunction make_unique_default_init
|
||||
syntax keyword cppSTLfunction allocate_shared_default_init
|
||||
|
||||
" source_location
|
||||
syntax keyword cppSTLtype source_location
|
||||
|
||||
" span
|
||||
syntax keyword cppSTLtype span
|
||||
syntax keyword cppSTLfunction as_bytes
|
||||
syntax keyword cppSTLfunction as_writable_bytes
|
||||
syntax keyword cppSTLconstant dynamic_extent
|
||||
|
||||
" syncstream
|
||||
syntax keyword cppSTLtype basic_syncbuf
|
||||
syntax keyword cppSTLtype basic_osyncstream
|
||||
syntax keyword cppSTLtype syncbuf
|
||||
syntax keyword cppSTLtype wsyncbuf
|
||||
syntax keyword cppSTLtype osyncstream
|
||||
syntax keyword cppSTLtype wosyncstream
|
||||
|
||||
" type_traits
|
||||
syntax keyword cppSTLtype remove_cvref remove_cvref_t
|
||||
syntax keyword cppSTLtype common_reference common_reference_t
|
||||
syntax keyword cppSTLfunction is_constant_evaluated
|
||||
syntax keyword cppSTLfunction is_pointer_interconvertible
|
||||
syntax keyword cppSTLfunction is_corresponding_member
|
||||
syntax keyword cppSTLtype is_nothrow_convertible
|
||||
syntax keyword cppSTLbool is_nothrow_convertible_v
|
||||
syntax keyword cppSTLtype is_layout_compatible
|
||||
syntax keyword cppSTLbool is_layout_compatible_v
|
||||
syntax keyword cppSTLtype is_bounded_array
|
||||
syntax keyword cppSTLbool is_bounded_array_v
|
||||
syntax keyword cppSTLtype is_unbounded_array
|
||||
syntax keyword cppSTLbool is_unbounded_array_v
|
||||
syntax keyword cppSTLtype is_pointer_interconvertible_base_of
|
||||
syntax keyword cppSTLbool is_pointer_interconvertible_base_of_v
|
||||
syntax keyword cppSTLtype has_strong_structural_equality
|
||||
syntax keyword cppSTLbool has_strong_structural_equality_v
|
||||
|
||||
" version
|
||||
" TODO
|
||||
endif
|
||||
|
||||
|
||||
if exists('g:cpp_concepts_highlight') && g:cpp_concepts_highlight
|
||||
if exists('g:cpp_concepts_highlight')
|
||||
syntax keyword cppStatement concept
|
||||
syntax keyword cppStorageClass requires
|
||||
syntax keyword cppSTLtype DefaultConstructible
|
||||
syntax keyword cppSTLtype MoveConstructible
|
||||
syntax keyword cppSTLtype CopyConstructible
|
||||
syntax keyword cppSTLtype MoveAssignable
|
||||
syntax keyword cppSTLtype CopyAssignable
|
||||
syntax keyword cppSTLtype Destructible
|
||||
syntax keyword cppSTLtype TriviallyCopyable
|
||||
syntax keyword cppSTLtype TrivialType
|
||||
syntax keyword cppSTLtype StandardLayoutType
|
||||
syntax keyword cppSTLtype PODType
|
||||
syntax keyword cppSTLtype EqualityComparable
|
||||
syntax keyword cppSTLtype LessThanComparable
|
||||
syntax keyword cppSTLtype Swappable
|
||||
syntax keyword cppSTLtype ValueSwappable
|
||||
syntax keyword cppSTLtype NullablePointer
|
||||
syntax keyword cppSTLtype Hash
|
||||
syntax keyword cppSTLtype Allocator
|
||||
syntax keyword cppSTLtype FunctionObject
|
||||
syntax keyword cppSTLtype Callable
|
||||
syntax keyword cppSTLtype Predicate
|
||||
syntax keyword cppSTLtype BinaryPredicate
|
||||
syntax keyword cppSTLtype Compare
|
||||
syntax keyword cppSTLtype Container
|
||||
syntax keyword cppSTLtype ReversibleContainer
|
||||
syntax keyword cppSTLtype AllocatorAwareContainer
|
||||
syntax keyword cppSTLtype SequenceContainer
|
||||
syntax keyword cppSTLtype ContiguousContainer
|
||||
syntax keyword cppSTLtype AssociativeContainer
|
||||
syntax keyword cppSTLtype UnorderedAssociativeContainer
|
||||
syntax keyword cppSTLtype DefaultInsertable
|
||||
syntax keyword cppSTLtype CopyInsertable
|
||||
syntax keyword cppSTLtype CopyInsertable
|
||||
syntax keyword cppSTLtype MoveInsertable
|
||||
syntax keyword cppSTLtype EmplaceConstructible
|
||||
syntax keyword cppSTLtype Erasable
|
||||
syntax keyword cppSTLtype Iterator
|
||||
syntax keyword cppSTLtype InputIterator
|
||||
syntax keyword cppSTLtype OutputIterator
|
||||
syntax keyword cppSTLtype ForwardIterator
|
||||
syntax keyword cppSTLtype BidirectionalIterator
|
||||
syntax keyword cppSTLtype RandomAccessIterator
|
||||
syntax keyword cppSTLtype ContiguousIterator
|
||||
syntax keyword cppSTLtype UnformattedInputFunction
|
||||
syntax keyword cppSTLtype FormattedInputFunction
|
||||
syntax keyword cppSTLtype UnformattedOutputFunction
|
||||
syntax keyword cppSTLtype FormattedOutputFunction
|
||||
syntax keyword cppSTLtype SeedSequence
|
||||
syntax keyword cppSTLtype UniformRandomBitGenerator
|
||||
syntax keyword cppSTLtype RandomNumberEngine
|
||||
syntax keyword cppSTLtype RandomNumberEngineAdaptor
|
||||
syntax keyword cppSTLtype RandomNumberDistribution
|
||||
syntax keyword cppSTLtype BasicLockable
|
||||
syntax keyword cppSTLtype Lockable
|
||||
syntax keyword cppSTLtype TimedLockable
|
||||
syntax keyword cppSTLtype Mutex
|
||||
syntax keyword cppSTLtype TimedMutex
|
||||
syntax keyword cppSTLtype SharedMutex
|
||||
syntax keyword cppSTLtype SharedTimedMutex
|
||||
syntax keyword cppSTLtype UnaryTypeTrait
|
||||
syntax keyword cppSTLtype BinaryTypeTrait
|
||||
syntax keyword cppSTLtype TransformationTrait
|
||||
syntax keyword cppSTLtype Clock
|
||||
syntax keyword cppSTLtype TrivialClock
|
||||
syntax keyword cppSTLtype CharTraits
|
||||
syntax keyword cppSTLtype pos_type
|
||||
syntax keyword cppSTLtype off_type
|
||||
syntax keyword cppSTLtype BitmaskType
|
||||
syntax keyword cppSTLtype NumericType
|
||||
syntax keyword cppSTLtype RegexTraits
|
||||
syntax keyword cppSTLtype LiteralType
|
||||
|
||||
if g:cpp_concepts_highlight == 1
|
||||
syntax keyword cppSTLconcept DefaultConstructible
|
||||
syntax keyword cppSTLconcept MoveConstructible
|
||||
syntax keyword cppSTLconcept CopyConstructible
|
||||
syntax keyword cppSTLconcept MoveAssignable
|
||||
syntax keyword cppSTLconcept CopyAssignable
|
||||
syntax keyword cppSTLconcept Destructible
|
||||
syntax keyword cppSTLconcept TriviallyCopyable
|
||||
syntax keyword cppSTLconcept TrivialType
|
||||
syntax keyword cppSTLconcept StandardLayoutType
|
||||
syntax keyword cppSTLconcept PODType
|
||||
syntax keyword cppSTLconcept EqualityComparable
|
||||
syntax keyword cppSTLconcept LessThanComparable
|
||||
syntax keyword cppSTLconcept Swappable
|
||||
syntax keyword cppSTLconcept ValueSwappable
|
||||
syntax keyword cppSTLconcept NullablePointer
|
||||
syntax keyword cppSTLconcept Hash
|
||||
syntax keyword cppSTLconcept Allocator
|
||||
syntax keyword cppSTLconcept FunctionObject
|
||||
syntax keyword cppSTLconcept Callable
|
||||
syntax keyword cppSTLconcept Predicate
|
||||
syntax keyword cppSTLconcept BinaryPredicate
|
||||
syntax keyword cppSTLconcept Compare
|
||||
syntax keyword cppSTLconcept Container
|
||||
syntax keyword cppSTLconcept ReversibleContainer
|
||||
syntax keyword cppSTLconcept AllocatorAwareContainer
|
||||
syntax keyword cppSTLconcept SequenceContainer
|
||||
syntax keyword cppSTLconcept ContiguousContainer
|
||||
syntax keyword cppSTLconcept AssociativeContainer
|
||||
syntax keyword cppSTLconcept UnorderedAssociativeContainer
|
||||
syntax keyword cppSTLconcept DefaultInsertable
|
||||
syntax keyword cppSTLconcept CopyInsertable
|
||||
syntax keyword cppSTLconcept CopyInsertable
|
||||
syntax keyword cppSTLconcept MoveInsertable
|
||||
syntax keyword cppSTLconcept EmplaceConstructible
|
||||
syntax keyword cppSTLconcept Erasable
|
||||
syntax keyword cppSTLconcept Iterator
|
||||
syntax keyword cppSTLconcept InputIterator
|
||||
syntax keyword cppSTLconcept OutputIterator
|
||||
syntax keyword cppSTLconcept ForwardIterator
|
||||
syntax keyword cppSTLconcept BidirectionalIterator
|
||||
syntax keyword cppSTLconcept RandomAccessIterator
|
||||
syntax keyword cppSTLconcept ContiguousIterator
|
||||
syntax keyword cppSTLconcept UnformattedInputFunction
|
||||
syntax keyword cppSTLconcept FormattedInputFunction
|
||||
syntax keyword cppSTLconcept UnformattedOutputFunction
|
||||
syntax keyword cppSTLconcept FormattedOutputFunction
|
||||
syntax keyword cppSTLconcept SeedSequence
|
||||
syntax keyword cppSTLconcept UniformRandomBitGenerator
|
||||
syntax keyword cppSTLconcept RandomNumberEngine
|
||||
syntax keyword cppSTLconcept RandomNumberEngineAdaptor
|
||||
syntax keyword cppSTLconcept RandomNumberDistribution
|
||||
syntax keyword cppSTLconcept BasicLockable
|
||||
syntax keyword cppSTLconcept Lockable
|
||||
syntax keyword cppSTLconcept TimedLockable
|
||||
syntax keyword cppSTLconcept Mutex
|
||||
syntax keyword cppSTLconcept TimedMutex
|
||||
syntax keyword cppSTLconcept SharedMutex
|
||||
syntax keyword cppSTLconcept SharedTimedMutex
|
||||
syntax keyword cppSTLconcept UnaryTypeTrait
|
||||
syntax keyword cppSTLconcept BinaryTypeTrait
|
||||
syntax keyword cppSTLconcept TransformationTrait
|
||||
syntax keyword cppSTLconcept Clock
|
||||
syntax keyword cppSTLconcept TrivialClock
|
||||
syntax keyword cppSTLconcept CharTraits
|
||||
syntax keyword cppSTLconcept pos_type
|
||||
syntax keyword cppSTLconcept off_type
|
||||
syntax keyword cppSTLconcept BitmaskType
|
||||
syntax keyword cppSTLconcept NumericType
|
||||
syntax keyword cppSTLconcept RegexTraits
|
||||
syntax keyword cppSTLconcept LiteralType
|
||||
elseif g:cpp_concepts_highlight == 2
|
||||
syntax keyword cppSTLconcept same_as
|
||||
syntax keyword cppSTLconcept derived_from
|
||||
syntax keyword cppSTLconcept convertible_to
|
||||
syntax keyword cppSTLconcept common_reference_with
|
||||
syntax keyword cppSTLconcept common_with
|
||||
syntax keyword cppSTLconcept integral
|
||||
syntax keyword cppSTLconcept signed_integral
|
||||
syntax keyword cppSTLconcept unsigned_integral
|
||||
syntax keyword cppSTLconcept assignable_from
|
||||
syntax keyword cppSTLconcept swappable
|
||||
syntax keyword cppSTLconcept swappable_with
|
||||
syntax keyword cppSTLconcept destructible
|
||||
syntax keyword cppSTLconcept constructible_from
|
||||
syntax keyword cppSTLconcept default_constructible
|
||||
syntax keyword cppSTLconcept move_constructible
|
||||
syntax keyword cppSTLconcept copy_constructible
|
||||
syntax keyword cppSTLconcept boolean
|
||||
syntax keyword cppSTLconcept equality_comparable
|
||||
syntax keyword cppSTLconcept equality_comparable_with
|
||||
syntax keyword cppSTLconcept totally_ordered
|
||||
syntax keyword cppSTLconcept totally_ordered_with
|
||||
syntax keyword cppSTLconcept movable
|
||||
syntax keyword cppSTLconcept copyable
|
||||
syntax keyword cppSTLconcept semiregular
|
||||
syntax keyword cppSTLconcept regular
|
||||
syntax keyword cppSTLconcept invocable
|
||||
syntax keyword cppSTLconcept regular_invocable
|
||||
syntax keyword cppSTLconcept predicate
|
||||
syntax keyword cppSTLconcept relation
|
||||
syntax keyword cppSTLconcept strict_weak_order
|
||||
syntax keyword cppSTLconcept readable
|
||||
syntax keyword cppSTLconcept writable
|
||||
syntax keyword cppSTLconcept weakly_incrementable
|
||||
syntax keyword cppSTLconcept incrementable
|
||||
syntax keyword cppSTLconcept input_or_output_iterator
|
||||
syntax keyword cppSTLconcept sentinal_for
|
||||
syntax keyword cppSTLconcept sized_sentinal_for
|
||||
syntax keyword cppSTLconcept input_iterator
|
||||
syntax keyword cppSTLconcept output_iterator
|
||||
syntax keyword cppSTLconcept forward_iterator
|
||||
syntax keyword cppSTLconcept bidirectional_iterator
|
||||
syntax keyword cppSTLconcept random_access_iterator
|
||||
syntax keyword cppSTLconcept input_iterator
|
||||
syntax keyword cppSTLconcept output_iterator
|
||||
syntax keyword cppSTLconcept bidirectional_iterator
|
||||
syntax keyword cppSTLconcept random_access_iterator
|
||||
syntax keyword cppSTLconcept contiguous_iterator
|
||||
syntax keyword cppSTLconcept indirectly_unary_invocable
|
||||
syntax keyword cppSTLconcept indirectly_regular_unary_invocable
|
||||
syntax keyword cppSTLconcept indirect_unary_predicate
|
||||
syntax keyword cppSTLconcept indirect_relation
|
||||
syntax keyword cppSTLconcept indirect_strict_weak_order
|
||||
syntax keyword cppSTLconcept indirectly_movable
|
||||
syntax keyword cppSTLconcept indirectly_movable_storable
|
||||
syntax keyword cppSTLconcept indirectly_copyable
|
||||
syntax keyword cppSTLconcept indirectly_copyable_storable
|
||||
syntax keyword cppSTLconcept indirectly_swappable
|
||||
syntax keyword cppSTLconcept indirectly_comparable
|
||||
syntax keyword cppSTLconcept permutable
|
||||
syntax keyword cppSTLconcept mergeable
|
||||
syntax keyword cppSTLconcept sortable
|
||||
syntax keyword cppSTLconcept range
|
||||
syntax keyword cppSTLconcept sized_range
|
||||
syntax keyword cppSTLconcept output_range
|
||||
syntax keyword cppSTLconcept input_range
|
||||
syntax keyword cppSTLconcept bidirectional_range
|
||||
syntax keyword cppSTLconcept random_access_range
|
||||
syntax keyword cppSTLconcept contiguous_range
|
||||
syntax keyword cppSTLconcept common_range
|
||||
syntax keyword cppSTLconcept viewable_range
|
||||
syntax keyword cppSTLconcept uniform_random_bit_generator
|
||||
endif
|
||||
endif " C++ concepts
|
||||
|
||||
|
||||
@@ -2095,6 +2286,7 @@ if version >= 508 || !exists("did_cpp_syntax_inits")
|
||||
HiLink cppSTLiterator Typedef
|
||||
HiLink cppSTLiterator_tag Typedef
|
||||
HiLink cppSTLenum Typedef
|
||||
HiLink cppSTLconcept Typedef
|
||||
HiLink cppSTLios Function
|
||||
HiLink cppSTLcast Statement " be consistent with official syntax
|
||||
HiLink cppRawString String
|
||||
|
||||
@@ -22,34 +22,31 @@ if exists('s:current_syntax')
|
||||
let b:current_syntax = s:current_syntax
|
||||
endif
|
||||
|
||||
if hlexists("jsNoise") " pangloss/vim-javascript
|
||||
if hlexists("jsDebugger") || hlexists("jsNoise") " yuezk/vim-js or pangloss/vim-javascript
|
||||
syntax cluster jsExpression add=jsxRegion
|
||||
elseif hlexists("javascriptOpSymbols") " othree/yajs.vim
|
||||
" refine the javascript line comment
|
||||
syntax region javascriptLineComment start=+//+ end=/$/ contains=@Spell,javascriptCommentTodo extend keepend
|
||||
syntax cluster javascriptValue add=jsxRegion
|
||||
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
|
||||
" refine the javascript line comment
|
||||
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
|
||||
syntax region javaScriptBlockBuildIn
|
||||
\ contained
|
||||
syntax region javaScriptBlock
|
||||
\ matchgroup=javaScriptBraces
|
||||
\ start="{"
|
||||
\ end="}"
|
||||
\ contained
|
||||
\ extend
|
||||
\ contains=javaScriptBlockBuildIn,@javaScriptEmbededExpr,javaScript.*
|
||||
\ contains=javaScriptBlock,@javaScriptEmbededExpr,javaScript.*
|
||||
\ fold
|
||||
syntax cluster javaScriptEmbededExpr add=jsxRegion
|
||||
|
||||
" refine the template string syntax
|
||||
syntax region javaScriptStringT start=+`+ skip=+\\\\\|\\`+ end=+`+ contains=javaScriptSpecial,javaScriptEmbed,@htmlPreproc extend
|
||||
syntax region javaScriptEmbed matchgroup=javaScriptEmbedBraces start=+\${+ end=+}+ contained contains=@javaScriptEmbededExpr,javaScript.*
|
||||
syntax cluster javaScriptEmbededExpr add=jsxRegion,javaScript.*
|
||||
endif
|
||||
|
||||
runtime syntax/jsx_pretty.vim
|
||||
|
||||
@@ -1,5 +1,28 @@
|
||||
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
|
||||
@@ -11,17 +34,31 @@ endif
|
||||
|
||||
let s:tags = '\%(' . join(graphql#javascript_tags(), '\|') . '\)'
|
||||
|
||||
exec 'syntax region graphqlTemplateString start=+' . s:tags . '\@20<=`+ skip=+\\`+ end=+`+ contains=@GraphQLSyntax,jsTemplateExpression,jsSpecial extend'
|
||||
exec 'syntax match graphqlTaggedTemplate +' . s:tags . '\ze`+ nextgroup=graphqlTemplateString'
|
||||
if graphql#has_syntax_group('jsTemplateExpression')
|
||||
" 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.
|
||||
syntax region graphqlTemplateExpression start=+${+ end=+}+ contained contains=jsTemplateExpression containedin=graphqlFold keepend
|
||||
hi def link graphqlTemplateString jsTemplateString
|
||||
hi def link graphqlTaggedTemplate jsTaggedTemplate
|
||||
hi def link graphqlTemplateExpression jsTemplateExpression
|
||||
|
||||
hi def link graphqlTemplateString jsTemplateString
|
||||
hi def link graphqlTaggedTemplate jsTaggedTemplate
|
||||
hi def link graphqlTemplateExpression jsTemplateExpression
|
||||
syn cluster jsExpression add=graphqlTaggedTemplate
|
||||
syn cluster graphqlTaggedTemplate add=graphqlTemplateString
|
||||
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
|
||||
syn cluster graphqlTaggedTemplate add=graphqlTemplateString
|
||||
hi def link graphqlTemplateString javaScriptStringT
|
||||
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
|
||||
|
||||
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, 'typescript') != -1 || index(g:polyglot_disabled, 'typescript') != -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
|
||||
@@ -2,6 +2,12 @@ if !exists('g:polyglot_disabled') || !(index(g:polyglot_disabled, 'typescript')
|
||||
|
||||
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">
|
||||
" ~~~~~~~~~~~~~~~~~
|
||||
" and self close tag
|
||||
@@ -12,11 +18,14 @@ syntax region jsxTag
|
||||
\ matchgroup=jsxOpenPunct
|
||||
\ end=+>+
|
||||
\ matchgroup=NONE
|
||||
\ end=+\(/\_s*>\)\@=+
|
||||
\ end=+\%(/\_s*>\)\@=+
|
||||
\ contained
|
||||
\ contains=jsxOpenTag,jsxEscapeJs,jsxAttrib,jsComment,@javascriptComments,javaScriptLineComment,javaScriptComment,typescriptLineComment,typescriptComment,jsxSpreadOperator
|
||||
\ contains=jsxOpenTag,jsxAttrib,jsxExpressionBlock,jsxSpreadOperator,jsComment,@javascriptComments,javaScriptLineComment,javaScriptComment,typescriptLineComment,typescriptComment
|
||||
\ keepend
|
||||
\ extend
|
||||
\ skipwhite
|
||||
\ skipempty
|
||||
\ nextgroup=jsxCloseString
|
||||
|
||||
" <tag></tag>
|
||||
" ~~~~~~~~~~~
|
||||
@@ -27,30 +36,15 @@ syntax region jsxTag
|
||||
" <tag />
|
||||
" ~~~~~~~
|
||||
syntax region jsxElement
|
||||
\ start=+<\_s*\(>\|\${\|\z(\<[-:_\.\$0-9A-Za-z]\+\>\)\)+
|
||||
\ start=+<\_s*\%(>\|\${\|\z(\<[-:._$A-Za-z0-9]\+\>\)\)+
|
||||
\ end=+/\_s*>+
|
||||
\ end=+<\_s*/\_s*\z1\_s*>+
|
||||
\ contains=jsxElement,jsxEscapeJs,jsxTag,jsxComment,jsxCloseString,jsxCloseTag,@Spell
|
||||
\ contains=jsxElement,jsxTag,jsxExpressionBlock,jsxComment,jsxCloseTag,@Spell
|
||||
\ keepend
|
||||
\ extend
|
||||
\ contained
|
||||
\ 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}>
|
||||
" ~~~~
|
||||
" and fragment start tag
|
||||
@@ -66,19 +60,31 @@ exe 'syntax region jsxOpenTag
|
||||
\ contains=jsxTagName
|
||||
\ nextgroup=jsxAttrib
|
||||
\ 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>
|
||||
" ~
|
||||
syntax match jsxDot +\.+ contained display
|
||||
syntax match jsxDot +\.+ contained
|
||||
|
||||
" <foo:bar>
|
||||
" ~
|
||||
syntax match jsxNamespace +:+ contained display
|
||||
syntax match jsxNamespace +:+ contained
|
||||
|
||||
" <tag id="sample">
|
||||
" ~
|
||||
syntax match jsxEqual +=+ contained display nextgroup=jsxString,jsxEscapeJs,jsxRegion skipwhite
|
||||
syntax match jsxEqual +=+ contained skipwhite skipempty nextgroup=jsxString,jsxExpressionBlock,jsxRegion
|
||||
|
||||
" <tag />
|
||||
" ~~
|
||||
@@ -99,13 +105,12 @@ syntax region jsxCloseTag
|
||||
" <tag key={this.props.key}>
|
||||
" ~~~
|
||||
syntax match jsxAttrib
|
||||
\ +\<[-A-Za-z_][-:_\$0-9A-Za-z]*\>+
|
||||
\ +\<[_$A-Za-z][-:_$A-Za-z0-9]*\>+
|
||||
\ contained
|
||||
\ nextgroup=jsxEqual
|
||||
\ skipwhite
|
||||
\ skipempty
|
||||
\ contains=jsxAttribKeyword
|
||||
\ display
|
||||
\ contains=jsxAttribKeyword,jsxNamespace
|
||||
|
||||
" <MyComponent ...>
|
||||
" ~~~~~~~~~~~
|
||||
@@ -113,67 +118,71 @@ syntax match jsxAttrib
|
||||
" <someCamel ...>
|
||||
" ~~~~~
|
||||
exe 'syntax match jsxComponentName
|
||||
\ +\<[A-Z][\$0-9A-Za-z]\+\>+
|
||||
\ +\<[_$]\?[A-Z][-_$A-Za-z0-9]*\>+
|
||||
\ contained
|
||||
\ display ' .(s:highlight_close_tag ? 'transparent' : '')
|
||||
\ ' .(s:highlight_close_tag ? 'transparent' : '')
|
||||
|
||||
" <tag key={this.props.key}>
|
||||
" ~~~
|
||||
exe 'syntax match jsxTagName
|
||||
\ +\<[-:_\.\$0-9A-Za-z]\+\>+
|
||||
\ +\<[-:._$A-Za-z0-9]\+\>+
|
||||
\ contained
|
||||
\ contains=jsxComponentName,jsxDot,jsxNamespace
|
||||
\ nextgroup=jsxAttrib
|
||||
\ skipempty
|
||||
\ skipwhite
|
||||
\ display ' .(s:highlight_close_tag ? 'transparent' : '')
|
||||
\ ' .(s:highlight_close_tag ? 'transparent' : '')
|
||||
|
||||
" <tag id="sample">
|
||||
" ~~~~~~~~
|
||||
" and
|
||||
" <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)
|
||||
|
||||
" add support to JSX inside the tagged template string
|
||||
" https://github.com/developit/htm
|
||||
if s:enable_tagged_jsx
|
||||
exe 'syntax region jsxTaggedRegion
|
||||
\ start=+\%('. join(s:tags, '\|') .'\)\@<=`+ms=s+1
|
||||
\ end=+`+me=e-1
|
||||
\ extend
|
||||
\ contained
|
||||
\ containedin=jsTemplateString,javascriptTemplate,javaScriptStringT,typescriptStringB
|
||||
\ contains=jsxElement'
|
||||
exe 'syntax match jsxRegion +\%(' . join(s:tags, '\|') . '\)\%(\_s*`\)\@=+ contains=jsTemplateStringTag,jsTaggedTemplate,javascriptTagRef skipwhite skipempty nextgroup=jsxTaggedRegion'
|
||||
|
||||
syntax region jsxEscapeJs
|
||||
\ start=+\${+
|
||||
\ end=++
|
||||
syntax region jsxTaggedRegion
|
||||
\ matchgroup=jsxBackticks
|
||||
\ start=+`+
|
||||
\ end=+`+
|
||||
\ extend
|
||||
\ 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
|
||||
\ matchgroup=jsxOpenPunct
|
||||
\ start=+<\%(\${\)\@=+
|
||||
\ matchgroup=NONE
|
||||
\ end=++
|
||||
\ end=+}\@1<=+
|
||||
\ contained
|
||||
\ contains=jsxEscapeJs
|
||||
\ nextgroup=jsxAttrib,jsxSpreadOperator
|
||||
\ contains=jsxExpressionBlock
|
||||
\ skipwhite
|
||||
\ 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
|
||||
|
||||
" Highlight the tag name
|
||||
@@ -183,10 +192,14 @@ highlight def link jsxComponentName Function
|
||||
|
||||
highlight def link jsxAttrib Type
|
||||
highlight def link jsxAttribKeyword jsxAttrib
|
||||
highlight def link jsxEqual Operator
|
||||
highlight def link jsxString String
|
||||
highlight def link jsxComment Comment
|
||||
|
||||
highlight def link jsxDot 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
|
||||
highlight def link jsxCloseString Identifier
|
||||
@@ -201,9 +214,6 @@ highlight def link jsxPunct jsxCloseString
|
||||
highlight def link jsxClosePunct jsxPunct
|
||||
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)
|
||||
|
||||
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
|
||||
endif
|
||||
|
||||
|
||||
endif
|
||||
|
||||
@@ -2,17 +2,13 @@ if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'mathematica') =
|
||||
|
||||
"Vim conceal file
|
||||
" Language: Mathematica
|
||||
" Maintainer: Voldikss <dyzplus@gmail.com>
|
||||
" Last Change: 2019 Jan 23 by Voldikss
|
||||
" Source: https://github.com/voldikss/vim-mma/after/syntax/mma.vim
|
||||
" Credits:
|
||||
" Rsmenon: https://github.com/rsmenon
|
||||
" Maintainer: R. Menon <rsmenon@icloud.com>
|
||||
" Last Change: Feb 25, 2013
|
||||
|
||||
if (exists('g:mma_candy') && g:mma_candy == 0) || !has('conceal') || &enc != 'utf-8'
|
||||
finish
|
||||
endif
|
||||
|
||||
|
||||
"These are fairly safe and straightforward conceals
|
||||
if exists('g:mma_candy') && g:mma_candy > 0
|
||||
"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
|
||||
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
|
||||
highlight link rspecGroupMethods Type
|
||||
setlocal commentstring=#\ %s
|
||||
|
||||
syntax keyword rspecBeforeAndAfter after after_suite_parts append_after append_before before before_suite_parts prepend_after prepend_before around
|
||||
highlight link rspecBeforeAndAfter Statement
|
||||
syntax keyword rspecGroupMethods
|
||||
\ 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
|
||||
highlight link rspecMocks Constant
|
||||
syntax keyword rspecBeforeAndAfter
|
||||
\ 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
|
||||
highlight link rspecMockMethods Function
|
||||
syntax keyword rspecMocks
|
||||
\ double
|
||||
\ instance_double
|
||||
\ instance_spy
|
||||
\ mock
|
||||
\ spy
|
||||
\ stub
|
||||
\ stub_chain
|
||||
\ stub_const
|
||||
|
||||
syntax keyword rspecKeywords should should_not should_not_receive should_receive
|
||||
highlight link rspecKeywords Constant
|
||||
syntax keyword rspecMockMethods
|
||||
\ 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\+\>/
|
||||
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
|
||||
|
||||
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
|
||||
@@ -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
|
||||
set cpo&vim
|
||||
|
||||
@@ -26,6 +30,12 @@ endif
|
||||
" refine the typescript line comment
|
||||
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')
|
||||
" add a typescriptBlock group for typescript
|
||||
syntax region typescriptBlock
|
||||
@@ -36,11 +46,14 @@ if !hlexists('typescriptTypeCast')
|
||||
\ extend
|
||||
\ contains=@typescriptExpression,typescriptBlock
|
||||
\ fold
|
||||
hi def link typescriptTypeBrackets typescriptOpSymbols
|
||||
endif
|
||||
|
||||
syntax cluster typescriptExpression add=jsxRegion,typescriptParens
|
||||
|
||||
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'
|
||||
|
||||
@@ -1,5 +1,28 @@
|
||||
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
|
||||
|
||||
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, 'typescript') != -1 || index(g:polyglot_disabled, 'typescript') != -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 FALSE False false NO No no OFF Off off
|
||||
|
||||
syn match yamlKey "^\s*\zs[^ \t\"]\+\ze\s*:"
|
||||
syn match yamlKey "^\s*-\s*\zs[^ \t\"\']\+\ze\s*:"
|
||||
syn match yamlKey "^\s*\zs[^ \t\"\'#]\+\ze\s*:"
|
||||
syn match yamlKey "^\s*-\s*\zs[^ \t\"\'#]\+\ze\s*:"
|
||||
syn match yamlAnchor "&\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")
|
||||
let b:l2u_enabled = 0
|
||||
endif
|
||||
if !has_key(b:, "l2u_autodetect_enable")
|
||||
let b:l2u_autodetect_enable = 1
|
||||
endif
|
||||
|
||||
" Did we install the L2U tab mappings?
|
||||
if !has_key(b:, "l2u_tab_set")
|
||||
@@ -92,34 +95,39 @@ endfunction
|
||||
" Each time the filetype changes, we may need to enable or
|
||||
" disable the LaTeX-to-Unicode functionality
|
||||
function! LaTeXtoUnicode#Refresh()
|
||||
|
||||
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
|
||||
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", "$^"))
|
||||
|
||||
if match(&filetype, file_types) < 0 || match(&filetype, file_types_blacklist) >= 0
|
||||
if b:l2u_enabled
|
||||
call LaTeXtoUnicode#Disable()
|
||||
call LaTeXtoUnicode#Disable(1)
|
||||
else
|
||||
return
|
||||
return ''
|
||||
endif
|
||||
elseif !b:l2u_enabled
|
||||
call LaTeXtoUnicode#Enable()
|
||||
call LaTeXtoUnicode#Enable(1)
|
||||
endif
|
||||
|
||||
endfunction
|
||||
|
||||
function! LaTeXtoUnicode#Enable()
|
||||
function! LaTeXtoUnicode#Enable(...)
|
||||
let auto_set = a:0 > 0 ? a:1 : 0
|
||||
|
||||
if b:l2u_enabled
|
||||
return
|
||||
return ''
|
||||
end
|
||||
|
||||
call s:L2U_ResetLastCompletionInfo()
|
||||
|
||||
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
|
||||
" 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
|
||||
" will actually initialize all the LaTeX-to-Unicode substitutions.
|
||||
call LaTeXtoUnicode#Init()
|
||||
|
||||
return
|
||||
|
||||
return ''
|
||||
endfunction
|
||||
|
||||
function! LaTeXtoUnicode#Disable()
|
||||
function! LaTeXtoUnicode#Disable(...)
|
||||
let auto_set = a:0 > 0 ? a:1 : 0
|
||||
if !b:l2u_enabled
|
||||
return
|
||||
return ''
|
||||
endif
|
||||
let b:l2u_enabled = 0
|
||||
let b:l2u_autodetect_enable = auto_set
|
||||
call LaTeXtoUnicode#Init()
|
||||
return
|
||||
return ''
|
||||
endfunction
|
||||
|
||||
" Translate old options to their new equivalents
|
||||
@@ -246,7 +254,6 @@ function! LaTeXtoUnicode#omnifunc(findstart, base)
|
||||
endif
|
||||
let b:l2u_in_fallback = 0
|
||||
" set info for the callback
|
||||
let b:l2u_tab_completing = 1
|
||||
let b:l2u_found_completion = 1
|
||||
" analyse current line
|
||||
let col1 = col('.')
|
||||
@@ -375,6 +382,7 @@ function! LaTeXtoUnicode#Tab()
|
||||
endif
|
||||
" reset the in_fallback info
|
||||
let b:l2u_in_fallback = 0
|
||||
let b:l2u_tab_completing = 1
|
||||
" temporary change to completeopt to use the `longest` setting, which is
|
||||
" probably the only one which makes sense given that the goal of the
|
||||
" completion is to substitute the final string
|
||||
@@ -383,7 +391,8 @@ function! LaTeXtoUnicode#Tab()
|
||||
set completeopt-=noinsert
|
||||
" invoke omnicompletion; failure to perform LaTeX-to-Unicode completion is
|
||||
" handled by the CompleteDone autocommand.
|
||||
return "\<C-X>\<C-O>"
|
||||
call feedkeys("\<C-X>\<C-O>", 'n')
|
||||
return ""
|
||||
endfunction
|
||||
|
||||
" This function is called at every CompleteDone event, and is meant to handle
|
||||
@@ -409,7 +418,7 @@ function! LaTeXtoUnicode#FallbackCallback()
|
||||
endfunction
|
||||
|
||||
" This is the function that performs the substitution in command-line mode
|
||||
function! LaTeXtoUnicode#CmdTab(triggeredbytab)
|
||||
function! LaTeXtoUnicode#CmdTab(trigger)
|
||||
" first stage
|
||||
" analyse command line
|
||||
let col1 = getcmdpos() - 1
|
||||
@@ -418,10 +427,12 @@ function! LaTeXtoUnicode#CmdTab(triggeredbytab)
|
||||
let b:l2u_singlebslash = (match(l[0:col1-1], '\\$') >= 0)
|
||||
" completion not found
|
||||
if col0 == -1
|
||||
if a:triggeredbytab
|
||||
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
|
||||
return l
|
||||
return ''
|
||||
endif
|
||||
let base = l[col0 : col1-1]
|
||||
" search for matches
|
||||
@@ -430,39 +441,28 @@ function! LaTeXtoUnicode#CmdTab(triggeredbytab)
|
||||
for k in keys(g:l2u_symbols_dict)
|
||||
if k ==# base
|
||||
let exact_match = 1
|
||||
endif
|
||||
if len(k) >= len(base) && k[0 : len(base)-1] ==# base
|
||||
break
|
||||
elseif len(k) >= len(base) && k[0 : len(base)-1] ==# base
|
||||
call add(partmatches, k)
|
||||
endif
|
||||
endfor
|
||||
if len(partmatches) == 0
|
||||
if a:triggeredbytab
|
||||
call feedkeys("\<Tab>", 'nt') " fall-back to the default <Tab>
|
||||
if !exact_match && len(partmatches) == 0
|
||||
" no matches, call fallbacks
|
||||
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
|
||||
return l
|
||||
endif
|
||||
" exact matches are replaced with Unicode
|
||||
if exact_match
|
||||
elseif exact_match
|
||||
" exact matches are replaced with Unicode
|
||||
let unicode = g:l2u_symbols_dict[base]
|
||||
if col0 > 0
|
||||
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]
|
||||
call feedkeys(repeat("\b", len(base)) . unicode, 'nt')
|
||||
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
|
||||
let posdiff = col1-col0 - len(common)
|
||||
call setcmdpos(col1 - posdiff + 1)
|
||||
return pre . common . l[col1 : -1]
|
||||
return ''
|
||||
endfunction
|
||||
|
||||
" 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]
|
||||
endif
|
||||
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
|
||||
let b:l2u_cmdtab_set = 1
|
||||
endif
|
||||
@@ -637,6 +638,7 @@ function! LaTeXtoUnicode#Init(...)
|
||||
call s:L2U_SetTab(wait_insert_enter)
|
||||
call s:L2U_SetAutoSub(wait_insert_enter)
|
||||
call s:L2U_SetKeymap()
|
||||
return ''
|
||||
endfunction
|
||||
|
||||
function! LaTeXtoUnicode#Toggle()
|
||||
@@ -648,7 +650,7 @@ function! LaTeXtoUnicode#Toggle()
|
||||
call LaTeXtoUnicode#Enable()
|
||||
echo "LaTeX-to-Unicode enabled"
|
||||
endif
|
||||
return
|
||||
return ''
|
||||
endfunction
|
||||
|
||||
endif
|
||||
|
||||
@@ -1,11 +1,23 @@
|
||||
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
|
||||
endfunction
|
||||
|
||||
function! cargo#cmd(args)
|
||||
execute "! cargo" a:args
|
||||
function! cargo#cmd(args) abort
|
||||
" 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
|
||||
|
||||
function! s:nearest_cargo(...) abort
|
||||
@@ -57,6 +69,10 @@ function! cargo#build(args)
|
||||
call cargo#cmd("build " . a:args)
|
||||
endfunction
|
||||
|
||||
function! cargo#check(args)
|
||||
call cargo#cmd("check " . a:args)
|
||||
endfunction
|
||||
|
||||
function! cargo#clean(args)
|
||||
call cargo#cmd("clean " . a:args)
|
||||
endfunction
|
||||
@@ -86,6 +102,22 @@ function! cargo#bench(args)
|
||||
call cargo#cmd("bench " . a:args)
|
||||
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)
|
||||
let l:filename = expand('%:p')
|
||||
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
|
||||
|
||||
let s:save_cpo = &cpo
|
||||
set cpo&vim
|
||||
|
||||
let s:V = vital#crystal#new()
|
||||
let s:P = s:V.import('Process')
|
||||
let s:C = s:V.import('ColorEcho')
|
||||
|
||||
let s:IS_WINDOWS = has('win32')
|
||||
|
||||
if exists('*json_decode')
|
||||
function! s:decode_json(text) abort
|
||||
return json_decode(a:text)
|
||||
endfunction
|
||||
function! s:decode_json(text) abort
|
||||
return json_decode(a:text)
|
||||
endfunction
|
||||
else
|
||||
let s:J = s:V.import('Web.JSON')
|
||||
function! s:decode_json(text) abort
|
||||
return s:J.decode(a:text)
|
||||
endfunction
|
||||
let s:J = s:V.import('Web.JSON')
|
||||
function! s:decode_json(text) abort
|
||||
return s:J.decode(a:text)
|
||||
endfunction
|
||||
endif
|
||||
|
||||
function! s:echo_error(msg, ...) abort
|
||||
echohl ErrorMsg
|
||||
if a:0 == 0
|
||||
echomsg a:msg
|
||||
else
|
||||
echomsg call('printf', [a:msg] + a:000)
|
||||
endif
|
||||
echohl None
|
||||
echohl ErrorMsg
|
||||
if a:0 == 0
|
||||
echomsg a:msg
|
||||
else
|
||||
echomsg call('printf', [a:msg] + a:000)
|
||||
endif
|
||||
echohl None
|
||||
endfunction
|
||||
|
||||
function! s:run_cmd(cmd) abort
|
||||
if !executable(g:crystal_compiler_command)
|
||||
throw "vim-crystal: Error: '" . g:crystal_compiler_command . "' command is not found."
|
||||
endif
|
||||
return s:P.system(a:cmd)
|
||||
if !executable(g:crystal_compiler_command)
|
||||
throw "vim-crystal: Error: '" . g:crystal_compiler_command . "' command is not found."
|
||||
endif
|
||||
return s:P.system(a:cmd)
|
||||
endfunction
|
||||
|
||||
function! s:find_root_by(search_dir, d) abort
|
||||
let found_dir = finddir(a:search_dir, a:d . ';')
|
||||
if found_dir ==# ''
|
||||
return ''
|
||||
endif
|
||||
let found_dir = finddir(a:search_dir, a:d . ';')
|
||||
if found_dir ==# ''
|
||||
return ''
|
||||
endif
|
||||
|
||||
" Note: ':h:h' for {root}/{search_dir}/ -> {root}/{search_dir} -> {root}
|
||||
return fnamemodify(found_dir, ':p:h:h')
|
||||
" Note: ':h:h' for {root}/{search_dir}/ -> {root}/{search_dir} -> {root}
|
||||
return fnamemodify(found_dir, ':p:h:h')
|
||||
endfunction
|
||||
|
||||
" Search the root directory containing a 'spec/' and a 'src/' directories.
|
||||
@@ -51,294 +50,318 @@ endfunction
|
||||
" compiler has a 'cr_sources/src/spec/' directory that would otherwise give the root
|
||||
" directory as 'cr_source/src/' instead of 'cr_sources/'.
|
||||
function! s:find_root_by_spec_and_src(d) abort
|
||||
" Search for 'spec/'
|
||||
let root = s:find_root_by('spec', a:d)
|
||||
" Check that 'src/' is also there
|
||||
if root !=# '' && isdirectory(root . '/src')
|
||||
return root
|
||||
endif
|
||||
" Search for 'spec/'
|
||||
let root = s:find_root_by('spec', a:d)
|
||||
" Check that 'src/' is also there
|
||||
if root !=# '' && isdirectory(root . '/src')
|
||||
return root
|
||||
endif
|
||||
|
||||
" Search for 'src/'
|
||||
let root = s:find_root_by('src', a:d)
|
||||
" Check that 'spec/' is also there
|
||||
if root !=# '' && isdirectory(root . '/spec')
|
||||
return root
|
||||
endif
|
||||
" Search for 'src/'
|
||||
let root = s:find_root_by('src', a:d)
|
||||
" Check that 'spec/' is also there
|
||||
if root !=# '' && isdirectory(root . '/spec')
|
||||
return root
|
||||
endif
|
||||
|
||||
" Cannot find a directory containing both 'src/' and 'spec/'
|
||||
return ''
|
||||
" Cannot find a directory containing both 'src/' and 'spec/'
|
||||
return ''
|
||||
endfunction
|
||||
|
||||
function! crystal_lang#entrypoint_for(file_path) abort
|
||||
let parent_dir = fnamemodify(a:file_path, ':p:h')
|
||||
let root_dir = s:find_root_by_spec_and_src(parent_dir)
|
||||
if root_dir ==# ''
|
||||
" No spec directory found. No need to make temporary file
|
||||
return a:file_path
|
||||
endif
|
||||
let parent_dir = fnamemodify(a:file_path, ':p:h')
|
||||
let root_dir = s:find_root_by_spec_and_src(parent_dir)
|
||||
if root_dir ==# ''
|
||||
" No spec directory found. No need to make temporary file
|
||||
return a:file_path
|
||||
endif
|
||||
|
||||
let temp_name = root_dir . '/__vim-crystal-temporary-entrypoint-' . fnamemodify(a:file_path, ':t')
|
||||
let contents = [
|
||||
\ 'require "spec"',
|
||||
\ 'require "./spec/**"',
|
||||
\ printf('require "./%s"', fnamemodify(a:file_path, ':p')[strlen(root_dir)+1 : ])
|
||||
\ ]
|
||||
let required_spec_path = get(b:, 'crystal_required_spec_path', get(g:, 'crystal_required_spec_path', ''))
|
||||
if required_spec_path !=# ''
|
||||
let require_spec_str = './' . required_spec_path
|
||||
else
|
||||
let require_spec_str = './spec/**'
|
||||
endif
|
||||
|
||||
let result = writefile(contents, temp_name)
|
||||
if result == -1
|
||||
" Note: When writefile() failed
|
||||
return a:file_path
|
||||
endif
|
||||
let temp_name = root_dir . '/__vim-crystal-temporary-entrypoint-' . fnamemodify(a:file_path, ':t')
|
||||
let contents = [
|
||||
\ 'require "spec"',
|
||||
\ 'require "' . require_spec_str . '"',
|
||||
\ printf('require "./%s"', fnamemodify(a:file_path, ':p')[strlen(root_dir)+1 : ])
|
||||
\ ]
|
||||
|
||||
return temp_name
|
||||
let result = writefile(contents, temp_name)
|
||||
if result == -1
|
||||
" Note: When writefile() failed
|
||||
return a:file_path
|
||||
endif
|
||||
|
||||
return temp_name
|
||||
endfunction
|
||||
|
||||
function! crystal_lang#tool(name, file, pos, option_str) abort
|
||||
let entrypoint = crystal_lang#entrypoint_for(a:file)
|
||||
let cmd = printf(
|
||||
\ '%s tool %s --no-color %s --cursor %s:%d:%d %s',
|
||||
\ g:crystal_compiler_command,
|
||||
\ a:name,
|
||||
\ a:option_str,
|
||||
\ a:file,
|
||||
\ a:pos[1],
|
||||
\ a:pos[2],
|
||||
\ entrypoint
|
||||
\ )
|
||||
let entrypoint = crystal_lang#entrypoint_for(a:file)
|
||||
let cmd = printf(
|
||||
\ '%s tool %s --no-color %s --cursor %s:%d:%d %s',
|
||||
\ g:crystal_compiler_command,
|
||||
\ a:name,
|
||||
\ a:option_str,
|
||||
\ a:file,
|
||||
\ a:pos[1],
|
||||
\ a:pos[2],
|
||||
\ entrypoint
|
||||
\ )
|
||||
|
||||
try
|
||||
let output = s:run_cmd(cmd)
|
||||
return {'failed': s:P.get_last_status(), 'output': output}
|
||||
finally
|
||||
" Note:
|
||||
" If the entry point is temporary file, delete it finally.
|
||||
if a:file !=# entrypoint
|
||||
call delete(entrypoint)
|
||||
endif
|
||||
endtry
|
||||
try
|
||||
let output = s:run_cmd(cmd)
|
||||
return {'failed': s:P.get_last_status(), 'output': output}
|
||||
finally
|
||||
" Note:
|
||||
" If the entry point is temporary file, delete it finally.
|
||||
if a:file !=# entrypoint
|
||||
call delete(entrypoint)
|
||||
endif
|
||||
endtry
|
||||
endfunction
|
||||
|
||||
" `pos` is assumed a returned value from getpos()
|
||||
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
|
||||
|
||||
function! s:jump_to_impl(impl) abort
|
||||
execute 'edit' a:impl.filename
|
||||
call cursor(a:impl.line, a:impl.column)
|
||||
execute 'edit' a:impl.filename
|
||||
call cursor(a:impl.line, a:impl.column)
|
||||
endfunction
|
||||
|
||||
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')
|
||||
if cmd_result.failed
|
||||
return s:echo_error(cmd_result.output)
|
||||
endif
|
||||
let cmd_result = crystal_lang#impl(a:file, a:pos, '--format json')
|
||||
if cmd_result.failed
|
||||
return s:echo_error(cmd_result.output)
|
||||
endif
|
||||
|
||||
let impl = s:decode_json(cmd_result.output)
|
||||
if impl.status !=# 'ok'
|
||||
return s:echo_error(impl.message)
|
||||
endif
|
||||
let impl = s:decode_json(cmd_result.output)
|
||||
if impl.status !=# 'ok'
|
||||
return s:echo_error(impl.message)
|
||||
endif
|
||||
|
||||
if len(impl.implementations) == 1
|
||||
call s:jump_to_impl(impl.implementations[0])
|
||||
return
|
||||
endif
|
||||
if len(impl.implementations) == 1
|
||||
call s:jump_to_impl(impl.implementations[0])
|
||||
return
|
||||
endif
|
||||
|
||||
let message = "Multiple definitions detected. Choose a number\n\n"
|
||||
for idx in range(len(impl.implementations))
|
||||
let i = impl.implementations[idx]
|
||||
let message .= printf("[%d] %s:%d:%d\n", idx, i.filename, i.line, i.column)
|
||||
endfor
|
||||
let message .= "\n"
|
||||
let idx = str2nr(input(message, "\n> "))
|
||||
call s:jump_to_impl(impl.implementations[idx])
|
||||
let message = "Multiple definitions detected. Choose a number\n\n"
|
||||
for idx in range(len(impl.implementations))
|
||||
let i = impl.implementations[idx]
|
||||
let message .= printf("[%d] %s:%d:%d\n", idx, i.filename, i.line, i.column)
|
||||
endfor
|
||||
let message .= "\n"
|
||||
let idx = str2nr(input(message, "\n> "))
|
||||
call s:jump_to_impl(impl.implementations[idx])
|
||||
endfunction
|
||||
|
||||
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
|
||||
|
||||
function! crystal_lang#type_hierarchy(file, option_str) abort
|
||||
let cmd = printf(
|
||||
\ '%s tool hierarchy --no-color %s %s',
|
||||
\ g:crystal_compiler_command,
|
||||
\ a:option_str,
|
||||
\ a:file
|
||||
\ )
|
||||
let cmd = printf(
|
||||
\ '%s tool hierarchy --no-color %s %s',
|
||||
\ g:crystal_compiler_command,
|
||||
\ a:option_str,
|
||||
\ a:file
|
||||
\ )
|
||||
|
||||
return s:run_cmd(cmd)
|
||||
return s:run_cmd(cmd)
|
||||
endfunction
|
||||
|
||||
function! s:find_completion_start() abort
|
||||
let c = col('.')
|
||||
if c <= 1
|
||||
return -1
|
||||
endif
|
||||
let c = col('.')
|
||||
if c <= 1
|
||||
return -1
|
||||
endif
|
||||
|
||||
let line = getline('.')[:c-2]
|
||||
return match(line, '\w\+$')
|
||||
let line = getline('.')[:c-2]
|
||||
return match(line, '\w\+$')
|
||||
endfunction
|
||||
|
||||
function! crystal_lang#complete(findstart, base) abort
|
||||
if a:findstart
|
||||
return s:find_completion_start()
|
||||
endif
|
||||
if a:findstart
|
||||
return s:find_completion_start()
|
||||
endif
|
||||
|
||||
let cmd_result = crystal_lang#context(expand('%'), getpos('.'), '--format json')
|
||||
if cmd_result.failed
|
||||
return
|
||||
endif
|
||||
let cmd_result = crystal_lang#context(expand('%'), getpos('.'), '--format json')
|
||||
if cmd_result.failed
|
||||
return
|
||||
endif
|
||||
|
||||
let contexts = s:decode_json(cmd_result.output)
|
||||
if contexts.status !=# 'ok'
|
||||
return
|
||||
endif
|
||||
let contexts = s:decode_json(cmd_result.output)
|
||||
if contexts.status !=# 'ok'
|
||||
return
|
||||
endif
|
||||
|
||||
let candidates = []
|
||||
let candidates = []
|
||||
|
||||
for c in contexts.contexts
|
||||
for [name, desc] in items(c)
|
||||
let candidates += [{
|
||||
\ 'word': name,
|
||||
\ 'menu': ': ' . desc . ' [var]',
|
||||
\ }]
|
||||
endfor
|
||||
for c in contexts.contexts
|
||||
for [name, desc] in items(c)
|
||||
let candidates += [{
|
||||
\ 'word': name,
|
||||
\ 'menu': ': ' . desc . ' [var]',
|
||||
\ }]
|
||||
endfor
|
||||
endfor
|
||||
|
||||
return candidates
|
||||
return candidates
|
||||
endfunction
|
||||
|
||||
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
|
||||
if base =~# '_spec$'
|
||||
let parent = fnamemodify(substitute(a:absolute_path, '/spec/', '/src/', ''), ':h')
|
||||
return parent . '/' . matchstr(base, '.\+\ze_spec$') . '.cr'
|
||||
else
|
||||
let parent = fnamemodify(substitute(a:absolute_path, '/src/', '/spec/', ''), ':h')
|
||||
return parent . '/' . base . '_spec.cr'
|
||||
endif
|
||||
" TODO: Make cleverer
|
||||
if base =~# '_spec$'
|
||||
let parent = fnamemodify(substitute(a:absolute_path, '/spec/', '/src/', ''), ':h')
|
||||
return parent . '/' . matchstr(base, '.\+\ze_spec$') . '.cr'
|
||||
else
|
||||
let parent = fnamemodify(substitute(a:absolute_path, '/src/', '/spec/', ''), ':h')
|
||||
return parent . '/' . base . '_spec.cr'
|
||||
endif
|
||||
endfunction
|
||||
|
||||
function! crystal_lang#switch_spec_file(...) abort
|
||||
let path = a:0 == 0 ? expand('%:p') : fnamemodify(a:1, ':p')
|
||||
if path !~# '.cr$'
|
||||
return s:echo_error('Not crystal source file: ' . path)
|
||||
endif
|
||||
let path = a:0 == 0 ? expand('%:p') : fnamemodify(a:1, ':p')
|
||||
if path !~# '.cr$'
|
||||
return s:echo_error('Not crystal source file: ' . path)
|
||||
endif
|
||||
|
||||
execute 'edit!' crystal_lang#get_spec_switched_path(path)
|
||||
execute 'edit!' crystal_lang#get_spec_switched_path(path)
|
||||
endfunction
|
||||
|
||||
function! s:run_spec(root, path, ...) abort
|
||||
" Note:
|
||||
" `crystal spec` can't understand absolute path.
|
||||
let cmd = printf(
|
||||
\ '%s spec %s%s',
|
||||
\ g:crystal_compiler_command,
|
||||
\ a:path,
|
||||
\ a:0 == 0 ? '' : (':' . a:1)
|
||||
\ )
|
||||
" Note:
|
||||
" `crystal spec` can't understand absolute path.
|
||||
let cmd = printf(
|
||||
\ '%s spec %s%s',
|
||||
\ g:crystal_compiler_command,
|
||||
\ a:path,
|
||||
\ a:0 == 0 ? '' : (':' . a:1)
|
||||
\ )
|
||||
|
||||
let saved_cwd = getcwd()
|
||||
let cd = haslocaldir() ? 'lcd' : 'cd'
|
||||
try
|
||||
execute cd a:root
|
||||
call s:C.echo(s:run_cmd(cmd))
|
||||
finally
|
||||
execute cd saved_cwd
|
||||
endtry
|
||||
let saved_cwd = getcwd()
|
||||
let cd = haslocaldir() ? 'lcd' : 'cd'
|
||||
try
|
||||
execute cd a:root
|
||||
call s:C.echo(s:run_cmd(cmd))
|
||||
finally
|
||||
execute cd saved_cwd
|
||||
endtry
|
||||
endfunction
|
||||
|
||||
function! crystal_lang#run_all_spec(...) abort
|
||||
let path = a:0 == 0 ? expand('%:p:h') : a:1
|
||||
let root_path = s:find_root_by_spec_and_src(path)
|
||||
if root_path ==# ''
|
||||
return s:echo_error("'spec' directory is not found")
|
||||
endif
|
||||
call s:run_spec(root_path, 'spec')
|
||||
let path = a:0 == 0 ? expand('%:p:h') : a:1
|
||||
let root_path = s:find_root_by_spec_and_src(path)
|
||||
if root_path ==# ''
|
||||
return s:echo_error("'spec' directory is not found")
|
||||
endif
|
||||
call s:run_spec(root_path, 'spec')
|
||||
endfunction
|
||||
|
||||
function! crystal_lang#run_current_spec(...) abort
|
||||
" /foo/bar/src/poyo.cr
|
||||
let path = a:0 == 0 ? expand('%:p') : fnamemodify(a:1, ':p')
|
||||
if path !~# '.cr$'
|
||||
return s:echo_error('Not crystal source file: ' . path)
|
||||
endif
|
||||
|
||||
" /foo/bar/src
|
||||
let source_dir = fnamemodify(path, ':h')
|
||||
|
||||
" /foo/bar
|
||||
let root_dir = s:find_root_by_spec_and_src(source_dir)
|
||||
if root_dir ==# ''
|
||||
return s:echo_error("Root directory with 'src/' and 'spec/' not found")
|
||||
endif
|
||||
|
||||
" src
|
||||
let rel_path = source_dir[strlen(root_dir)+1 : ]
|
||||
|
||||
if path =~# '_spec.cr$'
|
||||
call s:run_spec(root_dir, path[strlen(root_dir)+1 : ], line('.'))
|
||||
else
|
||||
let spec_path = substitute(rel_path, '^src', 'spec', '') . '/' . fnamemodify(path, ':t:r') . '_spec.cr'
|
||||
if !filereadable(root_dir . '/' . spec_path)
|
||||
return s:echo_error('Error: Could not find a spec source corresponding to ' . path)
|
||||
endif
|
||||
call s:run_spec(root_dir, spec_path)
|
||||
" /foo/bar/src/poyo.cr
|
||||
let path = a:0 == 0 ? expand('%:p') : fnamemodify(a:1, ':p')
|
||||
if path !~# '.cr$'
|
||||
return s:echo_error('Not crystal source file: ' . path)
|
||||
endif
|
||||
|
||||
" /foo/bar/src
|
||||
let source_dir = fnamemodify(path, ':h')
|
||||
|
||||
" /foo/bar
|
||||
let root_dir = s:find_root_by_spec_and_src(source_dir)
|
||||
if root_dir ==# ''
|
||||
return s:echo_error("Root directory with 'src/' and 'spec/' not found")
|
||||
endif
|
||||
|
||||
" src
|
||||
let rel_path = source_dir[strlen(root_dir)+1 : ]
|
||||
|
||||
if path =~# '_spec.cr$'
|
||||
call s:run_spec(root_dir, path[strlen(root_dir)+1 : ], line('.'))
|
||||
else
|
||||
let spec_path = substitute(rel_path, '^src', 'spec', '') . '/' . fnamemodify(path, ':t:r') . '_spec.cr'
|
||||
if !filereadable(root_dir . '/' . spec_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
|
||||
endfunction
|
||||
|
||||
function! crystal_lang#format_string(code, ...) abort
|
||||
let cmd = printf(
|
||||
\ '%s tool format --no-color %s -',
|
||||
\ g:crystal_compiler_command,
|
||||
\ get(a:, 1, '')
|
||||
\ )
|
||||
let output = s:P.system(cmd, a:code)
|
||||
if s:P.get_last_status()
|
||||
throw 'vim-crystal: Error on formatting: ' . output
|
||||
endif
|
||||
return output
|
||||
if s:IS_WINDOWS
|
||||
let redirect = '2> nul'
|
||||
else
|
||||
let redirect = '2>/dev/null'
|
||||
endif
|
||||
let cmd = printf(
|
||||
\ '%s tool format --no-color %s - %s',
|
||||
\ g:crystal_compiler_command,
|
||||
\ get(a:, 1, ''),
|
||||
\ 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
|
||||
|
||||
" crystal_lang#format(option_str [, on_save])
|
||||
function! crystal_lang#format(option_str, ...) abort
|
||||
if !executable(g:crystal_compiler_command)
|
||||
" Finish command silently
|
||||
return
|
||||
let on_save = a:0 > 0 ? a:1 : 0
|
||||
|
||||
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
|
||||
|
||||
let on_save = a:0 > 0 ? a:1 : 0
|
||||
|
||||
let before = join(getline(1, '$'), "\n")
|
||||
let before = join(getline(1, '$'), "\n")
|
||||
try
|
||||
let formatted = crystal_lang#format_string(before, a:option_str)
|
||||
if !on_save
|
||||
let after = substitute(formatted, '\n$', '', '')
|
||||
if before ==# after
|
||||
return
|
||||
endif
|
||||
endif
|
||||
catch /^vim-crystal: /
|
||||
echohl ErrorMsg
|
||||
echomsg v:exception . ': Your code was not formatted. Exception was thrown at ' . v:throwpoint
|
||||
echohl None
|
||||
return
|
||||
endtry
|
||||
|
||||
let view_save = winsaveview()
|
||||
let pos_save = getpos('.')
|
||||
let lines = split(formatted, '\n')
|
||||
silent! undojoin
|
||||
if line('$') > len(lines)
|
||||
execute len(lines) . ',$delete' '_'
|
||||
if !on_save
|
||||
let after = substitute(formatted, '\n$', '', '')
|
||||
if before ==# after
|
||||
return
|
||||
endif
|
||||
call setline(1, lines)
|
||||
call winrestview(view_save)
|
||||
call setpos('.', pos_save)
|
||||
endif
|
||||
|
||||
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
|
||||
|
||||
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
|
||||
|
||||
let &cpo = s:save_cpo
|
||||
unlet s:save_cpo
|
||||
" vim: sw=2 sts=2 et:
|
||||
|
||||
endif
|
||||
|
||||
@@ -69,6 +69,10 @@ fu! csv#Init(start, end, ...) "{{{3
|
||||
else
|
||||
let b:csv_cmt = split(g:csv_comment, '%s')
|
||||
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")
|
||||
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
|
||||
if b:delimiter=="\t" && has("vartabs")&& !exists("b:csv_fixed_width_cols")
|
||||
if get(b:, 'col_width', []) ==# []
|
||||
call csv#CalculateColumnWidth('')
|
||||
call csv#CalculateColumnWidth(line('$'), 1)
|
||||
endif
|
||||
let &l:vts=join(b:col_width, ',')
|
||||
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
|
||||
" even if :Arrange Col has been used #100
|
||||
return '^' . csv#GetColPat(a:colnr - 1,0) .
|
||||
\ '\s*\zs' . a:pat . '\ze' . (a:allowmore ? '' : '$')
|
||||
\ '.*\zs' . a:pat . '\ze' . (a:allowmore ? '' : '$')
|
||||
else
|
||||
return '\%' . b:csv_fixed_width_cols[-1] .
|
||||
\ 'c\zs' . a:pat . '\ze' . (a:allowmore ? '' : '$')
|
||||
@@ -500,7 +504,7 @@ fu! csv#WColumn(...) "{{{3
|
||||
" Return on which column the cursor is
|
||||
let _cur = getpos('.')
|
||||
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
|
||||
" line is empty
|
||||
let line = getline(line('.')-1)
|
||||
@@ -574,7 +578,7 @@ fu! csv#MaxColumns(...) "{{{3
|
||||
return len(b:csv_fixed_width_cols)
|
||||
endif
|
||||
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
|
||||
"
|
||||
" 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_list")
|
||||
" only check first 10000 lines, to be faster
|
||||
let last = line('$')
|
||||
if exists("a:1") && !empty(a:1)
|
||||
let last = a:1
|
||||
endif
|
||||
let last = a:row
|
||||
if !get(b:, 'csv_arrange_use_all_rows', 0)
|
||||
if 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
|
||||
let b:csv_list=getline(skipfirst+1,last)
|
||||
@@ -636,8 +639,12 @@ fu! csv#ArrangeCol(first, last, bang, limit, ...) range "{{{3
|
||||
return
|
||||
endif
|
||||
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
|
||||
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 && exists("b:col_width")
|
||||
" Unarrange, so that if csv_arrange_align has changed
|
||||
@@ -671,7 +678,7 @@ fu! csv#ArrangeCol(first, last, bang, limit, ...) range "{{{3
|
||||
endif
|
||||
|
||||
if !exists("b:col_width")
|
||||
call csv#CalculateColumnWidth(row)
|
||||
call csv#CalculateColumnWidth(row, 1)
|
||||
endif
|
||||
|
||||
" abort on empty file
|
||||
@@ -750,11 +757,15 @@ fu! csv#UnArrangeCol(match) "{{{3
|
||||
" Strip leading white space, also trims empty recordcsv#
|
||||
return substitute(a:match, '\%(^ \+\)\|\%( \+\ze'.b:delimiter. '\?$\)', '', 'g')
|
||||
endfu
|
||||
fu! csv#CalculateColumnWidth(row) "{{{3
|
||||
fu! csv#CalculateColumnWidth(row, silent) "{{{3
|
||||
" Internal function, not called from external,
|
||||
" does not work with fixed width columns
|
||||
" row for the row for which to calculate the width
|
||||
let b:col_width=[]
|
||||
if has( 'vartabs' ) && b:delimiter == "\t"
|
||||
let vts_save=&vts
|
||||
set vts=
|
||||
endif
|
||||
try
|
||||
if exists("b:csv_headerline")
|
||||
if line('.') < b:csv_headerline
|
||||
@@ -763,7 +774,7 @@ fu! csv#CalculateColumnWidth(row) "{{{3
|
||||
endif
|
||||
let s:max_cols=csv#MaxColumns(line('.'))
|
||||
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
|
||||
catch /csv:no_col/
|
||||
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,
|
||||
" this was only necessary for calculating the max width
|
||||
unlet! b:csv_list s:columnize_count s:decimal_column
|
||||
if has( 'vartabs' ) && b:delimiter == "\t"
|
||||
let &vts=vts_save
|
||||
endif
|
||||
endfu
|
||||
fu! csv#Columnize(field) "{{{3
|
||||
" Internal function, not called from external,
|
||||
@@ -1053,7 +1067,7 @@ fu! csv#MoveCol(forward, line, ...) "{{{3
|
||||
let maxcol=csv#MaxColumns(line('.'))
|
||||
let cpos=getpos('.')[2]
|
||||
if !exists("b:csv_fixed_width_cols")
|
||||
let curwidth=CSVWidth()
|
||||
let curwidth=CSVWidth(1)
|
||||
call search(b:col, 'bc', line('.'))
|
||||
endif
|
||||
let spos=getpos('.')[2]
|
||||
@@ -1146,7 +1160,7 @@ fu! csv#MoveCol(forward, line, ...) "{{{3
|
||||
" leave the column (if the next column is shorter)
|
||||
if !exists("b:csv_fixed_width_cols")
|
||||
let a = getpos('.')
|
||||
if CSVWidth() == curwidth
|
||||
if CSVWidth(1) == curwidth
|
||||
let a[2]+= cpos-spos
|
||||
endif
|
||||
else
|
||||
@@ -1159,7 +1173,7 @@ fu! csv#MoveCol(forward, line, ...) "{{{3
|
||||
" Move to the correct screen column
|
||||
if !exists("b:csv_fixed_width_cols")
|
||||
let a = getpos('.')
|
||||
if CSVWidth() == curwidth
|
||||
if CSVWidth(1) == curwidth
|
||||
let a[2]+= cpos-spos
|
||||
endif
|
||||
else
|
||||
@@ -1493,10 +1507,10 @@ fu! csv#AvgColumn(list) "{{{3
|
||||
endfor
|
||||
if has("float")
|
||||
let b:csv_result = printf("%.2f", sum/cnt)
|
||||
return b:csv_result
|
||||
return str2float(b:csv_result)
|
||||
else
|
||||
let b:csv_result = printf("%s", sum/cnt)
|
||||
return sum/cnt
|
||||
return b:csv_result + 0
|
||||
endif
|
||||
endif
|
||||
endfu
|
||||
@@ -1529,7 +1543,7 @@ fu! csv#VarianceColumn(list, is_population) "{{{3
|
||||
let cnt = cnt-1
|
||||
endif
|
||||
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
|
||||
else
|
||||
let b:csv_result = printf("%s", sum/cnt)
|
||||
@@ -1835,7 +1849,7 @@ fu! csv#ProcessFieldValue(field) "{{{3
|
||||
|
||||
if a == b:delimiter
|
||||
try
|
||||
let a=repeat(' ', csv#ColWidth(col))
|
||||
let a=repeat(' ', csv#ColWidth(col, line('$'), 1))
|
||||
catch
|
||||
" no-op
|
||||
endtry
|
||||
@@ -1942,8 +1956,12 @@ fu! csv#CheckHeaderLine() "{{{3
|
||||
endfu
|
||||
fu! csv#AnalyzeColumn(...) "{{{3
|
||||
let maxcolnr = csv#MaxColumns()
|
||||
if len(a:000) == 1
|
||||
let topn = 5
|
||||
if len(a:000) > 0
|
||||
let colnr = a:1
|
||||
if len(a:000) == 2
|
||||
let topn = a:2
|
||||
endif
|
||||
else
|
||||
let colnr = csv#WColumn()
|
||||
endif
|
||||
@@ -1971,8 +1989,8 @@ fu! csv#AnalyzeColumn(...) "{{{3
|
||||
let max_items = reverse(sort(values(res), s:csv_numeric_sort ? 'n' : 'csv#CSVSortValues'))
|
||||
" What about the minimum 5 items?
|
||||
let count_items = keys(res)
|
||||
if len(max_items) > 5
|
||||
call remove(max_items, 5, -1)
|
||||
if len(max_items) > topn
|
||||
call remove(max_items, topn, -1)
|
||||
call map(max_items, 'printf(''\V%s\m'', escape(v:val, ''\\''))')
|
||||
call filter(res, 'v:val =~ ''^''.join(max_items, ''\|'').''$''')
|
||||
endif
|
||||
@@ -2134,7 +2152,7 @@ fu! csv#NewRecord(line1, line2, count) "{{{3
|
||||
if !exists("b:col_width")
|
||||
" Best guess width
|
||||
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)
|
||||
else
|
||||
let record .= printf("%20s", b:delimiter)
|
||||
@@ -2249,7 +2267,7 @@ fu! csv#CommandDefinitions() "{{{3
|
||||
\ ':echo csv#EvalColumn(<q-args>, "csv#SmplStdDevColumn", <line1>,<line2>)',
|
||||
\ '-nargs=? -range=% -complete=custom,csv#SortComplete')
|
||||
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')
|
||||
call csv#LocalCmd("UnArrangeColumn",
|
||||
\':call csv#PrepUnArrangeCol(<line1>, <line2>)',
|
||||
@@ -2297,8 +2315,8 @@ fu! csv#CommandDefinitions() "{{{3
|
||||
\ '-bang -nargs=? -range=%')
|
||||
call csv#LocalCmd("Filters", ':call csv#OutputFilters(<bang>0)',
|
||||
\ '-nargs=0 -bang')
|
||||
call csv#LocalCmd("Analyze", ':call csv#AnalyzeColumn(<args>)',
|
||||
\ '-nargs=?')
|
||||
call csv#LocalCmd("Analyze", ':call csv#AnalyzeColumn(<f-args>)',
|
||||
\ '-nargs=*' )
|
||||
call csv#LocalCmd("VertFold", ':call csv#Vertfold(<bang>0,<q-args>)',
|
||||
\ '-bang -nargs=? -range=% -complete=custom,csv#SortComplete')
|
||||
call csv#LocalCmd("CSVFixed", ':call csv#InitCSVFixedWidth()', '')
|
||||
@@ -2332,7 +2350,7 @@ fu! csv#ColumnWidth()
|
||||
endfu
|
||||
|
||||
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>' : '')
|
||||
if !get(g:, "csv_nomap_". tolower(keyname), 0)
|
||||
" All mappings are buffer local
|
||||
@@ -3145,7 +3163,9 @@ fu! CSVCount(col, fmt, first, last, ...) "{{{3
|
||||
unlet! s:additional['distinct']
|
||||
return (empty(result) ? 0 : result)
|
||||
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
|
||||
if exists("b:csv_fixed_width_cols")
|
||||
let c = getline(1,'$')
|
||||
@@ -3164,7 +3184,7 @@ fu! CSVWidth() "{{{3
|
||||
" Add width for last column
|
||||
call add(width, max-y+1)
|
||||
else
|
||||
call csv#CalculateColumnWidth('')
|
||||
call csv#CalculateColumnWidth(line('$'), silent)
|
||||
let width=map(copy(b:col_width), 'v:val-1')
|
||||
endif
|
||||
return width
|
||||
|
||||
@@ -27,62 +27,61 @@ function! s:clearQfList(reason) abort
|
||||
endif
|
||||
endfunction
|
||||
|
||||
function! dart#fmt(q_args) abort
|
||||
if executable('dartfmt')
|
||||
let buffer_content = join(getline(1, '$'), "\n")
|
||||
let args = '--stdin-name '.expand('%').' '.a:q_args
|
||||
let joined_lines = system(printf('dartfmt %s', args), buffer_content)
|
||||
if buffer_content ==# joined_lines[:-2]
|
||||
call s:clearQfList('dartfmt')
|
||||
return
|
||||
endif
|
||||
if 0 == v:shell_error
|
||||
let win_view = winsaveview()
|
||||
let lines = split(joined_lines, "\n")
|
||||
silent keepjumps call setline(1, lines)
|
||||
if line('$') > len(lines)
|
||||
silent keepjumps execute string(len(lines)+1).',$ delete'
|
||||
endif
|
||||
call winrestview(win_view)
|
||||
call s:clearQfList('dartfmt')
|
||||
else
|
||||
let errors = split(joined_lines, "\n")[2:]
|
||||
let error_format = '%Aline %l\, column %c of %f: %m,%C%.%#'
|
||||
call s:cexpr(error_format, errors, 'dartfmt')
|
||||
endif
|
||||
else
|
||||
call s:error('cannot execute binary file: dartfmt')
|
||||
function! dart#fmt(...) abort
|
||||
let l:dartfmt = s:FindDartFmt()
|
||||
if type(l:dartfmt) != type('') | return | endif
|
||||
let buffer_content = getline(1, '$')
|
||||
let l:cmd = [l:dartfmt, '--stdin-name', shellescape(expand('%'))]
|
||||
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
|
||||
" tool no longer emits this line on SDK upgrades.
|
||||
if lines[-1] ==# 'Isolate creation failed'
|
||||
let lines = lines[:-2]
|
||||
endif
|
||||
if buffer_content == lines
|
||||
call s:clearQfList('dartfmt')
|
||||
return
|
||||
endif
|
||||
if 0 == v:shell_error
|
||||
let win_view = winsaveview()
|
||||
silent keepjumps call setline(1, lines)
|
||||
if line('$') > len(lines)
|
||||
silent keepjumps execute string(len(lines)+1).',$ delete'
|
||||
endif
|
||||
call winrestview(win_view)
|
||||
call s:clearQfList('dartfmt')
|
||||
else
|
||||
let errors = lines[2:]
|
||||
let error_format = '%Aline %l\, column %c of %f: %m,%C%.%#'
|
||||
call s:cexpr(error_format, errors, 'dartfmt')
|
||||
endif
|
||||
endfunction
|
||||
|
||||
function! s:FindDartFmt() abort
|
||||
if executable('dartfmt') | return 'dartfmt' | endif
|
||||
if executable('flutter')
|
||||
let l:flutter_cmd = resolve(exepath('flutter'))
|
||||
let l:bin = fnamemodify(l:flutter_cmd, ':h')
|
||||
let l:dartfmt = l:bin.'/cache/dart-sdk/bin/dartfmt'
|
||||
if executable(l:dartfmt) | return l:dartfmt | endif
|
||||
endif
|
||||
call s:error('Cannot find a `dartfmt` command')
|
||||
endfunction
|
||||
|
||||
function! dart#analyzer(q_args) abort
|
||||
if executable('dartanalyzer')
|
||||
let path = expand('%:p:gs:\:/:')
|
||||
if filereadable(path)
|
||||
let command = printf('dartanalyzer %s %s', a:q_args, shellescape(path))
|
||||
let lines = systemlist(command)
|
||||
call s:cexpr('%m (%f\, line %l\, col %c)', lines, 'dartanalyzer')
|
||||
else
|
||||
call s:error(printf('cannot read a file: "%s"', path))
|
||||
endif
|
||||
else
|
||||
call s:error('cannot execute binary file: dartanalyzer')
|
||||
endif
|
||||
call s:error('DartAnalyzer support has been removed. '.
|
||||
\'If this broke your workflow please comment on '.
|
||||
\'https://github.com/dart-lang/dart-vim-plugin/issues/89')
|
||||
endfunction
|
||||
|
||||
function! dart#tojs(q_args) abort
|
||||
if executable('dart2js')
|
||||
let path = expand('%:p:gs:\:/:')
|
||||
if filereadable(path)
|
||||
let command = printf('dart2js %s %s', a:q_args, shellescape(path))
|
||||
let lines = systemlist(command)
|
||||
call s:cexpr('%m (%f\, line %l\, col %c)', lines, 'dart2js')
|
||||
else
|
||||
call s:error(printf('cannot read a file: "%s"', path))
|
||||
endif
|
||||
else
|
||||
call s:error('cannot execute binary file: dartanalyzer')
|
||||
endif
|
||||
call s:error('Dart2JS support has been removed. '.
|
||||
\'If this broke your workflow please comment on '.
|
||||
\'https://github.com/dart-lang/dart-vim-plugin/issues/89')
|
||||
endfunction
|
||||
|
||||
" Finds the path to `uri`.
|
||||
@@ -91,7 +90,7 @@ endfunction
|
||||
" If the path cannot be resolved, or is not a package: uri, returns the
|
||||
" original.
|
||||
function! dart#resolveUri(uri) abort
|
||||
if a:uri !~ 'package:'
|
||||
if a:uri !~# 'package:'
|
||||
return a:uri
|
||||
endif
|
||||
let package_name = substitute(a:uri, 'package:\(\w\+\)\/.*', '\1', '')
|
||||
@@ -123,20 +122,20 @@ function! s:PackageMap() abort
|
||||
let lines = readfile(dot_packages)
|
||||
let map = {}
|
||||
for line in lines
|
||||
if line =~ '\s*#'
|
||||
if line =~# '\s*#'
|
||||
continue
|
||||
endif
|
||||
let package = substitute(line, ':.*$', '', '')
|
||||
let lib_dir = substitute(line, '^[^:]*:', '', '')
|
||||
if lib_dir =~ 'file:/'
|
||||
if 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:]
|
||||
endif
|
||||
else
|
||||
let lib_dir = resolve(dot_packages_dir.'/'.lib_dir)
|
||||
endif
|
||||
if lib_dir =~ '/$'
|
||||
if lib_dir =~# '/$'
|
||||
let lib_dir = lib_dir[:len(lib_dir) - 2]
|
||||
endif
|
||||
let map[package] = lib_dir
|
||||
@@ -146,7 +145,7 @@ endfunction
|
||||
|
||||
" Toggle whether dartfmt is run on save or not.
|
||||
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
|
||||
return
|
||||
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
|
||||
|
||||
function! fish#Indent()
|
||||
let l:shiftwidth = shiftwidth()
|
||||
let l:prevlnum = prevnonblank(v:lnum - 1)
|
||||
if l:prevlnum ==# 0
|
||||
return 0
|
||||
endif
|
||||
let l:indent = 0
|
||||
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)
|
||||
if l:line =~# '\v^\s*end>'
|
||||
return indent(l:prevlnum) - (l:indent ==# 0 ? l:shiftwidth : l:indent)
|
||||
elseif l:line =~# '\v^\s*%(case|else)>'
|
||||
return indent(l:prevlnum) - l:shiftwidth
|
||||
let l:shiftwidth = shiftwidth()
|
||||
let l:previndent = indent(l:prevlnum)
|
||||
let l:indent = l:previndent
|
||||
if l:prevline =~# '\v^\s*%(begin|if|else|while|for|function|switch|case)>'
|
||||
let l:indent += l:shiftwidth
|
||||
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
|
||||
|
||||
function! fish#Format()
|
||||
@@ -54,7 +72,7 @@ function! fish#Complete(findstart, base)
|
||||
let l:completions =
|
||||
\ system('fish -c "complete -C'.shellescape(a:base).'"')
|
||||
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')
|
||||
call add(l:results, {'word': l:cmd.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
|
||||
@@ -60,7 +60,10 @@ function! go#config#SetTermCloseOnExit(value) abort
|
||||
endfunction
|
||||
|
||||
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
|
||||
|
||||
function! go#config#SetTermEnabled(value) abort
|
||||
@@ -84,7 +87,18 @@ function! go#config#StatuslineDuration() abort
|
||||
endfunction
|
||||
|
||||
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
|
||||
|
||||
function! go#config#PlayBrowserCommand() abort
|
||||
@@ -151,30 +165,13 @@ function! go#config#SetGuruScope(scope) abort
|
||||
endif
|
||||
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
|
||||
return get(g:, 'go_echo_command_info', 1)
|
||||
endfunction
|
||||
|
||||
function! go#config#DocUrl() abort
|
||||
let godoc_url = get(g:, 'go_doc_url', 'https://godoc.org')
|
||||
if godoc_url isnot 'https://godoc.org'
|
||||
let godoc_url = get(g:, 'go_doc_url', 'https://pkg.go.dev')
|
||||
if godoc_url isnot 'https://pkg.go.dev'
|
||||
" strip last '/' character if available
|
||||
let last_char = strlen(godoc_url) - 1
|
||||
if godoc_url[last_char] == '/'
|
||||
@@ -207,9 +204,10 @@ endfunction
|
||||
|
||||
function! go#config#DebugWindows() abort
|
||||
return get(g:, 'go_debug_windows', {
|
||||
\ 'stack': 'leftabove 20vnew',
|
||||
\ 'out': 'botright 10new',
|
||||
\ 'vars': 'leftabove 30vnew',
|
||||
\ 'stack': 'leftabove 20new',
|
||||
\ 'goroutines': 'botright 10new',
|
||||
\ 'out': 'botright 5new',
|
||||
\ }
|
||||
\ )
|
||||
|
||||
@@ -251,6 +249,10 @@ function! go#config#AddtagsTransform() abort
|
||||
return get(g:, 'go_addtags_transform', "snakecase")
|
||||
endfunction
|
||||
|
||||
function! go#config#AddtagsSkipUnexported() abort
|
||||
return get(g:, 'go_addtags_skip_unexported', 0)
|
||||
endfunction
|
||||
|
||||
function! go#config#TemplateAutocreate() abort
|
||||
return get(g:, "go_template_autocreate", 1)
|
||||
endfunction
|
||||
@@ -264,23 +266,11 @@ function! go#config#MetalinterCommand() abort
|
||||
endfunction
|
||||
|
||||
function! go#config#MetalinterAutosaveEnabled() abort
|
||||
let l:default_enabled = ["vet", "golint"]
|
||||
|
||||
if go#config#MetalinterCommand() == "golangci-lint"
|
||||
let l:default_enabled = ["govet", "golint"]
|
||||
endif
|
||||
|
||||
return get(g:, "go_metalinter_autosave_enabled", default_enabled)
|
||||
return get(g:, "go_metalinter_autosave_enabled", ["govet", "golint"])
|
||||
endfunction
|
||||
|
||||
function! go#config#MetalinterEnabled() abort
|
||||
let l:default_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)
|
||||
return get(g:, "go_metalinter_enabled", ["vet", "golint", "errcheck"])
|
||||
endfunction
|
||||
|
||||
function! go#config#GolintBin() abort
|
||||
@@ -307,6 +297,10 @@ function! go#config#FmtAutosave() abort
|
||||
return get(g:, "go_fmt_autosave", 1)
|
||||
endfunction
|
||||
|
||||
function! go#config#ImportsAutosave() abort
|
||||
return get(g:, 'go_imports_autosave', 0)
|
||||
endfunction
|
||||
|
||||
function! go#config#SetFmtAutosave(value) abort
|
||||
let g:go_fmt_autosave = a:value
|
||||
endfunction
|
||||
@@ -351,8 +345,12 @@ function! go#config#FmtCommand() abort
|
||||
return get(g:, "go_fmt_command", "gofmt")
|
||||
endfunction
|
||||
|
||||
function! go#config#ImportsMode() abort
|
||||
return get(g:, "go_imports_mode", "goimports")
|
||||
endfunction
|
||||
|
||||
function! go#config#FmtOptions() abort
|
||||
return get(g:, "go_fmt_options", {})
|
||||
return get(b:, "go_fmt_options", get(g:, "go_fmt_options", {}))
|
||||
endfunction
|
||||
|
||||
function! go#config#FmtFailSilently() abort
|
||||
@@ -367,8 +365,13 @@ function! go#config#PlayOpenBrowser() abort
|
||||
return get(g:, "go_play_open_browser", 1)
|
||||
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
|
||||
return get(g:, "go_gorename_bin", "gorename")
|
||||
return get(g:, "go_gorename_bin", "gopls")
|
||||
endfunction
|
||||
|
||||
function! go#config#GorenamePrefill() abort
|
||||
@@ -462,10 +465,22 @@ function! go#config#HighlightVariableDeclarations() abort
|
||||
return get(g:, 'go_highlight_variable_declarations', 0)
|
||||
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
|
||||
return get(g:, 'go_highlight_debug', 1)
|
||||
endfunction
|
||||
|
||||
function! go#config#DebugBreakpointSignText() abort
|
||||
return get(g:, 'go_debug_breakpoint_sign_text', '>')
|
||||
endfunction
|
||||
|
||||
function! go#config#FoldEnable(...) abort
|
||||
if a:0 > 0
|
||||
return index(go#config#FoldEnable(), a:1) > -1
|
||||
@@ -481,6 +496,70 @@ function! go#config#CodeCompletionEnabled() abort
|
||||
return get(g:, "go_code_completion_enabled", 1)
|
||||
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
|
||||
" compatibility reasons.
|
||||
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
|
||||
|
||||
" 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
|
||||
" Maintainer: Jon Parise <jon@indelible.org>
|
||||
|
||||
if exists('g:autoloaded_graphql')
|
||||
finish
|
||||
endif
|
||||
let g:autoloaded_graphql = 1
|
||||
function! graphql#has_syntax_group(group) abort
|
||||
try
|
||||
silent execute 'silent highlight ' . a:group
|
||||
catch
|
||||
return v:false
|
||||
endtry
|
||||
return v:true
|
||||
endfunction
|
||||
|
||||
function! graphql#javascript_tags() abort
|
||||
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)
|
||||
|
||||
function! jsx_pretty#comment#update_commentstring(original)
|
||||
let syn_current = s:syn_name(line('.'), col('.'))
|
||||
let syn_start = s:syn_name(line('.'), 1)
|
||||
let save_view = winsaveview()
|
||||
let line = getline(".")
|
||||
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()
|
||||
|
||||
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*//'
|
||||
let &l:commentstring = '// %s'
|
||||
elseif s:syn_contains(line('.'), col('.'), 'jsxTaggedRegion')
|
||||
elseif s:syn_contains(line('.'), col, 'jsxTaggedRegion')
|
||||
let &l:commentstring = '<!-- %s -->'
|
||||
elseif syn_name =~? '^jsxAttrib'
|
||||
elseif syn_start =~? '^jsxAttrib'
|
||||
let &l:commentstring = '// %s'
|
||||
else
|
||||
let &l:commentstring = '{/* %s */}'
|
||||
@@ -24,7 +24,7 @@ function! jsx_pretty#comment#update_commentstring(original)
|
||||
endif
|
||||
|
||||
" Restore the cursor position
|
||||
call winrestview(save_view)
|
||||
call setpos('.', save_cursor)
|
||||
endfunction
|
||||
|
||||
function! s:syn_name(lnum, cnum)
|
||||
|
||||
@@ -10,209 +10,297 @@ else
|
||||
endfunction
|
||||
endif
|
||||
|
||||
" Get the syntax group of start of line
|
||||
function! s:syn_sol(lnum)
|
||||
let line = getline(a:lnum)
|
||||
let sol = matchstr(line, '^\s*')
|
||||
return map(synstack(a:lnum, len(sol) + 1), 'synIDattr(v:val, "name")')
|
||||
" Regexp for the start tag
|
||||
let s:start_tag = '<\_s*\%(>\|\${\|\%(\<[-:._$A-Za-z0-9]\+\>\)\)'
|
||||
" Regexp for the end tag
|
||||
let s:end_tag = '\%(<\_s*/\_s*\%(\<[-:._$A-Za-z0-9]\+\>\)\_s*>\|/\_s*>\)'
|
||||
|
||||
function s:trim(line)
|
||||
return substitute(a:line, '^\s*\|\s*$', '', 'g')
|
||||
endfunction
|
||||
|
||||
" Get the syntax group of end of line
|
||||
function! s:syn_eol(lnum)
|
||||
let lnum = prevnonblank(a:lnum)
|
||||
let col = strlen(getline(lnum))
|
||||
return map(synstack(lnum, col), 'synIDattr(v:val, "name")')
|
||||
" Get the syntax stack at the given position
|
||||
function s:syntax_stack_at(lnum, col)
|
||||
return map(synstack(a:lnum, a:col), 'synIDattr(v:val, "name")')
|
||||
endfunction
|
||||
|
||||
function! s:prev_indent(lnum)
|
||||
let lnum = prevnonblank(a:lnum - 1)
|
||||
return indent(lnum)
|
||||
" Get the syntax at the given position
|
||||
function s:syntax_at(lnum, col)
|
||||
return synIDattr(synID(a:lnum, a:col, 1), 'name')
|
||||
endfunction
|
||||
|
||||
function! s:prev_line(lnum)
|
||||
let lnum = prevnonblank(a:lnum - 1)
|
||||
return substitute(getline(lnum), '^\s*\|\s*$', '', 'g')
|
||||
" Get the start col of the non-space charactor
|
||||
function s:start_col(lnum)
|
||||
return len(matchstr(getline(a:lnum), '^\s*')) + 1
|
||||
endfunction
|
||||
|
||||
function! s:syn_attr_jsx(synattr)
|
||||
return a:synattr =~? "^jsx"
|
||||
" Get the start syntax of a given line number
|
||||
function s:start_syntax(lnum)
|
||||
return s:syntax_at(a:lnum, s:start_col(a:lnum))
|
||||
endfunction
|
||||
|
||||
function! s:syn_xmlish(syns)
|
||||
return s:syn_attr_jsx(get(a:syns, -1))
|
||||
" The skip function for searchpair
|
||||
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
|
||||
|
||||
function! s:syn_jsx_element(syns)
|
||||
return get(a:syns, -1) =~? 'jsxElement'
|
||||
" Whether the specified stytax group is the opening tag
|
||||
function s:is_opening_tag(syntax)
|
||||
return a:syntax =~? 'jsxOpenPunct'
|
||||
endfunction
|
||||
|
||||
function! s:syn_js_comment(syns)
|
||||
return get(a:syns, -1) =~? 'Comment$'
|
||||
" Whether the specified stytax group is the closing tag
|
||||
function s:is_closing_tag(syntax)
|
||||
return a:syntax =~? 'jsxClose'
|
||||
endfunction
|
||||
|
||||
function! s:syn_jsx_escapejs(syns)
|
||||
return get(a:syns, -1) =~? '\(\(js\(Template\)\?\|javaScript\(Embed\)\?\|typescript\)Braces\|javascriptTemplateSB\|typescriptInterpolationDelimiter\)' &&
|
||||
\ (get(a:syns, -2) =~? 'jsxEscapeJs' ||
|
||||
\ get(a:syns, -3) =~? 'jsxEscapeJs')
|
||||
" Whether the specified syntax group is the jsxRegion
|
||||
function s:is_jsx_region(syntax)
|
||||
return a:syntax =~? 'jsxRegion'
|
||||
endfunction
|
||||
|
||||
function! s:syn_jsx_attrib(syns)
|
||||
return len(filter(copy(a:syns), 'v:val =~? "jsxAttrib"'))
|
||||
" Whether the specified syntax group is the jsxElement
|
||||
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
|
||||
|
||||
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)
|
||||
let lnum = v:lnum
|
||||
let line = substitute(getline(lnum), '^\s*\|\s*$', '', 'g')
|
||||
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)
|
||||
let line = s:trim(getline(v:lnum))
|
||||
let start_syntax = s:start_syntax(v: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)
|
||||
\ && !s:syn_jsx_escapejs(prev_syn_sol)
|
||||
\ && !s:syn_jsx_escapejs(prev_syn_eol)
|
||||
\ && !s:syn_js_comment(prev_syn_sol)
|
||||
if line =~ '^/\s*>' || line =~ '^<\s*' . s:end_tag
|
||||
return prev_ind
|
||||
else
|
||||
return prev_ind + s:sw()
|
||||
endif
|
||||
elseif !s:syn_xmlish(prev_syn_sol) && !s:syn_js_comment(prev_syn_sol) && s:syn_jsx_attrib(current_syn)
|
||||
" For #79
|
||||
return prev_ind + s:sw()
|
||||
" {
|
||||
" <div></div>
|
||||
" ##} <--
|
||||
elseif s:syn_jsx_element(current_syn) && line =~ '}$'
|
||||
let pair_line = searchpair('{', '', '}', 'b')
|
||||
return indent(pair_line)
|
||||
elseif line =~ '^-->$'
|
||||
if prev_line =~ '^<!--'
|
||||
return prev_ind
|
||||
else
|
||||
return prev_ind - 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
|
||||
if s:is_jsx_brace(start_syntax)
|
||||
return s:jsx_indent_element(v:lnum)
|
||||
endif
|
||||
|
||||
if s:is_opening_tag(start_syntax) && line =~ '^>'
|
||||
return s:jsx_indent_trail_punct(v:lnum)
|
||||
endif
|
||||
|
||||
let syntax_context = s:syntax_context(v:lnum)
|
||||
|
||||
if syntax_context == 'jsxRegion'
|
||||
if s:is_closing_tag(start_syntax)
|
||||
return s:jsx_indent_closing_tag(v:lnum)
|
||||
endif
|
||||
|
||||
let prev_lnum = s:prev_lnum(v:lnum)
|
||||
let prev_line = s:trim(getline(prev_lnum))
|
||||
|
||||
if prev_line =~ '[([{=?]$'
|
||||
return indent(prev_lnum) + s:sw()
|
||||
elseif prev_line =~ '[:|&<>]$' &&
|
||||
\ s:trim(getline(s:prev_lnum(prev_lnum))) !~ '[?:|&<>]$'
|
||||
return indent(prev_lnum) + s:sw()
|
||||
else
|
||||
return prev_ind
|
||||
return indent(prev_lnum)
|
||||
endif
|
||||
elseif s:syn_jsx_escapejs(current_syn)
|
||||
if line =~ '^}'
|
||||
let char = getline('.')[col('.') - 1]
|
||||
" When pressing enter after the }, keep the indent
|
||||
if char != '}' && search('}', 'b', lnum)
|
||||
return indent(lnum)
|
||||
else
|
||||
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
|
||||
elseif syntax_context == 'jsxTaggedRegion'
|
||||
if s:is_closing_tag(start_syntax)
|
||||
return s:jsx_indent_closing_tag(v:lnum)
|
||||
elseif s:is_jsx_comment(start_syntax)
|
||||
return s:jsx_indent_comment(v:lnum)
|
||||
else
|
||||
return indent(s:prev_lnum(v:lnum)) + s:sw()
|
||||
endif
|
||||
elseif line =~ '^`' && s:syn_jsx_escapejs(current_syn_eol)
|
||||
" For `} of template syntax
|
||||
let pair_line = searchpair('{', '', '}', 'bW')
|
||||
return indent(pair_line)
|
||||
elseif line =~ '^/[/*]' " js comment in jsx tag
|
||||
if get(prev_syn_sol, -1) =~ 'Punct'
|
||||
return prev_ind + s:sw()
|
||||
elseif synIDattr(synID(lnum - 1, 1, 1), 'name') =~ 'jsxTag'
|
||||
return prev_ind
|
||||
elseif syntax_context == 'jsxElement'
|
||||
if s:is_jsx_comment(start_syntax)
|
||||
return s:jsx_indent_comment(v:lnum)
|
||||
endif
|
||||
|
||||
if s:is_comment(start_syntax)
|
||||
return s:jsx_indent_comment(v:lnum)
|
||||
endif
|
||||
|
||||
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
|
||||
return a:js_indent()
|
||||
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
|
||||
|
||||
return a:js_indent()
|
||||
endfunction
|
||||
|
||||
endif
|
||||
|
||||
@@ -1,30 +1,11 @@
|
||||
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'julia') == -1
|
||||
|
||||
function! julia#set_syntax_version(jvers)
|
||||
if &filetype != "julia"
|
||||
echo "Not a Julia file"
|
||||
return
|
||||
endif
|
||||
syntax clear
|
||||
let b:julia_syntax_version = a:jvers
|
||||
set filetype=julia
|
||||
echo "The julia#set_syntax_version function is deprecated"
|
||||
endfunction
|
||||
|
||||
function! julia#toggle_deprecated_syntax()
|
||||
if &filetype != "julia"
|
||||
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
|
||||
echo "The julia#toggle_deprecated_syntax function is deprecated"
|
||||
endfunction
|
||||
|
||||
if exists("loaded_matchit")
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'julia') == -1
|
||||
|
||||
" 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
|
||||
|
||||
@@ -658,7 +658,9 @@ function! julia_latex_symbols#get_dict()
|
||||
\ '\nequiv': '≢',
|
||||
\ '\Equiv': '≣',
|
||||
\ '\le': '≤',
|
||||
\ '\leq': '≤',
|
||||
\ '\ge': '≥',
|
||||
\ '\geq': '≥',
|
||||
\ '\leqq': '≦',
|
||||
\ '\geqq': '≧',
|
||||
\ '\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
|
||||
@@ -5,9 +5,16 @@ if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'puppet') == -1
|
||||
function! puppet#format#Format() abort
|
||||
let l:start_lnum = v:lnum
|
||||
let l:end_lnum = v:lnum + v:count - 1
|
||||
call puppet#format#Indention(l:start_lnum, l:end_lnum)
|
||||
call puppet#format#Hashrocket(l:start_lnum, l:end_lnum)
|
||||
" Don't modify indentation or alignment if called by textwidth. We'll only
|
||||
" let the fallback function do its thing in this case so that textwidth
|
||||
" still performs the expected feature.
|
||||
if mode() !~# '[iR]'
|
||||
call puppet#format#Indention(l:start_lnum, l:end_lnum)
|
||||
call puppet#format#Hashrocket(l:start_lnum, l:end_lnum)
|
||||
endif
|
||||
call puppet#format#Fallback(l:start_lnum, l:end_lnum)
|
||||
" explicitly avoid falling back to default formatting
|
||||
return 0
|
||||
endfunction
|
||||
|
||||
""
|
||||
@@ -37,10 +44,16 @@ endfunction
|
||||
" lines which exeed &widthline are formated
|
||||
"
|
||||
function! puppet#format#Fallback(start_lnum, end_lnum) abort
|
||||
" We shouldn't wrap lines based on textwidth if it is disabled
|
||||
if &textwidth == 0
|
||||
return
|
||||
endif
|
||||
|
||||
" I'm using it to check if autoformat expand range
|
||||
let l:eof_lnum = line('$')
|
||||
let l:lnum = a:start_lnum
|
||||
let l:end_lnum = a:end_lnum
|
||||
|
||||
while l:lnum <= l:end_lnum
|
||||
if strlen(getline(l:lnum)) > &textwidth
|
||||
call cursor(l:lnum)
|
||||
|
||||
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
|
||||
$:.push rails_base unless $:.index( rails_base )
|
||||
|
||||
rails_config = rails_base + "config/"
|
||||
rails_lib = rails_base + "lib/"
|
||||
$:.push rails_config unless $:.index( rails_config )
|
||||
$:.push rails_lib unless $:.index( rails_lib )
|
||||
|
||||
bootfile = rails_config + "boot.rb"
|
||||
envfile = rails_config + "environment.rb"
|
||||
bootfile = rails_base + "config/boot.rb"
|
||||
envfile = rails_base + "config/environment.rb"
|
||||
if File.exists?( bootfile ) && File.exists?( envfile )
|
||||
begin
|
||||
require bootfile
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'rust') == -1
|
||||
|
||||
" Author: Kevin Ballard
|
||||
" Description: Helper functions for Rust commands/mappings
|
||||
" Last Modified: May 27, 2014
|
||||
" For bugs, patches and license go to https://github.com/rust-lang/rust.vim
|
||||
@@ -398,10 +397,19 @@ function! s:RmDir(path)
|
||||
echoerr 'Attempted to delete empty path'
|
||||
return 0
|
||||
elseif a:path ==# '/' || a:path ==# $HOME
|
||||
echoerr 'Attempted to delete protected path: ' . a:path
|
||||
let l:path = expand(a:path)
|
||||
if l:path ==# '/' || l:path ==# $HOME
|
||||
echoerr 'Attempted to delete protected path: ' . a:path
|
||||
return 0
|
||||
endif
|
||||
endif
|
||||
|
||||
if !isdirectory(a:path)
|
||||
return 0
|
||||
endif
|
||||
return system("rm -rf " . shellescape(a:path))
|
||||
|
||||
" delete() returns 0 when removing file successfully
|
||||
return delete(a:path, 'rf') == 0
|
||||
endfunction
|
||||
|
||||
" Executes {cmd} with the cwd set to {pwd}, without changing Vim's cwd.
|
||||
@@ -493,7 +501,15 @@ function! s:SearchTestFunctionNameUnderCursor() abort
|
||||
|
||||
" Search the end of test function (closing brace) to ensure that the
|
||||
" 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
|
||||
return ''
|
||||
endif
|
||||
@@ -501,14 +517,23 @@ function! s:SearchTestFunctionNameUnderCursor() abort
|
||||
return matchstr(getline(test_func_line), '\m\C^\s*fn\s\+\zs\h\w*')
|
||||
endfunction
|
||||
|
||||
function! rust#Test(all, options) abort
|
||||
function! rust#Test(mods, winsize, all, options) abort
|
||||
let manifest = findfile('Cargo.toml', expand('%:p:h') . ';')
|
||||
if manifest ==# ''
|
||||
return rust#Run(1, '--test ' . a:options)
|
||||
endif
|
||||
|
||||
if has('terminal') || has('nvim')
|
||||
let cmd = 'terminal '
|
||||
" <count> defaults to 0, but we prefer an empty string
|
||||
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
|
||||
let cmd = '!'
|
||||
let manifest = shellescape(manifest)
|
||||
@@ -526,21 +551,20 @@ function! rust#Test(all, options) abort
|
||||
let saved = getpos('.')
|
||||
try
|
||||
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
|
||||
call setpos('.', saved)
|
||||
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
|
||||
|
||||
" }}}1
|
||||
|
||||
@@ -8,7 +8,8 @@ let s:checked_ctags = 0
|
||||
|
||||
function! rust#tags#IsUCtags() abort
|
||||
if s:checked_ctags == 0
|
||||
if system('ctags --version') =~? 'universal ctags'
|
||||
let l:ctags_bin = get(g:, 'tagbar_ctags_bin', 'ctags')
|
||||
if system(l:ctags_bin.' --version') =~? 'universal ctags'
|
||||
let s:ctags_is_uctags = 1
|
||||
endif
|
||||
let s:checked_ctags = 1
|
||||
|
||||
@@ -62,18 +62,19 @@ function! s:RustfmtWriteMode()
|
||||
endif
|
||||
endfunction
|
||||
|
||||
function! s:RustfmtConfig()
|
||||
function! s:RustfmtConfigOptions()
|
||||
let l:rustfmt_toml = findfile('rustfmt.toml', expand('%:p:h') . ';')
|
||||
if l:rustfmt_toml !=# ''
|
||||
return '--config-path '.l:rustfmt_toml
|
||||
return '--config-path '.fnamemodify(l:rustfmt_toml, ":p")
|
||||
endif
|
||||
|
||||
let l:_rustfmt_toml = findfile('.rustfmt.toml', expand('%:p:h') . ';')
|
||||
if l:_rustfmt_toml !=# ''
|
||||
return '--config-path '.l:_rustfmt_toml
|
||||
return '--config-path '.fnamemodify(l:_rustfmt_toml, ":p")
|
||||
endif
|
||||
|
||||
return ''
|
||||
" Default to edition 2018 in case no rustfmt.toml was found.
|
||||
return '--edition 2018'
|
||||
endfunction
|
||||
|
||||
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: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
|
||||
" accordingly.
|
||||
@@ -98,21 +99,16 @@ function! s:RustfmtCommandRange(filename, line1, line2)
|
||||
endfunction
|
||||
|
||||
function! s:RustfmtCommand()
|
||||
if g:rustfmt_emit_files
|
||||
let l:write_mode = "--emit=stdout"
|
||||
else
|
||||
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
|
||||
let write_mode = g:rustfmt_emit_files ? '--emit=stdout' : '--write-mode=display'
|
||||
let config = s:RustfmtConfigOptions()
|
||||
return join([g:rustfmt_command, write_mode, config, g:rustfmt_options])
|
||||
endfunction
|
||||
|
||||
function! s:DeleteLines(start, end) abort
|
||||
silent! execute a:start . ',' . a:end . 'delete _'
|
||||
endfunction
|
||||
|
||||
function! s:RunRustfmt(command, tmpname, fail_silently)
|
||||
function! s:RunRustfmt(command, tmpname, from_writepre)
|
||||
mkview!
|
||||
|
||||
let l:stderr_tmpname = tempname()
|
||||
@@ -149,8 +145,10 @@ function! s:RunRustfmt(command, tmpname, fail_silently)
|
||||
|
||||
let l:open_lwindow = 0
|
||||
if v:shell_error == 0
|
||||
" remove undo point caused via BufWritePre
|
||||
try | silent undojoin | catch | endtry
|
||||
if a:from_writepre
|
||||
" remove undo point caused via BufWritePre
|
||||
try | silent undojoin | catch | endtry
|
||||
endif
|
||||
|
||||
if a:tmpname ==# ''
|
||||
let l:content = l:out
|
||||
@@ -170,7 +168,7 @@ function! s:RunRustfmt(command, tmpname, fail_silently)
|
||||
call setloclist(0, [])
|
||||
let l:open_lwindow = 1
|
||||
endif
|
||||
elseif g:rustfmt_fail_silently == 0 && a:fail_silently == 0
|
||||
elseif g:rustfmt_fail_silently == 0 && !a:from_writepre
|
||||
" otherwise get the errors and put them in the location list
|
||||
let l:errors = []
|
||||
|
||||
@@ -224,12 +222,12 @@ function! rustfmt#FormatRange(line1, line2)
|
||||
let l:tmpname = tempname()
|
||||
call writefile(getline(1, '$'), l:tmpname)
|
||||
let command = s:RustfmtCommandRange(l:tmpname, a:line1, a:line2)
|
||||
call s:RunRustfmt(command, l:tmpname, 0)
|
||||
call s:RunRustfmt(command, l:tmpname, v:false)
|
||||
call delete(l:tmpname)
|
||||
endfunction
|
||||
|
||||
function! rustfmt#Format()
|
||||
call s:RunRustfmt(s:RustfmtCommand(), '', 0)
|
||||
call s:RunRustfmt(s:RustfmtCommand(), '', v:false)
|
||||
endfunction
|
||||
|
||||
function! rustfmt#Cmd()
|
||||
@@ -257,7 +255,7 @@ function! rustfmt#PreWrite()
|
||||
return
|
||||
endif
|
||||
|
||||
call s:RunRustfmt(s:RustfmtCommand(), '', 1)
|
||||
call s:RunRustfmt(s:RustfmtCommand(), '', v:true)
|
||||
endfunction
|
||||
|
||||
|
||||
|
||||
@@ -1,23 +1,39 @@
|
||||
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'terraform') == -1
|
||||
|
||||
function! terraform#fmt()
|
||||
if !filereadable(expand('%:p'))
|
||||
return
|
||||
endif
|
||||
let l:curw = winsaveview()
|
||||
let s:cpo_save = &cpoptions
|
||||
set cpoptions&vim
|
||||
|
||||
" Ensure no conflict with arguments from the environment
|
||||
let $TF_CLI_ARGS_fmt=''
|
||||
|
||||
function! terraform#fmt() abort
|
||||
" Save the view.
|
||||
let curw = winsaveview()
|
||||
|
||||
" Make a fake change so that the undo point is right.
|
||||
normal! ix
|
||||
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 -'
|
||||
let &shellredir = shellredir_save
|
||||
|
||||
" If there was an error, undo any changes and show stderr.
|
||||
if v:shell_error != 0
|
||||
let output = getline(1, '$')
|
||||
silent undo
|
||||
let output = readfile(tmpfile)
|
||||
echo join(output, "\n")
|
||||
endif
|
||||
call winrestview(l:curw)
|
||||
|
||||
" Delete the temporary file, and restore the view.
|
||||
call delete(tmpfile)
|
||||
call winrestview(curw)
|
||||
endfunction
|
||||
|
||||
function! terraform#align()
|
||||
function! terraform#align() abort
|
||||
let p = '^.*=[^>]*$'
|
||||
if exists(':Tabularize') && getline('.') =~# '^.*=' && (getline(line('.')-1) =~# p || getline(line('.')+1) =~# p)
|
||||
let column = strlen(substitute(getline('.')[0:col('.')],'[^=]','','g'))
|
||||
@@ -28,33 +44,39 @@ function! terraform#align()
|
||||
endif
|
||||
endfunction
|
||||
|
||||
function! terraform#commands(A, L, P)
|
||||
return [
|
||||
\ 'apply',
|
||||
\ 'console',
|
||||
\ 'destroy',
|
||||
\ 'env',
|
||||
\ 'fmt',
|
||||
\ 'get',
|
||||
\ 'graph',
|
||||
\ 'import',
|
||||
\ 'init',
|
||||
\ 'output',
|
||||
\ 'plan',
|
||||
\ 'providers',
|
||||
\ 'refresh',
|
||||
\ 'show',
|
||||
\ 'taint',
|
||||
\ 'untaint',
|
||||
\ 'validate',
|
||||
\ 'version',
|
||||
\ 'workspace',
|
||||
\ '0.12upgrade',
|
||||
\ 'debug',
|
||||
\ 'force-unlock',
|
||||
\ 'push',
|
||||
\ 'state'
|
||||
function! terraform#commands(ArgLead, CmdLine, CursorPos) abort
|
||||
let commands = [
|
||||
\ 'apply',
|
||||
\ 'console',
|
||||
\ 'destroy',
|
||||
\ 'env',
|
||||
\ 'fmt',
|
||||
\ 'get',
|
||||
\ 'graph',
|
||||
\ 'import',
|
||||
\ 'init',
|
||||
\ 'login',
|
||||
\ 'logout',
|
||||
\ 'output',
|
||||
\ 'plan',
|
||||
\ 'providers',
|
||||
\ 'refresh',
|
||||
\ 'show',
|
||||
\ 'taint',
|
||||
\ 'untaint',
|
||||
\ 'validate',
|
||||
\ 'version',
|
||||
\ 'workspace',
|
||||
\ '0.12upgrade',
|
||||
\ 'debug',
|
||||
\ 'force-unlock',
|
||||
\ 'push',
|
||||
\ 'state'
|
||||
\ ]
|
||||
return join(commands, "\n")
|
||||
endfunction
|
||||
|
||||
let &cpoptions = s:cpo_save
|
||||
unlet s:cpo_save
|
||||
|
||||
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
|
||||
" ___vital___
|
||||
scriptencoding utf-8
|
||||
let s:save_cpo = &cpo
|
||||
set cpo&vim
|
||||
|
||||
function! s:_is_available() abort
|
||||
if has('gui_running')
|
||||
@@ -185,7 +183,4 @@ function! s:echo(str) abort
|
||||
call echorizer.echo()
|
||||
endfunction
|
||||
|
||||
let &cpo = s:save_cpo
|
||||
unlet s:save_cpo
|
||||
|
||||
endif
|
||||
|
||||
@@ -11,9 +11,6 @@ delfunction s:_SID
|
||||
" ___vital___
|
||||
" Utilities for list.
|
||||
|
||||
let s:save_cpo = &cpo
|
||||
set cpo&vim
|
||||
|
||||
function! s:pop(list) abort
|
||||
return remove(a:list, -1)
|
||||
endfunction
|
||||
@@ -460,9 +457,6 @@ function! s:combinations(list, r) abort
|
||||
return result
|
||||
endfunction
|
||||
|
||||
let &cpo = s:save_cpo
|
||||
unlet s:save_cpo
|
||||
|
||||
" vim:set et ts=2 sts=2 sw=2 tw=0:
|
||||
|
||||
endif
|
||||
|
||||
@@ -11,9 +11,6 @@ delfunction s:_SID
|
||||
" ___vital___
|
||||
" Utilities for string.
|
||||
|
||||
let s:save_cpo = &cpo
|
||||
set cpo&vim
|
||||
|
||||
function! s:_vital_loaded(V) abort
|
||||
let s:V = a:V
|
||||
let s:L = s:V.import('Data.List')
|
||||
@@ -624,8 +621,6 @@ function! s:split_posix_text(text, ...) abort
|
||||
return split(text, newline, 1)
|
||||
endfunction
|
||||
|
||||
let &cpo = s:save_cpo
|
||||
unlet s:save_cpo
|
||||
" vim:set et ts=2 sts=2 sw=2 tw=0:
|
||||
|
||||
endif
|
||||
|
||||
@@ -15,9 +15,6 @@ delfunction s:_SID
|
||||
" FIXME: This module name should be Vital.System ?
|
||||
" 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.
|
||||
" Because these variables are used when this script file is loaded.
|
||||
@@ -169,9 +166,6 @@ else
|
||||
endif
|
||||
|
||||
|
||||
let &cpo = s:save_cpo
|
||||
unlet s:save_cpo
|
||||
|
||||
" vim:set et ts=2 sts=2 sw=2 tw=0:
|
||||
|
||||
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")
|
||||
delfunction s:_SID
|
||||
" ___vital___
|
||||
let s:save_cpo = &cpo
|
||||
set cpo&vim
|
||||
|
||||
function! s:_true() abort
|
||||
return 1
|
||||
@@ -174,9 +172,6 @@ function! s:_encode_dict(val, settings) abort
|
||||
endfunction
|
||||
" @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:
|
||||
|
||||
endif
|
||||
|
||||
@@ -131,6 +131,7 @@ let attributes_value = {
|
||||
\ 'label': ['Text', ''],
|
||||
\ 'lang': ['Lang Tag', ''],
|
||||
\ 'list': ['ID', ''],
|
||||
\ 'loading': ['eager/lazy', ''],
|
||||
\ 'loop': ['Bool', ''],
|
||||
\ 'low': ['Number', ''],
|
||||
\ 'manifest': ['URL', ''],
|
||||
@@ -588,11 +589,11 @@ let g:xmldata_html5 = {
|
||||
\ ],
|
||||
\ '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': [
|
||||
\ [],
|
||||
\ 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': [
|
||||
\ [],
|
||||
@@ -746,6 +747,10 @@ let g:xmldata_html5 = {
|
||||
\ [],
|
||||
\ global_attributes
|
||||
\ ],
|
||||
\ 'slot': [
|
||||
\ [],
|
||||
\ extend(copy(global_attributes), {'name': []})
|
||||
\ ],
|
||||
\ 'small': [
|
||||
\ phrasing_elements,
|
||||
\ 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:vim-scripts/octave.vim--
|
||||
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
|
||||
@@ -3,7 +3,7 @@ if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'cucumber') == -
|
||||
" Vim compiler file
|
||||
" Compiler: Cucumber
|
||||
" Maintainer: Tim Pope <vimNOSPAM@tpope.org>
|
||||
" Last Change: 2010 Aug 09
|
||||
" Last Change: 2016 Aug 29
|
||||
|
||||
if exists("current_compiler")
|
||||
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
|
||||
" Compiler: Haml
|
||||
" Maintainer: Tim Pope <vimNOSPAM@tpope.org>
|
||||
" Last Change: 2013 May 30
|
||||
" Last Change: 2016 Aug 29
|
||||
|
||||
if exists("current_compiler")
|
||||
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>
|
||||
" URL: http://www.ocaml.info/vim/compiler/ocaml.vim
|
||||
" Last Change:
|
||||
" 2020 Mar 28 - Improved error format (Thomas Leonard)
|
||||
" 2017 Nov 26 - Improved 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:
|
||||
" Setting makeprg doesn't make sense, because there is ocamlc, ocamlopt,
|
||||
@@ -33,6 +33,7 @@ let s:cpo_save = &cpo
|
||||
set cpo&vim
|
||||
|
||||
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\\,\ 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')
|
||||
CompilerSet makeprg=rustc\ \%:S
|
||||
else
|
||||
CompilerSet makeprg=rustc\ \%
|
||||
CompilerSet makeprg=rustc\ \"%\"
|
||||
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
|
||||
123
doc/ft-ruby-syntax.txt
Normal file
123
doc/ft-ruby-syntax.txt
Normal file
@@ -0,0 +1,123 @@
|
||||
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'ruby') == -1
|
||||
|
||||
RUBY *ruby.vim* *ft-ruby-syntax*
|
||||
*vim-ruby-syntax*
|
||||
|
||||
Ruby: Operator highlighting |ruby_operators|
|
||||
Ruby: Whitespace errors |ruby_space_errors|
|
||||
Ruby: Syntax errors |ruby_syntax_errors|
|
||||
Ruby: Folding |ruby_fold| |ruby_foldable_groups|
|
||||
Ruby: Reducing expensive operations |ruby_no_expensive| |ruby_minlines|
|
||||
Ruby: Spellchecking strings |ruby_spellcheck_strings|
|
||||
|
||||
*ruby_operators*
|
||||
Ruby: Operator highlighting ~
|
||||
|
||||
Operators, and pseudo operators, can be highlighted by defining: >
|
||||
|
||||
:let ruby_operators = 1
|
||||
:let ruby_pseudo_operators = 1
|
||||
<
|
||||
The supported pseudo operators are ., &., ::, *, **, &, <, << and ->.
|
||||
|
||||
*ruby_space_errors*
|
||||
Ruby: Whitespace errors ~
|
||||
|
||||
Whitespace errors can be highlighted by defining "ruby_space_errors": >
|
||||
|
||||
:let ruby_space_errors = 1
|
||||
<
|
||||
This will highlight trailing whitespace and tabs preceded by a space character
|
||||
as errors. This can be refined by defining "ruby_no_trail_space_error" and
|
||||
"ruby_no_tab_space_error" which will ignore trailing whitespace and tabs after
|
||||
spaces respectively.
|
||||
|
||||
*ruby_syntax_errors*
|
||||
Ruby: Syntax errors ~
|
||||
|
||||
Redundant line continuations and predefined global variable look-alikes (such
|
||||
as $# and $-z) can be highlighted as errors by defining:
|
||||
>
|
||||
:let ruby_line_continuation_error = 1
|
||||
:let ruby_global_variable_error = 1
|
||||
<
|
||||
*ruby_fold*
|
||||
Ruby: Folding ~
|
||||
|
||||
Folding can be enabled by defining "ruby_fold": >
|
||||
|
||||
:let ruby_fold = 1
|
||||
<
|
||||
This will set the value of 'foldmethod' to "syntax" locally to the current
|
||||
buffer or window, which will enable syntax-based folding when editing Ruby
|
||||
filetypes.
|
||||
|
||||
*ruby_foldable_groups*
|
||||
Default folding is rather detailed, i.e., small syntax units like "if", "do",
|
||||
"%w[]" may create corresponding fold levels.
|
||||
|
||||
You can set "ruby_foldable_groups" to restrict which groups are foldable: >
|
||||
|
||||
:let ruby_foldable_groups = 'if case %'
|
||||
<
|
||||
The value is a space-separated list of keywords:
|
||||
|
||||
keyword meaning ~
|
||||
-------- ------------------------------------- ~
|
||||
ALL Most block syntax (default)
|
||||
NONE Nothing
|
||||
if "if" or "unless" block
|
||||
def "def" block
|
||||
class "class" block
|
||||
module "module" block
|
||||
do "do" block
|
||||
begin "begin" block
|
||||
case "case" block
|
||||
for "for", "while", "until" loops
|
||||
{ Curly bracket block or hash literal
|
||||
[ Array literal
|
||||
% Literal with "%" notation, e.g.: %w(STRING), %!STRING!
|
||||
/ Regexp
|
||||
string String and shell command output (surrounded by ', ", `)
|
||||
: Symbol
|
||||
# Multiline comment
|
||||
<< Here documents
|
||||
__END__ Source code after "__END__" directive
|
||||
|
||||
NONE and ALL have priority, in that order, over all other folding groups.
|
||||
|
||||
*ruby_no_expensive*
|
||||
Ruby: Reducing expensive operations ~
|
||||
|
||||
By default, the "end" keyword is colorized according to the opening statement
|
||||
of the block it closes. While useful, this feature can be expensive; if you
|
||||
experience slow redrawing (or you are on a terminal with poor color support)
|
||||
you may want to turn it off by defining the "ruby_no_expensive" variable: >
|
||||
|
||||
:let ruby_no_expensive = 1
|
||||
<
|
||||
In this case the same color will be used for all control keywords.
|
||||
|
||||
*ruby_minlines*
|
||||
|
||||
If you do want this feature enabled, but notice highlighting errors while
|
||||
scrolling backwards, which are fixed when redrawing with CTRL-L, try setting
|
||||
the "ruby_minlines" variable to a value larger than 50: >
|
||||
|
||||
:let ruby_minlines = 100
|
||||
<
|
||||
Ideally, this value should be a number of lines large enough to embrace your
|
||||
largest class or module.
|
||||
|
||||
*ruby_spellcheck_strings*
|
||||
Ruby: Spellchecking strings ~
|
||||
|
||||
Ruby syntax will perform spellchecking of strings if you define
|
||||
"ruby_spellcheck_strings": >
|
||||
|
||||
:let ruby_spellcheck_strings = 1
|
||||
<
|
||||
|
||||
vim:tw=78:sw=4:ts=8:ft=help:norl:
|
||||
|
||||
endif
|
||||
55
doc/graphql.txt
Normal file
55
doc/graphql.txt
Normal file
@@ -0,0 +1,55 @@
|
||||
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'graphql') == -1
|
||||
|
||||
*graphql.txt* GraphQL plug-in for Vim *graphql*
|
||||
|
||||
CONTENTS *graphql-contents*
|
||||
|
||||
1. Introduction |graphql-intro|
|
||||
2. JavaScript Support |graphql-javascript|
|
||||
3. TypeScript Support |graphql-typescript|
|
||||
|
||||
|
||||
INTRODUCTION *graphql-intro*
|
||||
|
||||
This plugin provides GraphQL (http://graphql.org/) file detection, syntax
|
||||
highlighting, and indentation.
|
||||
|
||||
|
||||
JAVASCRIPT *graphql-javascript*
|
||||
|
||||
GraphQL syntax support in ES2015 template literals is provided. It works "out
|
||||
of the box" with Vim 8.2's JavaScript support. The extended syntax provided by
|
||||
the vim-javascript (https://github.com/pangloss/vim-javascript) plugin is also
|
||||
supported.
|
||||
|
||||
*graphql-javascript-options*
|
||||
|
||||
*g:graphql_javascript_tags*
|
||||
|g:graphql_javascript_tags| list of strings
|
||||
|
||||
Default: `["gql", "graphql", "Relay.QL"]`
|
||||
|
||||
This variable lists the ES2015 template tag names that will be recognized as
|
||||
containing GraphQL template literal strings.
|
||||
|
||||
|
||||
TYPESCRIPT *graphql-typescript*
|
||||
|
||||
Like |graphql-javascript|, GraphQL syntax support in ES2015 template literals
|
||||
is provided. It also works "out of the box" with Vim 8.2's TypeScript support,
|
||||
which is based on the yats (https://github.com/HerringtonDarkholme/yats.vim)
|
||||
plugin. For older versions, you can install yats directly.
|
||||
|
||||
TypeScript syntax support also uses |graphql-javascript-options| to customize
|
||||
the list of recognized template tag names.
|
||||
|
||||
REASONML *graphql-reasonml*
|
||||
|
||||
GraphQL syntax support inside of ReasonML template strings using graphql-ppx
|
||||
is available when vim-reasonml (https://github.com/jordwalke/vim-reasonml) is
|
||||
also installed.
|
||||
|
||||
------------------------------------------------------------------------------
|
||||
vim:tw=78:ft=help:norl:
|
||||
|
||||
endif
|
||||
163
doc/haskell-vim.txt
Normal file
163
doc/haskell-vim.txt
Normal file
@@ -0,0 +1,163 @@
|
||||
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'haskell') == -1
|
||||
|
||||
*haskell-vim.txt* Last Change 2016 March 14
|
||||
===============================================================================
|
||||
===============================================================================
|
||||
|
||||
===============================================================================
|
||||
CONTENTS *haskell-vim-contents*
|
||||
|
||||
1. Features |haskell-vim-features|
|
||||
2. Configuration |haskell-vim-configuration|
|
||||
3. Highlighting |haskell-vim-indentation|
|
||||
|
||||
===============================================================================
|
||||
FEATURES *haskell-vim-features*
|
||||
|
||||
* Covers a broader spectrum of keywords
|
||||
* Highlighting for new features like type families, pattern synonyms,
|
||||
arrow syntax, recursive do, role annotations, QuasiQuotation
|
||||
* More contextual highlighting
|
||||
(e.g. highlight "as" or "family" only in appropriate places)
|
||||
* Smarter indentation
|
||||
* Better Cabal support
|
||||
|
||||
===============================================================================
|
||||
CONFIGURATION *haskell-vim-configuration*
|
||||
|
||||
To enable the features you would like to use, just add the according line to
|
||||
your `.vimrc`.
|
||||
|
||||
===============================================================================
|
||||
HIGHLIGHTING *haskell-vim-highlighting*
|
||||
|
||||
`haskell-vim` can highlight additional keywords. This is enabled by setting
|
||||
the according variable to 1 in the `.vimrc`.
|
||||
|
||||
* |haskell-vim-enable-quantification|
|
||||
* |haskell-vim-enable-recursivedo|
|
||||
* |haskell-vim-enable-arrowsyntax|
|
||||
* |haskell-vim-enable-pattern-synonyms|
|
||||
* |haskell-vim-enable-typeroles|
|
||||
* |haskell-vim-enable-static-pointers|
|
||||
* |haskell-vim-classic-highlighting|
|
||||
* |haskell-vim-disable-TH|
|
||||
|
||||
*haskell-vim-enable-quantification*
|
||||
`g:haskell_enable_quantification` Enables highlighting of `forall`.
|
||||
|
||||
*haskell-vim-enable-recursivedo*
|
||||
`g:haskell_enable_recursivedo` Enables highlighting of `mdo` and `rec`.
|
||||
|
||||
*haskell-vim-enable-arrowsyntax*
|
||||
`g:haskell_enable_arrowsyntax` Enables highlighting of `proc`.
|
||||
|
||||
*haskell-vim-enable-pattern-synonyms*
|
||||
`g:haskell_enable_pattern_synonyms` Enables highlighting of the `pattern` keyword.
|
||||
|
||||
*haskell-vim-enable-typeroles*
|
||||
`g:haskell_enable_typeroles` Enables highlighting of the `role` keyword, as
|
||||
well as `phantom`, `norminal` and
|
||||
`representational`.
|
||||
|
||||
*haskell-vim-enable-static-pointers*
|
||||
`g:haskell_enable_static_pointers` Enables highlighting of the `static` keyword.
|
||||
|
||||
*haskell-vim-classic-highlighting*
|
||||
`haskell-vim` has an opinionated highlighting. If you do not like that you can
|
||||
switch to a more traditional mode by setting `g:haskell_classic_highlighting`
|
||||
to 1.
|
||||
|
||||
*haskell-vim-disable-TH*
|
||||
Disabling Template Haskell and Quasiquoting syntax is possible by setting
|
||||
`g:haskell_disable_TH` to `1`.
|
||||
|
||||
===============================================================================
|
||||
INDENTATION *haskell-vim-indentation*
|
||||
|
||||
To configure indentation in `haskell-vim` you can use the following variables to
|
||||
change indentation depth, just add the according line to your `.vimrc`.
|
||||
|
||||
You can disable the indentation by setting `g:haskell_indent_disable` to `1`.
|
||||
|
||||
Haskell~
|
||||
|
||||
* |haskell-vim-indent-if|
|
||||
* |haskell-vim-indent-case|
|
||||
* |haskell-vim-indent-let|
|
||||
* |haskell-vim-indent-where|
|
||||
* |haskell-vim-indent-before-where|
|
||||
* |haskell-vim-indent-after-bare-where|
|
||||
* |haskell-vim-indent-do|
|
||||
* |haskell-vim-indent-in|
|
||||
* |haskell-vim-indent-guard|
|
||||
*haskell-vim-indent-if*
|
||||
* let g:haskell_indent_if = 3 >
|
||||
|
||||
if bool
|
||||
>>>then ...
|
||||
>>>else ...
|
||||
<
|
||||
|
||||
*haskell-vim-indent-case*
|
||||
* let g:haskell_indent_case = 2 >
|
||||
|
||||
case xs of
|
||||
>>[] -> ...
|
||||
>>(y:ys) -> ...
|
||||
<
|
||||
*haskell-vim-indent-let*
|
||||
* let g:haskell_indent_let = 4 >
|
||||
|
||||
let x = 0 in
|
||||
>>>>x
|
||||
<
|
||||
*haskell-vim-indent-where*
|
||||
* let g:haskell_indent_where = 6 >
|
||||
|
||||
where f :: Int -> Int
|
||||
>>>>>>f x = x
|
||||
<
|
||||
*haskell-vim-indent-before-where*
|
||||
* let g:haskell_indent_before_where = 2 >
|
||||
|
||||
foo
|
||||
>>where
|
||||
<
|
||||
*haskell-vim-indent-after-bare-where*
|
||||
* let g:haskell_indent_after_bare_where = 2 >
|
||||
|
||||
where
|
||||
>>foo
|
||||
<
|
||||
*haskell-vim-indent-do*
|
||||
* let g:haskell_indent_do = 3 >
|
||||
|
||||
do x <- a
|
||||
>>>y <- b
|
||||
<
|
||||
*haskell-vim-indent-in*
|
||||
* let g:haskell_indent_in = 1 >
|
||||
|
||||
let x = 1
|
||||
>in x
|
||||
<
|
||||
*haskell-vim-indent-guard*
|
||||
* let g:haskell_indent_guard = 2 >
|
||||
|
||||
f x y
|
||||
>>|
|
||||
<
|
||||
|
||||
Cabal~
|
||||
|
||||
* |cabal-vim-indent-section|
|
||||
|
||||
*cabal-vim-indent-section*
|
||||
* let g:cabal_indent_section = 2 (limited to max. 4 spaces) >
|
||||
|
||||
executable name
|
||||
>>main-is: Main.hs
|
||||
<
|
||||
|
||||
endif
|
||||
158
doc/idris-vim.txt
Normal file
158
doc/idris-vim.txt
Normal file
@@ -0,0 +1,158 @@
|
||||
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'idris') == -1
|
||||
|
||||
*idris-vim.txt* Last change 2014 April 24
|
||||
===============================================================================
|
||||
===============================================================================
|
||||
@@@@ @@@@@@@@ @@@@@@@@ @@@@ @@@@@@ @@ @@ @@@@ @@ @@
|
||||
@@ @@ @@ @@ @@ @@ @@ @@ @@ @@ @@ @@@ @@@
|
||||
@@ @@ @@ @@ @@ @@ @@ @@ @@ @@ @@@@ @@@@
|
||||
@@ @@ @@ @@@@@@@@ @@ @@@@@@ @@@@@@@ @@ @@ @@ @@ @@@ @@
|
||||
@@ @@ @@ @@ @@ @@ @@ @@ @@ @@ @@ @@
|
||||
@@ @@ @@ @@ @@ @@ @@ @@ @@ @@ @@ @@ @@
|
||||
@@@@ @@@@@@@@ @@ @@ @@@@ @@@@@@ @@@ @@@@ @@ @@
|
||||
===============================================================================
|
||||
CONTENTS *idris-vim-contents*
|
||||
|
||||
1. Features: |idris-vim-features|
|
||||
2. Requirements: |idris-vim-requirements|
|
||||
3. Functions: |idris-vim-functions|
|
||||
4. Troubleshooting |idris-vim-troubleshooting|
|
||||
5. Examples: |idris-vim-examples|
|
||||
6. Information: |idris-vim-information|
|
||||
|
||||
===============================================================================
|
||||
FEATURES *idris-vim-features*
|
||||
|
||||
* Syntax Highlighting
|
||||
* Indentation
|
||||
* Unicode Concealing
|
||||
* Syntax Checking (via Syntastic(https://github.com/scrooloose/syntastic))
|
||||
* Interactive Editing via the REPL
|
||||
|
||||
===============================================================================
|
||||
REQUIREMENTS *idris-vim-requirements*
|
||||
|
||||
* Idris (http://www.idris-lang.org/)
|
||||
|
||||
OPTIONAL:
|
||||
|
||||
* Syntastic(https://github.com/scrooloose/syntastic) for syntax checking
|
||||
* Vimshell(https://github.com/Shougo/vimshell.vim) for a REPL
|
||||
|
||||
===============================================================================
|
||||
FUNCTIONS *idris-vim-functions*
|
||||
|
||||
All of the functions in idris-vim are essentially just calls back to the REPL,
|
||||
so documentation for each of them is also available there.
|
||||
|
||||
IdrisDocumentation *IdrisDocumentation*
|
||||
Shows internal documentation of the primitive under the cursor.
|
||||
|
||||
Mapped to '<LocalLeader>_h' by default.
|
||||
|
||||
IdrisResponseWin *IdrisResponseWin*
|
||||
This opens an idris response window in a new pane.
|
||||
|
||||
Mapped to '<LocalLeader>_i' by default.
|
||||
|
||||
IdrisShowType *IdrisShowType*
|
||||
This shows the type of the name under the cursor (or, if the cursor happens
|
||||
to be over a metavariable, a bit more information about its context).
|
||||
|
||||
Mapped to '<LocalLeader>_t' by default.
|
||||
|
||||
IdrisReload *IdrisReload*
|
||||
This reloads the file and type-checks the file in the current buffer.
|
||||
|
||||
Mapped to '<LocalLeader>_r' by default.
|
||||
|
||||
IdrisEval *IdrisEval*
|
||||
This prompts for an expression and then evaluates it in the REPL, then
|
||||
returns the result.
|
||||
|
||||
Mapped to '<LocalLeader>_e' by default.
|
||||
|
||||
IdrisCaseSplit *IdrisCaseSplit*
|
||||
When the cursor is over a variable in a pattern match clause or case
|
||||
expression, this splits the variable into all well-typed patterns.
|
||||
|
||||
Mapped to '<LocalLeader>_c' by default
|
||||
|
||||
IdrisAddClause *IdrisAddClause*
|
||||
When the cursor is at a type declaration this creates a new clause for that
|
||||
signature.
|
||||
|
||||
By default mapped to '<LocalLeader>_d' for an ordinary top-level definition,
|
||||
'<LocalLeader>_b' for a typeclass instance definition, and
|
||||
'<LocalLeader>_md' to add a pattern-matching proof clause.
|
||||
|
||||
IdrisAddMissing: *IdrisAddMissing*
|
||||
When the cursor is over a function, this adds all clauses necessary to make
|
||||
that function cover all inputs. This also eliminates clauses which would
|
||||
lead to unification errors from appearing.
|
||||
|
||||
Mapped to '<LocalLeader>_m' by default
|
||||
|
||||
IdrisRefine: *IdrisRefine*
|
||||
Refines the item the cursor is over (applies the name and fills in any
|
||||
arguments which can be filled in via unification)
|
||||
|
||||
Mapped to '<LocalLeader>_f' by default
|
||||
|
||||
IdrisProofSearch: *IdrisProofSearch*
|
||||
This attempts to find a value for the metavariable it was called on by
|
||||
looking at the rest of the code. It can also be called with hints, which
|
||||
are functions that can apply to help solve for the metavariable.
|
||||
|
||||
Mapped to '<LocalLeader>_o' without hints and '<LocalLeader>p' with hints by
|
||||
default
|
||||
|
||||
IdrisMakeWith: *IdrisMakeWith*
|
||||
When the cursor is over a pattern clause and this is called, it creates a
|
||||
new with clause.
|
||||
|
||||
Mapped to '<LocalLeader>_w' by default
|
||||
|
||||
IdrisMakeLemma: *IdrisMakeLemma*
|
||||
When the cursor is over a metavariable and this is called, it creates a new
|
||||
top-level definition to solve the metavariable.
|
||||
|
||||
Mapped to '<LocalLeader>_l' by default
|
||||
|
||||
===============================================================================
|
||||
TROUBLESHOOTING *idris-vim-troubleshooting*
|
||||
|
||||
If this isn't working for you, make sure that:
|
||||
|
||||
* There is an Idris REPL running
|
||||
* For syntax checking, you have syntastic installed
|
||||
* The plugins mappings exists and don't conflict with anything else installed
|
||||
(You can use ':map' to check. There should be mappings similar to
|
||||
'\h * :call IdrisShowDoc()'.)
|
||||
* Vim recognizes you're in an idris file (you can use ':verb set ft' to check)
|
||||
|
||||
If none of this works, check to issue tracker on github and if nothing is
|
||||
there create an issue with a detailed description of the problem.
|
||||
|
||||
===============================================================================
|
||||
EXAMPLES *idris-vim-examples*
|
||||
|
||||
Some excellent tutorials/examples for interactive editing using the above
|
||||
functions can be found at:
|
||||
http://edwinb.wordpress.com/2013/10/28/interactive-idris-editing-with-vim/
|
||||
and
|
||||
http://www.scribd.com/doc/214031954/60/Interactive-Editing-in-Vim
|
||||
|
||||
===============================================================================
|
||||
INFORMATION *idris-vim-information*
|
||||
|
||||
Author: edwinb
|
||||
Repo: https://github.com/idris-hackers/idris-vim
|
||||
|
||||
Documentation by japesinator
|
||||
|
||||
===============================================================================
|
||||
===============================================================================
|
||||
" vim:ft=help:et:ts=2:sw=2:sts=2: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