Compare commits

...

131 Commits

Author SHA1 Message Date
Adam Stankiewicz
4f3df59be7 Improve guard so it works for no eof new line 2019-09-12 15:08:44 +02:00
Adam Stankiewicz
26790941f6 Update 2019-09-12 14:32:53 +02:00
Adam Stankiewicz
fbc2af9e82 Remove styled components, fixes #432 2019-09-06 16:47:37 +02:00
Adam Stankiewicz
d4f252565a Remove unnecessary tsx fix 2019-09-06 16:26:33 +02:00
Adam Stankiewicz
48e07bc501 Improve guard to support concatenated files 2019-09-06 15:54:31 +02:00
Adam Stankiewicz
c8897c9c18 Remove unnecessary graphql fix 2019-09-06 15:50:47 +02:00
Adam Stankiewicz
34eb36e6d1 Fix tmux plugin 2019-09-06 14:49:10 +02:00
Adam Stankiewicz
84ec4eedcd Switch typescript provider, closes #428 2019-09-06 14:32:07 +02:00
Adam Stankiewicz
66b769328c Update 2019-09-06 14:25:42 +02:00
Adam Stankiewicz
ae18284e5a Disable jsx when ts or js is disabled, closes #414 2019-09-04 17:39:23 +02:00
Adam Stankiewicz
e3024f21fc Fix build script 2019-09-04 17:01:29 +02:00
Adam Stankiewicz
31d757fc7b Update 2019-09-04 16:50:13 +02:00
Adam Stankiewicz
556c56d185 Add graphql support, closes #298 2019-09-04 16:29:56 +02:00
Adam Stankiewicz
fe84062992 Include missing file from styledcomponents, fixes #418 2019-09-04 16:25:08 +02:00
Adam Stankiewicz
8742443e69 Remove advanced stuff from r plugin, fixes #420 2019-09-04 16:08:22 +02:00
Adam Stankiewicz
832dfece76 Add dhall, closes #426 2019-09-04 16:06:18 +02:00
Adam Stankiewicz
933e42ea1f Change provider for puppet, closes #424 2019-09-04 16:04:21 +02:00
Adam Stankiewicz
cdd6d73e39 Switch fish provider, fixes #408 2019-09-04 15:55:58 +02:00
Adam Stankiewicz
a48874df4c Update elixir filedetect, closes #421 2019-09-04 15:53:42 +02:00
Adam Stankiewicz
21849c2e18 Add helm syntax, closes #422 2019-09-04 15:45:55 +02:00
Adam Stankiewicz
664aa988f6 Update 2019-09-04 15:44:43 +02:00
Adam Stankiewicz
3ddca5da46 Remove rego, fixes #415 2019-07-01 16:26:25 +02:00
Adam Stankiewicz
140430ffb7 Update 2019-07-01 16:25:37 +02:00
Adam Stankiewicz
d527002849 Update 2019-06-16 18:36:23 +02:00
Adam Stankiewicz
15727e7eb0 Add zephir support 2019-06-14 16:11:54 +02:00
Adam Stankiewicz
6b169212f8 Add svelte support, closes #410 2019-06-14 16:07:20 +02:00
Adam Stankiewicz
2edc785a5e Make typescript.tsx default filetype for tsx, fixes #409 2019-06-09 00:08:31 +02:00
Adam Stankiewicz
445e026010 Add styled-components, closes #407 2019-06-08 14:12:14 +02:00
Adam Stankiewicz
fca45b2c2b Add rego support, closes #406 2019-06-08 13:36:13 +02:00
Adam Stankiewicz
ebf9ec9d62 Add zig support, closes #405 2019-06-08 13:34:40 +02:00
Adam Stankiewicz
9caa678708 Add ion shell support, closes #404 2019-06-08 13:33:25 +02:00
Adam Stankiewicz
8f2a71643a Add hcl support, closes #403 2019-06-08 13:32:04 +02:00
Adam Stankiewicz
af763ef221 Change tmux provider, closes #402 2019-06-08 13:29:23 +02:00
Adam Stankiewicz
5ded0682bd Add dlang support, closes #401 2019-06-08 13:28:47 +02:00
Adam Stankiewicz
26c678b08d Change jsx/tsx provider, closes #400 2019-06-08 13:25:41 +02:00
Adam Stankiewicz
17ecfbdabc Add s:setf helper, fixes #399 2019-06-08 13:14:56 +02:00
Adam Stankiewicz
0217fb50fe Add tsx provider, closes #330 2019-06-08 13:03:32 +02:00
Adam Stankiewicz
5023da62ec Add hive syntax, closes #396 2019-06-08 12:50:29 +02:00
Adam Stankiewicz
957228cc25 Add log syntax, closes #394 2019-06-08 12:48:22 +02:00
Adam Stankiewicz
7aae831309 Add tptp syntax 2019-06-08 12:46:43 +02:00
Adam Stankiewicz
671078ef6c Update 2019-06-08 12:44:15 +02:00
Adam Stankiewicz
aebef2c2e7 Update 2019-05-07 16:17:56 +02:00
German Lashevich
e8245dbf17 FIx CI build freezing (#398)
* Kill vim server

* Fix incorrect usage of rspec

* Add build stage to CI

* Try using new server for each run

* Sort and uniq test files
2019-05-01 23:52:54 +02:00
Adam Stankiewicz
9fd5c11a20 Remove liquid syntax, closes #384 2019-04-23 11:49:34 +02:00
Adam Stankiewicz
679ccf0303 Change pgsql provider, closes #391 2019-04-23 11:46:52 +02:00
Adam Stankiewicz
eacf785f5a Add svg plugin, closes #388 2019-04-23 11:43:40 +02:00
Adam Stankiewicz
83bd298476 Add xdc syntax, closes #393 2019-04-23 11:38:41 +02:00
Adam Stankiewicz
415261dd1f Switch mathematica provider, closes #385 2019-04-23 11:37:21 +02:00
Adam Stankiewicz
4d18a5e5dd Update 2019-04-23 11:32:40 +02:00
Adam Stankiewicz
a55b6aa3aa Remove grapqhl, fixes #387 2019-03-29 20:30:36 +01:00
Adam Stankiewicz
1d45a6d4f0 Update readme 2019-03-11 09:22:40 +01:00
Adam Stankiewicz
420a65e9b0 Add llvm support, closes #376 2019-03-11 09:20:36 +01:00
Adam Stankiewicz
2254b83675 Update logo 2019-03-10 22:52:10 +01:00
Adam Stankiewicz
12755e3583 Add logo 2019-03-10 22:49:59 +01:00
Adam Stankiewicz
cbad6b1e0a Update issue templates 2019-03-10 22:37:36 +01:00
Adam Stankiewicz
fabb550c17 Reuse server for tests 2019-03-10 21:23:30 +01:00
Adam Stankiewicz
9d9ed14485 Add ACPI ASL and SMT2 support
closes #379
closes #378
2019-03-10 21:22:06 +01:00
Adam Stankiewicz
5005f1e27a Add csv plugin, closes #239 2019-03-10 21:16:48 +01:00
Adam Stankiewicz
571f76e6b6 Remove rare html extensions, fixes #280 2019-03-10 20:14:21 +01:00
Adam Stankiewicz
e4f906d9a5 Fix specs 2019-03-10 19:42:33 +01:00
Adam Stankiewicz
8b3a563bd0 Fix regexp 2019-03-10 19:11:11 +01:00
Adam Stankiewicz
0475f2b8d1 Fix test extensions 2019-03-10 18:49:28 +01:00
Adam Stankiewicz
1d9a032a66 Update timeout and ruby version 2019-03-10 18:46:17 +01:00
Adam Stankiewicz
86721731c7 Add lilypond support, closes #278 2019-03-05 09:34:59 +01:00
Adam Stankiewicz
6f7257ade2 Use upstreadm mdx ftdetect 2019-03-04 17:55:31 +01:00
Adam Stankiewicz
25ed6ff970 Reintroduce mdx 2019-03-04 17:53:21 +01:00
Adam Stankiewicz
521220f389 Change ocaml provider, closes #320 2019-03-04 12:09:44 +01:00
Adam Stankiewicz
b4cb58661e Add tsx support, fixes #330 2019-03-04 11:46:48 +01:00
Adam Stankiewicz
ebf81f7369 Fix spelling errors, closes #334 2019-03-04 11:35:21 +01:00
Adam Stankiewicz
b69fbad1af Add mdx support, closes #342 2019-03-04 11:33:35 +01:00
Adam Stankiewicz
fc272a0aa2 Revert llvm support (takes too long to download) 2019-03-04 11:11:01 +01:00
dv
65f090faef Add LLVM support (#376) 2019-03-04 11:05:07 +01:00
Adam Stankiewicz
58f9b8cd02 Proper casing for Dockerfile, fixes #361 2019-03-04 11:00:45 +01:00
Adam Stankiewicz
1ba88cc7d8 Add gradle compiler support, closes #358 2019-03-04 10:57:25 +01:00
Adam Stankiewicz
ca2fbfe038 Update vimrunner 2019-03-04 10:51:48 +01:00
Adam Stankiewicz
b06535a1c6 Update maintenance badge 2019-03-04 10:48:32 +01:00
Adam Stankiewicz
2c59360e01 Switch jsx provider to amadeus, closes #364 2019-03-04 10:46:19 +01:00
Adam Stankiewicz
4f0bde6d67 Add flatbuffers support, closes #368 2019-03-04 10:35:44 +01:00
Adam Stankiewicz
833b2fadd5 Add quake support, closes #372 2019-03-04 10:32:24 +01:00
Adam Stankiewicz
efa1a55dc7 Add meson support 2019-03-04 10:29:18 +01:00
Adam Stankiewicz
63922a1d1e Add idris support, closes #265 2019-03-04 10:14:37 +01:00
Adam Stankiewicz
0cd0b7f894 Add reason support, closes #266 2019-03-04 10:09:33 +01:00
Adam Stankiewicz
ec5884b1d0 Add jinja support, closes #269 2019-03-04 09:52:59 +01:00
Adam Stankiewicz
92f779dc77 Add groovy indent support, closes #324 2019-03-04 09:38:52 +01:00
Adam Stankiewicz
9d887c4b38 Add indent support for groovy 2019-03-04 09:38:12 +01:00
Adam Stankiewicz
edfcded9fd Add cuesheet support, closes #366 2019-03-04 09:37:07 +01:00
Adam Stankiewicz
c39dff0b10 Sort packs, closes #367 2019-03-04 09:34:05 +01:00
Adam Stankiewicz
288b0d2423 Remove orgmode plugin, #360 2019-03-04 09:30:55 +01:00
Adam Stankiewicz
1597b7b766 Change plugin guard for disabling, fixes #371 2019-03-04 09:28:35 +01:00
Adam Stankiewicz
ed677c34d5 Update 2019-03-04 09:15:44 +01:00
Adam Stankiewicz
c161994e96 Add pony support 2018-12-26 20:33:28 +01:00
Adam Stankiewicz
f238378221 Switch dockerfile provider 2018-12-26 20:22:36 +01:00
Adam Stankiewicz
0d5f661cfd Add moonscript support 2018-12-26 20:15:18 +01:00
Adam Stankiewicz
e99f88ff00 Add orgmode support 2018-12-26 11:36:38 +01:00
Adam Stankiewicz
cad135aa01 Add rst support 2018-12-26 11:22:36 +01:00
Adam Stankiewicz
678fc65514 Change i3 provider 2018-12-26 11:19:25 +01:00
Adam Stankiewicz
aad3df96e7 Update 2018-12-26 10:56:23 +01:00
Adam Stankiewicz
629a1e1c93 Update 2018-12-26 10:47:46 +01:00
Adam Stankiewicz
d43b70d939 Update 2018-12-26 10:41:57 +01:00
Derek Sifford
ec1c943069 explicitly set locale to C for sorting so README sorts same on all systems (#348) 2018-10-10 11:18:01 +02:00
Adam Stankiewicz
fd74d8b2b1 Update 2018-10-08 19:00:59 +02:00
Adam Stankiewicz
055f7710b6 Update dependencies 2018-07-08 15:16:28 +02:00
Dan Reif
33f610feb7 Changes to build for README.md updates
* Make the number of packages in the project easier to find.
* Replace `ed` with `awk` in `update_readme()`, the latter being (_arguably_!) more readable/less fragile.
2018-06-05 16:41:17 -07:00
Dan Reif
d4da7817ba Add FERM support (#311) 2018-06-05 14:22:06 -07:00
Dan Reif
f05b47874b Merge pull request #312 from 5paceToast/ferm
Add ferm support, fixes #311
2018-06-05 14:20:55 -07:00
Dan Reif
d362dca9b3 Merge pull request #315 from sheerun/periodic_rebuild_20180605
Update (periodic rebuild)
2018-06-05 14:18:09 -07:00
Dan Reif
1f34e0adcf Update (periodic rebuild) 2018-06-05 13:50:18 -07:00
Chloe Kudryavtsev
1832acfbe7 Add ferm support, fixes #311 2018-06-04 16:07:36 -04:00
Adam Stankiewicz
a26134de3c Add graphql_javascript_tags, fixes #303 2018-05-10 18:59:56 +02:00
Dan Reif
e2404449e4 Merge pull request #301 from timfeirg:feature/graphql 2018-05-08 10:28:33 -07:00
Dan Reif
dc8b2f45de applescript: vim-scripts -> mityu 2018-05-08 10:19:22 -07:00
CH-DanReif
aa5502c32e Merge pull request #286 from idbrii/improve-applescript
Update applescript to one that provides ftdetect
2018-05-08 10:18:12 -07:00
Dan Reif
e13e64d9c4 Update (periodic rebuild) 2018-05-08 10:17:30 -07:00
CH-DanReif
17a69ab565 Merge pull request #300 from sheerun/shellcheck_build_cleanup
Cleanup `build` syntax a bit, aided by `shellcheck(1)`
2018-05-08 10:04:17 -07:00
David Briscoe
da27f4c529 Update applescript to one that provides ftdetect
Current applescript defines a syntax file, but doesn't setup an
applescript filetype to apply the syntax.

This one does ftdetect and indent. Its ftplugin for running applescript
through osascript is excluded.

It uses an identical syntax file to the existing one.
2018-05-03 14:30:55 -07:00
CH-DanReif
cdd0ef41a6 And now it's 2018.... 2018-05-01 11:54:32 -07:00
Dan Reif
4be5fd3094 Cleanup build syntax a bit, aided by shellcheck(1) 2018-04-30 20:02:14 -07:00
Dan Reif
bde56bc8f7 Support autoload config file for golang
Fixes #299
2018-04-30 19:41:18 -07:00
Dan Reif
d9b11ed072 Allow use of # to skip packages being built (for testing) 2018-04-30 16:43:12 -07:00
Dan Reif
565b8b8a2c set et on build 2018-04-30 14:57:13 -07:00
Dan Reif
9f13bb7354 Update README with slightly more verbose contribution guidelines 2018-04-30 12:55:50 -07:00
Dan Reif
7408b2a34a Update (switch wdwoods->kurayama for systemd)
See https://github.com/sheerun/vim-polyglot/pull/267
2018-04-30 12:22:26 -07:00
Chris Weyl
faf6999c44 Use upstream of systemd plugin
While not immediately apparent, wdwoods is actually the author of the
original work kurayama's repo is based on.
2018-04-30 12:20:04 -07:00
CH-DanReif
e9fc23a0c1 Merge pull request #281 from djpowers/patch-1
Fix typo in README
2018-04-30 12:12:25 -07:00
Dan Reif
3e0c887365 Update (periodic rebuild)
I originally meant to run this before adding haproxy, but accidentally
pushed that into my branch.  If you'd like to see that content, it's at
414ad25c3a.
2018-04-30 12:00:42 -07:00
CH-DanReif
b4d7993e7e Add haproxy to polyglot, check for directory existence before globbing it (#291)
Add haproxy to polyglot, check for directory existence before globbing it
2018-04-30 11:55:17 -07:00
CH-DanReif
fb8c5fa8e9 Merge pull request #293 from CH-DanReif/disable_individual_ftdetect
Allow disabling individual ftdetects via `g:polyglot_disabled`
2018-04-30 11:19:20 -07:00
Dan Reif
ddc64d8db2 Don't actually update ftdetect/polyglot.vim
It was only in the original commit because I wanted to demonstrate the
changes that would be made.  Revert it back out now to make this a
clean, svelte, easy-to-merge PR.
2018-04-16 11:36:02 -07:00
Dan Reif
98f90bced5 Allow disabling of individual ftdetect rules via g:polyglot_disabled 2018-04-16 11:31:57 -07:00
David Briscoe
cab6866e21 Increase test file parsing timeout (#288)
There's been several PRs that inexplicably failed tests.

PR #279 (applescript) failed with "should parse test.em file" despite
the exact same PR #286 passing (I've removed one of them, sorry again
about that).

PR #268 (pandoc) failed with "parse test.erb file" but doesn't mess with
eruby.

PR #281 (readme) failed with "should parse test.jsx file" but it's a one
word change to the readme!

My assumption is that vim startup on Travis is near the edge of the
timeout so we're getting false failures. (I'm not familiar with
Vimrunner or rspec, but I assume this code is just testing that vim
doesn't throw errors one edit and automatically exits at the end of the
block.)
2018-04-03 12:30:51 +02:00
Dave Powers
a7e2b8a700 Fix typo in README 2018-03-08 16:34:01 -05:00
593 changed files with 41307 additions and 11105 deletions

18
.github/ISSUE_TEMPLATE/add-language.md vendored Normal file
View File

@@ -0,0 +1,18 @@
---
name: Add language
about: Add support for new language
title: ''
labels: ''
assignees: ''
---
<!--- vim-polyglot accepts only lightweight, maintained github-hosted vim plugins -->
**GitHub repository url**
**Is this plugin well maintained?**
**Is this plugin lightweight? (no advanced functionality, just indent and syntax support)**

View File

@@ -0,0 +1,20 @@
---
name: Add support for language
about: ''
title: ''
labels: ''
assignees: ''
---
**Is your feature request related to a problem? Please describe.**
A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
**Describe the solution you'd like**
A clear and concise description of what you want to happen.
**Describe alternatives you've considered**
A clear and concise description of any alternative solutions or features you've considered.
**Additional context**
Add any other context or screenshots about the feature request here.

16
.github/ISSUE_TEMPLATE/bug_report.md vendored Normal file
View File

@@ -0,0 +1,16 @@
---
name: Bug report
about: Report vim-polyglot bug
title: ''
labels: ''
assignees: ''
---
<!-- Vim-polyglot is not responsible for bugs of plugins it uses. Please report only bugs that happen when plugin is used as part of vim-polyglot and doesn't happen when just install the plugin -->
**Does this bug happen when you install plugin without vim-polyglot?**
**Describe the bug:**
**To Reproduce:**

View File

@@ -1,12 +1,11 @@
language: ruby
rvm:
- 1.9.3
- 2.6
sudo: false
addons:
apt:
packages:
- vim-gtk
before_script:
- "export DISPLAY=:99.0"
- "sh -e /etc/init.d/xvfb start"
script: bundle exec rspec --format=documentation
- "./build"
script: xvfb-run bundle exec rspec --format=documentation

View File

@@ -1,16 +1,21 @@
GEM
remote: https://rubygems.org/
specs:
diff-lcs (1.1.3)
rspec (2.12.0)
rspec-core (~> 2.12.0)
rspec-expectations (~> 2.12.0)
rspec-mocks (~> 2.12.0)
rspec-core (2.12.2)
rspec-expectations (2.12.1)
diff-lcs (~> 1.1.3)
rspec-mocks (2.12.0)
vimrunner (0.3.0)
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
@@ -18,3 +23,6 @@ PLATFORMS
DEPENDENCIES
rspec
vimrunner
BUNDLED WITH
1.16.2

View File

@@ -1,4 +1,6 @@
# vim-polyglot [![Build Status][travis-img-url]][travis-url] [![Maintenance](https://img.shields.io/maintenance/yes/2017.svg?maxAge=2592000)]()
![vim-polyglot](https://i.imgur.com/9RxQK6k.png)
[![Build Status][travis-img-url]][travis-url] [![Maintenance](https://img.shields.io/maintenance/yes/2019.svg?maxAge=2592000)]()
[travis-img-url]: https://travis-ci.org/sheerun/vim-polyglot.svg
[travis-url]: https://travis-ci.org/sheerun/vim-polyglot
@@ -8,7 +10,7 @@ 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 100+ times faster** than 100+ packages it consists of.
- It **installs and updates 120+ times faster** than the <!--Package Count-->146<!--/Package Count--> packages it consists of.
- 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`).
@@ -42,9 +44,11 @@ If you need full functionality of any plugin, please use it directly with your p
## Language packs
<!--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)
- [applescript](https://github.com/vim-scripts/applescript.vim) (syntax)
- [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)
@@ -56,103 +60,138 @@ If you need full functionality of any plugin, please use it directly with your p
- [cjsx](https://github.com/mtscout6/vim-cjsx) (syntax, ftplugin)
- [clojure](https://github.com/guns/vim-clojure-static) (syntax, indent, autoload, ftplugin)
- [cmake](https://github.com/pboettch/vim-cmake-syntax) (syntax, indent)
- [coffee-script](https://github.com/kchmck/vim-coffee-script) (syntax, indent, compiler, autoload, ftplugin)
- [coffee-script](https://github.com/kchmck/vim-coffee-script) (syntax, compiler, indent, autoload, ftplugin)
- [cql](https://github.com/elubow/cql-vim) (syntax)
- [cryptol](https://github.com/victoredwardocallaghan/cryptol.vim) (syntax, compiler, ftplugin)
- [crystal](https://github.com/rhysd/vim-crystal) (syntax, indent, autoload, ftplugin)
- [csv](https://github.com/chrisbra/csv.vim) (syntax, 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)
- [dockerfile](https://github.com/docker/docker) (syntax)
- [dhall](https://github.com/vmchale/dhall-vim) (syntax, 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)
- [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)
- [fish](https://github.com/dag/vim-fish) (syntax, indent, compiler, autoload, 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)
- [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)
- [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)
- [haml](https://github.com/sheerun/vim-haml) (syntax, indent, compiler, ftplugin)
- [handlebars](https://github.com/mustache/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)
- [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/PotatoesMaster/i3-vim-syntax) (syntax, ftplugin)
- [i3](https://github.com/mboughaba/i3config.vim) (syntax, ftplugin)
- [idris](https://github.com/idris-hackers/idris-vim) (syntax, indent, 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)
- [jenkins](https://github.com/martinda/Jenkinsfile-vim-syntax) (syntax, indent)
- [jinja](https://github.com/lepture/vim-jinja) (syntax, indent)
- [json5](https://github.com/GutenYe/json5.vim) (syntax)
- [json](https://github.com/elzr/vim-json) (syntax, indent, ftplugin)
- [jst](https://github.com/briancollins/vim-jst) (syntax, indent)
- [jsx](https://github.com/mxw/vim-jsx) (after)
- [jsx](https://github.com/MaxMEllon/vim-jsx-pretty) (autoload, after)
- [julia](https://github.com/JuliaEditorSupport/julia-vim) (syntax, indent, autoload, ftplugin)
- [kotlin](https://github.com/udalov/kotlin-vim) (syntax, indent)
- [kotlin](https://github.com/udalov/kotlin-vim) (syntax, indent, ftplugin)
- [latex](https://github.com/LaTeX-Box-Team/LaTeX-Box) (syntax, indent, ftplugin)
- [less](https://github.com/groenewege/vim-less) (syntax, indent, ftplugin)
- [liquid](https://github.com/tpope/vim-liquid) (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)
- [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)
- [mathematica](https://github.com/rsmenon/vim-mathematica) (syntax, 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)
- [nix](https://github.com/LnL7/vim-nix) (syntax, indent, ftplugin)
- [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/jrk/vim-ocaml) (syntax, indent, ftplugin)
- [ocaml](https://github.com/rgrinberg/vim-ocaml) (syntax, indent, compiler, ftplugin)
- [octave](https://github.com/vim-scripts/octave.vim--) (syntax)
- [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/exu/pgsql.vim) (syntax)
- [pgsql](https://github.com/lifepillar/pgsql.vim) (syntax, indent)
- [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)
- [protobuf](https://github.com/uarun/vim-protobuf) (syntax, indent)
- [pug](https://github.com/digitaltoad/vim-pug) (syntax, indent, ftplugin)
- [puppet](https://github.com/voxpupuli/vim-puppet) (syntax, indent, ftplugin)
- [puppet](https://github.com/rodjek/vim-puppet) (syntax, indent, autoload, ftplugin)
- [purescript](https://github.com/purescript-contrib/purescript-vim) (syntax, indent, ftplugin)
- [python-compiler](https://github.com/aliev/vim-compiler-python) (compiler, autoload)
- [python-ident](https://github.com/Vimjas/vim-python-pep8-indent) (indent)
- [python-indent](https://github.com/Vimjas/vim-python-pep8-indent) (indent)
- [python](https://github.com/vim-python/python-syntax) (syntax)
- [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, ftplugin)
- [racket](https://github.com/wlangstroth/vim-racket) (syntax, indent, autoload, 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)
- [sbt](https://github.com/derekwyatt/vim-sbt) (syntax)
- [scala](https://github.com/derekwyatt/vim-scala) (syntax, indent, compiler, ftplugin)
- [scss](https://github.com/cakebaker/scss-syntax.vim) (syntax, autoload, ftplugin)
- [scss](https://github.com/cakebaker/scss-syntax.vim) (syntax, indent, ftplugin)
- [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)
- [stylus](https://github.com/wavded/vim-stylus) (syntax, indent, ftplugin)
- [svelte](https://github.com/evanleck/vim-svelte) (syntax, indent)
- [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)
- [sxhkd](https://github.com/baskerville/vim-sxhkdrc) (syntax)
- [systemd](https://github.com/kurayama/systemd-vim-syntax) (syntax)
- [terraform](https://github.com/hashivim/vim-terraform) (syntax, indent, ftplugin)
- [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)
- [thrift](https://github.com/solarnz/thrift.vim) (syntax)
- [tmux](https://github.com/keith/tmux.vim) (syntax, ftplugin)
- [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/leafgarland/typescript-vim) (syntax, indent, compiler, ftplugin)
- [typescript](https://github.com/HerringtonDarkholme/yats.vim) (syntax, indent, compiler, ftplugin)
- [vala](https://github.com/arrufat/vala.vim) (syntax, indent)
- [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)
- [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)
- [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)
<!--/Language Packs-->
## Updating
@@ -169,13 +208,18 @@ Individual language packs can be disabled by setting `g:polyglot_disabled` as fo
let g:polyglot_disabled = ['css']
```
Note that disabiling 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.
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.
## Contributing
Language packs are periodically updated using automated `build` script.
Feel free to add your language, and send pull-request.
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.
## License

View File

@@ -1,6 +0,0 @@
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'rspec') == -1
autocmd BufReadPost,BufNewFile *_spec.rb set syntax=rspec
autocmd BufReadPost,BufNewFile *_spec.rb setlocal commentstring=#\ %s
endif

5
after/ftplugin/idris.vim Normal file
View File

@@ -0,0 +1,5 @@
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'idris') == -1
setlocal iskeyword+='
endif

View File

@@ -14,3 +14,38 @@ else
endif
endif
if !exists('g:polyglot_disabled') || !(index(g:polyglot_disabled, 'typescript') != -1 || index(g:polyglot_disabled, 'typescript') != -1 || index(g:polyglot_disabled, 'jsx') != -1)
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" Vim ftplugin file
"
" Language: javascript.jsx
" Maintainer: MaxMEllon <maxmellon1994@gmail.com>
"
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" modified from html.vim
" For matchit plugin
if exists("loaded_matchit")
let b:match_ignorecase = 0
let b:match_words = '(:),\[:\],{:},<:>,' .
\ '<\@<=\([^/][^ \t>]*\)[^>]*\%(>\|$\):<\@<=/\1>'
endif
" For andymass/vim-matchup plugin
if exists("loaded_matchup")
setlocal matchpairs=(:),{:},[:],<:>
let b:match_words = '<\@<=\([^/][^ \t>]*\)\g{hlend}[^>]*\%(/\@<!>\|$\):<\@<=/\1>'
let b:match_skip = 's:comment\|string'
endif
let b:original_commentstring = &l:commentstring
augroup jsx_comment
autocmd! CursorMoved <buffer>
autocmd CursorMoved <buffer> call jsx_pretty#comment#update_commentstring(b:original_commentstring)
augroup end
setlocal suffixesadd+=.jsx
endif

View File

@@ -1,20 +0,0 @@
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'jsx') == -1
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" Vim ftplugin file
"
" Language: JSX (JavaScript)
" Maintainer: Max Wang <mxawng@gmail.com>
"
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" modified from html.vim
if exists("loaded_matchit")
let b:match_ignorecase = 0
let b:match_words = '(:),\[:\],{:},<:>,' .
\ '<\@<=\([^/][^ \t>]*\)[^>]*\%(/\@<!>\|$\):<\@<=/\1>'
endif
setlocal suffixesadd+=.jsx
endif

477
after/ftplugin/llvm.vim Normal file
View File

@@ -0,0 +1,477 @@
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'llvm') == -1
" Copyright (c) 2018 rhysd
"
" 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.
if get(g:, 'llvm_extends_official', 1) == 0
finish
endif
let g:llvm_ext_no_mapping = get(g:, 'llvm_ext_no_mapping', 0)
let g:llvm_ext_lli_executable = get(g:, 'llvm_ext_lli_executable', 'lli')
let s:KIND_BLOCK_PREC = 0
let s:KIND_BLOCK_FOLLOW = 1
let s:KIND_FUNC_BEGIN = 2
let s:KIND_FUNC_END = 3
function! s:section_delim_at(lnum) abort
let line = getline(a:lnum)
let m = matchlist(line, '^\([^:]\+\):\%( \+; preds = \(%.\+\)\)\=$')
if !empty(m)
if m[2] ==# ''
return [s:KIND_BLOCK_PREC, m[1]]
else
return [s:KIND_BLOCK_FOLLOW, m[1], split(m[2], ',\s*')]
endif
endif
if line =~# '^}$'
return [s:KIND_FUNC_END]
endif
if line =~# '^define\>'
return [s:KIND_FUNC_BEGIN]
endif
return []
endfunction
function! s:is_section_delim(line, func_delim) abort
let sec = s:section_delim_at(a:line)
if empty(sec)
return 0
endif
let kind = sec[0]
return kind == s:KIND_BLOCK_PREC || kind == s:KIND_BLOCK_FOLLOW || kind == func_delim
endfunction
function! s:next_section(stop_func_begin) abort
let func_delim = a:stop_func_begin ? s:KIND_FUNC_BEGIN : s:KIND_FUNC_END
let last = line('$') - 1
let line = line('.')
while line < last
let line += 1
if s:is_section_delim(line, func_delim)
call cursor(line, col('.'))
return
endif
endwhile
endfunction
function! s:prev_section(stop_func_begin) abort
let func_delim = a:stop_func_begin ? s:KIND_FUNC_BEGIN : s:KIND_FUNC_END
let line = line('.')
while line > 1
let line -= 1
if s:is_section_delim(line, func_delim)
call cursor(line, col('.'))
return
endif
endwhile
endfunction
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>
endif
function! s:function_range_at(linum) abort
let line = a:linum
while line >= 1
let s = getline(line)
if s =~# '^define\>'
let start = line
break
elseif s =~# '^}$'
return []
endif
let line -= 1
endwhile
if line < 1
return []
endif
let line = a:linum
let last = line('$')
while line <= last
let s = getline(line)
if s =~# '^}$'
let end = line
break
elseif s =~# '^define\>'
return []
endif
let line += 1
endwhile
if line > last
return []
endif
return [start, end]
endfunction
function! s:blocks_graph_at(linum) abort
let func_range = s:function_range_at(a:linum)
if empty(func_range)
return {}
endif
let line = func_range[0] + 1
let last = func_range[1] - 1
let graph = {}
while line <= last
let block = s:section_delim_at(line)
if empty(block)
let line += 1
continue
endif
let block_name = '%' . block[1]
if block[0] == s:KIND_BLOCK_PREC
let graph[block_name] = {'line': line, 'follows': [], 'preds': []}
elseif block[0] == s:KIND_BLOCK_FOLLOW
let graph[block_name] = {'line': line, 'follows': [], 'preds': block[2]}
for follow in block[2]
call add(graph[follow].follows, block_name)
endfor
else
echoerr 'unreachable'
endif
let line += 1
endwhile
return graph
endfunction
function! s:find_pred_block(linum) abort
let sec = s:section_delim_at(a:linum)
if empty(sec) || sec[0] != s:KIND_BLOCK_PREC && sec[0] != s:KIND_BLOCK_FOLLOW
throw 'No block is starting at line ' . a:linum
endif
if sec[0] != s:KIND_BLOCK_FOLLOW
throw printf("Block '%s' has no pred block", sec[1])
endif
let block_name = '%' . sec[1]
let pred_block = sec[2][0]
let graph = s:blocks_graph_at(a:linum)
if empty(graph)
throw 'No block is found in function at line ' . a:linum
endif
if !has_key(graph, pred_block)
throw printf("Block '%s' (pred block of '%s') not found in function", pred_block, block_name)
endif
return graph[pred_block]
endfunction
function! s:move_to_pred_block() abort
try
let b = s:find_pred_block(line('.'))
call cursor(b.line, col('.'))
catch
echohl ErrorMsg | echom v:exception | echohl None
endtry
endfunction
function! s:find_following_block(linum) abort
let sec = s:section_delim_at(a:linum)
if empty(sec) || sec[0] != s:KIND_BLOCK_PREC && sec[0] != s:KIND_BLOCK_FOLLOW
throw 'No block is starting at line ' . a:linum
endif
let block_name = '%' . sec[1]
let graph = s:blocks_graph_at(a:linum)
if empty(graph)
throw 'No block is found in function at line ' . a:linum
endif
let follows = graph[block_name].follows
if empty(follows)
throw printf("Block '%s' has no following block", block_name)
endif
echom printf("Block '%s' has %d following blocks: %s", block_name, len(follows), join(follows, ', '))
if !has_key(graph, follows[0])
throw printf("Block '%s' is not defined in function at line %d", follows[0], a:linum)
endif
return graph[follows[0]]
endfunction
function! s:move_to_following_block() abort
try
let b = s:find_following_block(line('.'))
call cursor(b.line, col('.'))
catch
echohl ErrorMsg | echom v:exception | echohl None
endtry
endfunction
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>
endif
function! s:get_func_identifiers(line) abort
let idx = stridx(a:line, '@')
if idx == -1
" Invalid signature
return []
endif
" e.g. define internal i32 @foo(...) { -> @foo(...) {
let sig = a:line[idx:]
let idx = stridx(sig, '(')
if idx == -1
" Invalid signature
return []
endif
" @foo(...) { -> @foo
let idents = [sig[:idx-1]]
" @foo(...) { -> ...) {
let params = sig[idx+1:]
let idx = strridx(sig, ')')
if idx == -1
return idents
endif
" ...) { -> ...
let params = params[:idx-1]
" Gather parameters in function signature
while params !=# ''
let m = matchlist(params, '^[^%]*\(%\%("[^"]\+"\|[[:alnum:]_.]\+\)\)\s*\(.*\)$')
if empty(m)
break
endif
let idents += [m[1]]
let params = m[2]
endwhile
return idents
endfunction
function! s:get_identifiers(line) abort
" Registers and type defs
let m = matchlist(a:line, '^\s*\(%\S\+\)\s\+=')
if !empty(m)
return [m[1]]
endif
" Constants
let m = matchlist(a:line, '^\(@\S\+\)\s\+=.\+\<constant\>')
if !empty(m)
return [m[1]]
endif
" Labels for basic blocks
let m = matchlist(a:line, '^\([^:]\+\):\%(\s\+; preds = .\+\)\=$')
if !empty(m)
return ['%' . m[1]]
endif
" Meta variables
let m = matchlist(a:line, '^\(!\S\+\)\s\+=')
if !empty(m)
return [m[1]]
endif
" Attributes
let m = matchlist(a:line, '^attributes\s\+\(#\d\+\)\s\+=')
if !empty(m)
return [m[1]]
endif
if a:line =~# '^\%(declare\|define\)\>'
return s:get_func_identifiers(a:line)
endif
return []
endfunction
function! s:extract_identifier(word) abort
if strlen(a:word) <= 1
return ''
endif
let prefix = a:word[0]
if prefix ==# '@' || prefix ==# '%' || prefix ==# '!'
if prefix ==# '!' && a:word[1] ==# '{'
return ''
endif
if a:word[1] == '"'
let idx = stridx(a:word, '"', 2)
if idx == -1
return ''
endif
" @"foo" or %"foo"
return a:word[:idx]
else
" @foo or %foo
return matchstr(a:word, '^[@%!][[:alnum:]_.]\+')
endif
endif
if prefix ==# '#'
return matchstr(a:word, '^#\d\+')
endif
return ''
endfunction
function! s:jump_to_identifier_at(linum, ident) abort
let line = getline(a:linum)
let column = stridx(line, a:ident) + 1
if column == 0
let column = col('.')
endif
call cursor(a:linum, column)
endfunction
function! s:browser_open_command() abort
if exists('g:llvm_ext_browser_open_command')
return g:llvm_ext_browser_open_command
endif
if exists('s:browser_opener')
return s:browser_opener
endif
let s:browser_opener = ''
if has('mac')
let s:browser_opener = 'open'
elseif has('win32') || has('win64')
let s:browser_opener = 'cmd /q /c start ""'
else
for cmd in ['xdg-open', 'chromium', 'google-chrome', 'firefox']
if executable(cmd)
let s:browser_opener = cmd
break
endif
endfor
endif
return s:browser_opener
endfunction
function! s:open_browser(url) abort
let cmd = s:browser_open_command()
if cmd ==# ''
throw "Failed to open a browser. I don't know how to open a browser: Please set g:llvm_ext_browser_open_command"
endif
let cmdline = cmd . ' ' . shellescape(a:url)
let out = system(cmdline)
if v:shell_error
throw printf("Failed to open a browser with command '%s': %s", cmdline, out)
endif
endfunction
function! s:goto_definition() abort
" Open language reference manual under the cursor in browser
let syn_name = synIDattr(synID(line('.'),col('.'),1),'name')
if syn_name ==# 'llvmStatement'
let word = expand('<cword>')
if word !=# ''
try
" Open browser assuming a word under the cursor is an instruction
call s:open_browser('https://llvm.org/docs/LangRef.html#' . word . '-instruction')
catch /^Failed to open a browser/
echohl ErrorMsg | echom v:exception | echohl None
endtry
endif
return
endif
" XXX: This does not support identifiers which contains spaces
let word = expand('<cWORD>')
if word ==# ''
echom 'No identifier found under the cursor'
return
endif
let ident = s:extract_identifier(word)
if ident ==# ''
echom 'No identifier found under the cursor'
return
endif
" Definition tends to be near its usages. Look back at first.
let line = line('.')
while line > 0
for found in s:get_identifiers(getline(line))
if ident ==# found
call s:jump_to_identifier_at(line, ident)
return
endif
endfor
let line -= 1
endwhile
let line = line('.') + 1
let last = line('$')
while line <= last
for found in s:get_identifiers(getline(line))
if ident ==# found
call s:jump_to_identifier_at(line, ident)
return
endif
endfor
let line += 1
endwhile
echom "No definition for '" . ident . "' found"
endfunction
if !g:llvm_ext_no_mapping
nnoremap <buffer><silent>K :<C-u>call <SID>goto_definition()<CR>
endif
function! s:run_lli(...) abort
if !has('job') || !has('channel') || !has('terminal')
echohl ErrorMsg
echomsg ':LLI requires terminal feature. Please update your Vim to 8.0+'
echohl None
return
endif
if !executable(g:llvm_ext_lli_executable)
echohl ErrorMsg
echomsg g:llvm_ext_lli_executable . ' is not executable. Please set g:llvm_ext_lli_executable'
echohl None
return
endif
if a:0 > 0
let bufnr = term_start([g:llvm_ext_lli_executable, a:1])
echo 'Run lli in termnal buffer(' . bufnr . ')'
return
endif
let tmpfile = tempname()
call writefile(getline(1, '$'), tmpfile)
let Cleanup = {ch -> filereadable(tmpfile) ? delete(tmpfile) : 0}
let bufnr = term_start([g:llvm_ext_lli_executable, tmpfile], {'close_cb': Cleanup, 'exit_cb': Cleanup})
echo 'Run lli in termnal buffer(' . bufnr . ')'
endfunction
if !exists(':LLI')
command! -buffer -nargs=? -bar -complete=file LLI call <SID>run_lli(<f-args>)
endif
endif

View File

@@ -4,17 +4,8 @@ if !exists('g:puppet_align_hashes')
let g:puppet_align_hashes = 1
endif
if g:puppet_align_hashes && exists(':Tabularize')
inoremap <buffer> <silent> > ><Esc>:call <SID>puppetalign()<CR>a
function! s:puppetalign()
let p = '^\s*\w+\s*[=+]>.*$'
let column = strlen(substitute(getline('.')[0:col('.')],'\([^=]\|=[^>]\)','','g'))
let position = strlen(matchstr(getline('.')[0:col('.')],'.*=>\s*\zs.*'))
Tabularize /=>/l1
normal! 0
echo repeat('\([^=]\|=[^>]\)*=>',column).'\s\{-\}'.repeat('.',position)
call search(repeat('\([^=]\|=[^>]\)*=>',column).'\s\{-\}'.repeat('.',position),'ce',line('.'))
endfunction
if g:puppet_align_hashes
inoremap <buffer> <silent> => =><Esc>:call puppet#align#AlignHashrockets()<CR>$a
endif
endif

View File

@@ -1,78 +0,0 @@
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'terraform') == -1
if !exists('g:terraform_align')
let g:terraform_align = 0
endif
if !exists('g:terraform_remap_spacebar')
let g:terraform_remap_spacebar = 0
endif
if !exists('g:terraform_fold_sections')
let g:terraform_fold_sections = 0
endif
if g:terraform_align && exists(':Tabularize')
inoremap <buffer> <silent> = =<Esc>:call <SID>terraformalign()<CR>a
function! s:terraformalign()
let p = '^.*=[^>]*$'
if exists(':Tabularize') && getline('.') =~# '^.*=' && (getline(line('.')-1) =~# p || getline(line('.')+1) =~# p)
let column = strlen(substitute(getline('.')[0:col('.')],'[^=]','','g'))
let position = strlen(matchstr(getline('.')[0:col('.')],'.*=\s*\zs.*'))
Tabularize/=/l1
normal! 0
call search(repeat('[^=]*=',column).'\s\{-\}'.repeat('.',position),'ce',line('.'))
endif
endfunction
endif
if g:terraform_fold_sections
function! TerraformFolds()
let thisline = getline(v:lnum)
if match(thisline, '^resource') >= 0
return ">1"
elseif match(thisline, '^provider') >= 0
return ">1"
elseif match(thisline, '^module') >= 0
return ">1"
elseif match(thisline, '^variable') >= 0
return ">1"
elseif match(thisline, '^output') >= 0
return ">1"
elseif match(thisline, '^data') >= 0
return ">1"
elseif match(thisline, '^terraform') >= 0
return ">1"
elseif match(thisline, '^locals') >= 0
return ">1"
else
return "="
endif
endfunction
setlocal foldmethod=expr
setlocal foldexpr=TerraformFolds()
setlocal foldlevel=1
function! TerraformFoldText()
let foldsize = (v:foldend-v:foldstart)
return getline(v:foldstart).' ('.foldsize.' lines)'
endfunction
setlocal foldtext=TerraformFoldText()
endif
" Re-map the space bar to fold and unfold
if get(g:, "terraform_remap_spacebar", 1)
"inoremap <space> <C-O>za
nnoremap <space> za
onoremap <space> <C-C>za
vnoremap <space> zf
endif
" Match the identation put in place by Hashicorp and :TerraformFmt, https://github.com/hashivim/vim-terraform/issues/21
if get(g:, "terraform_align", 1)
setlocal tabstop=2
setlocal softtabstop=2
setlocal shiftwidth=2
endif
endif

View File

@@ -0,0 +1,27 @@
if !exists('g:polyglot_disabled') || !(index(g:polyglot_disabled, 'typescript') != -1 || index(g:polyglot_disabled, 'typescript') != -1 || index(g:polyglot_disabled, 'jsx') != -1)
" modified from html.vim
" For matchit plugin
if exists("loaded_matchit")
let b:match_ignorecase = 0
let b:match_words = '(:),\[:\],{:},<:>,' .
\ '<\@<=\([^/][^ \t>]*\)[^>]*\%(>\|$\):<\@<=/\1>'
endif
" For andymass/vim-matchup plugin
if exists("loaded_matchup")
setlocal matchpairs=(:),{:},[:],<:>
let b:match_words = '<\@<=\([^/][^ \t>]*\)\g{hlend}[^>]*\%(/\@<!>\|$\):<\@<=/\1>'
let b:match_skip = 's:comment\|string'
endif
let b:original_commentstring = &l:commentstring
augroup jsx_comment
autocmd! CursorMoved <buffer>
autocmd CursorMoved <buffer> call jsx_pretty#comment#update_commentstring(b:original_commentstring)
augroup end
setlocal suffixesadd+=.tsx
endif

View File

@@ -1,37 +0,0 @@
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'coffee-script') == -1
" Language: CoffeeScript
" Maintainer: Mick Koch <mick@kochm.co>
" URL: http://github.com/kchmck/vim-coffee-script
" License: WTFPL
" Load the coffee and html indent functions.
silent! unlet b:did_indent
runtime indent/coffee.vim
let s:coffeeIndentExpr = &l:indentexpr
" Load html last so it can overwrite coffee settings.
silent! unlet b:did_indent
runtime indent/html.vim
let s:htmlIndentExpr = &l:indentexpr
" Inject our wrapper indent function.
setlocal indentexpr=GetCoffeeHtmlIndent(v:lnum)
function! GetCoffeeHtmlIndent(curlinenum)
" See if we're inside a coffeescript block.
let scriptlnum = searchpair('<script [^>]*type=[''"]\?text/coffeescript[''"]\?[^>]*>', '',
\ '</script>', 'bWn')
let prevlnum = prevnonblank(a:curlinenum)
" If we're in the script block and the previous line isn't the script tag
" itself, use coffee indenting.
if scriptlnum && scriptlnum != prevlnum
exec 'return ' s:coffeeIndentExpr
endif
" Otherwise use html indenting.
exec 'return ' s:htmlIndentExpr
endfunction
endif

View File

@@ -0,0 +1,33 @@
if !exists('g:polyglot_disabled') || !(index(g:polyglot_disabled, 'typescript') != -1 || index(g:polyglot_disabled, 'typescript') != -1 || index(g:polyglot_disabled, 'jsx') != -1)
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" Vim indent file
"
" Language: javascript.jsx
" Maintainer: MaxMellon <maxmellon1994@gmail.com>
"
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
if exists('b:did_indent')
let s:did_indent = b:did_indent
unlet b:did_indent
endif
let s:keepcpo = &cpo
set cpo&vim
if exists('s:did_indent')
let b:did_indent = s:did_indent
endif
setlocal indentexpr=GetJsxIndent()
setlocal indentkeys=0{,0},0),0],0\,,!^F,o,O,e,*<Return>,<>>,<<>,/
function! GetJsxIndent()
return jsx_pretty#indent#get(function('GetJavascriptIndent'))
endfunction
let &cpo = s:keepcpo
unlet s:keepcpo
endif

View File

@@ -0,0 +1,34 @@
if !exists('g:polyglot_disabled') || !(index(g:polyglot_disabled, 'typescript') != -1 || index(g:polyglot_disabled, 'typescript') != -1 || index(g:polyglot_disabled, 'jsx') != -1)
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" Vim indent file
"
" Language: typescript.jsx
" Maintainer: MaxMellon <maxmellon1994@gmail.com>
" Depends: leafgarland/typescript-vim
"
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
if exists('b:did_indent')
let s:did_indent = b:did_indent
unlet b:did_indent
endif
let s:keepcpo = &cpo
set cpo&vim
if exists('s:did_indent')
let b:did_indent = s:did_indent
endif
setlocal indentexpr=GetJsxIndent()
setlocal indentkeys=0{,0},0),0],0\,,!^F,o,O,e,*<Return>,<>>,<<>,/
function! GetJsxIndent()
return jsx_pretty#indent#get(function('GetTypescriptIndent'))
endfunction
let &cpo = s:keepcpo
unlet s:keepcpo
endif

View File

@@ -4,7 +4,7 @@ if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'c++11') == -1
" Language: C++ Additions
" Maintainer: Jon Haggblad <jon@haeggblad.com>
" URL: http://www.haeggblad.com
" Last Change: 1 Feb 2018
" Last Change: 29 Jun 2019
" Version: 0.6
" Changelog:
" 0.1 - initial version.
@@ -962,6 +962,12 @@ if !exists("cpp_no_cpp11")
syntax keyword cppSTLtype atomic_uintmax_t
syntax keyword cppSTLconstant ATOMIC_FLAG_INIT
syntax keyword cppSTLenum memory_order
syntax keyword cppSTLtype memory_order_relaxed
syntax keyword cppSTLtype memory_order_consume
syntax keyword cppSTLtype memory_order_acquire
syntax keyword cppSTLtype memory_order_release
syntax keyword cppSTLtype memory_order_acq_rel
syntax keyword cppSTLtype memory_order_seq_cst
syntax keyword cppSTLfunction is_lock_free
syntax keyword cppSTLfunction compare_exchange_weak
syntax keyword cppSTLfunction compare_exchange_strong
@@ -1981,6 +1987,9 @@ 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
endif

View File

@@ -1,27 +0,0 @@
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'coffee-script') == -1
" Language: CoffeeScript
" Maintainer: Sven Felix Oberquelle <Svelix.Github@gmail.com>
" URL: http://github.com/kchmck/vim-coffee-script
" License: WTFPL
if exists('b:current_syntax')
let s:current_syntax_save = b:current_syntax
endif
" Inherit coffee from html so coffeeComment isn't redefined and given higher
" priority than hamlInterpolation.
syn cluster hamlCoffeescript contains=@htmlCoffeeScript
syn region hamlCoffeescriptFilter matchgroup=hamlFilter
\ start="^\z(\s*\):coffee\z(script\)\?\s*$"
\ end="^\%(\z1 \| *$\)\@!"
\ contains=@hamlCoffeeScript,hamlInterpolation
\ keepend
if exists('s:current_syntax_save')
let b:current_syntax = s:current_syntax_save
unlet s:current_syntax_save
endif
endif

17
after/syntax/haskell.vim Normal file
View File

@@ -0,0 +1,17 @@
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'dhall') == -1
" store and remove current syntax value
let old_syntax = b:current_syntax
unlet b:current_syntax
syn include @dhall syntax/dhall.vim
unlet b:current_syntax
syn region dhallBlock matchgroup=quasiQuote start=/\[\$\?staticDhallExpression|/ end=/|\]/ contains=@dhall
hi def link quasiQuote Underlined
" restore current syntax value
let b:current_syntax = old_syntax
endif

View File

@@ -1,40 +1,3 @@
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'coffee-script') == -1
" Language: CoffeeScript
" Maintainer: Mick Koch <mick@kochm.co>
" URL: http://github.com/kchmck/vim-coffee-script
" License: WTFPL
if exists('b:current_syntax')
let s:current_syntax_save = b:current_syntax
endif
" Syntax highlighting for text/coffeescript script tags
syn include @htmlCoffeeScript syntax/coffee.vim
syn region coffeeScript start=#<script [^>]*type=['"]\?text/coffeescript['"]\?[^>]*>#
\ end=#</script>#me=s-1 keepend
\ contains=@htmlCoffeeScript,htmlScriptTag,@htmlPreproc
\ containedin=htmlHead
if exists('s:current_syntax_save')
let b:current_syntax = s:current_syntax_save
unlet s:current_syntax_save
endif
endif
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'glsl') == -1
" Language: OpenGL Shading Language
" Maintainer: Sergey Tikhomirov <sergey@tikhomirov.io>
syn include @GLSL syntax/glsl.vim
syn region ShaderScript
\ start="<script [^>]*type=\('\|\"\)x-shader/x-\(vertex\|fragment\)\('\|\"\)[^>]*>"
\ keepend
\ end="</script>"me=s-1
\ contains=@GLSL,htmlScriptTag,@htmlPreproc
endif
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'html5') == -1
" Vim syntax file
@@ -51,33 +14,3 @@ syntax region htmlComment start=+<!--+ end=+-->+ contains=@Spell
syntax region htmlComment start=+<!DOCTYPE+ keepend end=+>+
endif
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'less') == -1
if !exists("g:less_html_style_tags")
let g:less_html_style_tags = 1
endif
if !g:less_html_style_tags
finish
endif
" Unset (but preserve) so that less will run.
if exists("b:current_syntax")
let s:pre_less_cur_syn = b:current_syntax
unlet b:current_syntax
endif
" Inspired by code from github.com/kchmck/vim-coffee-script
" and the html syntax file included with vim 7.4.
syn include @htmlLess syntax/less.vim
" We have to explicitly add to htmlHead (containedin) as that region specifies 'contains'.
syn region lessStyle start=+<style [^>]*type *=[^>]*text/less[^>]*>+ keepend end=+</style>+ contains=@htmlLess,htmlTag,htmlEndTag,htmlCssStyleComment,@htmlPreproc containedin=htmlHead
" Reset since 'less' isn't really the current_syntax.
if exists("s:pre_less_cur_syn")
let b:current_syntax = s:pre_less_cur_syn
endif
endif

82
after/syntax/idris.vim Normal file
View File

@@ -0,0 +1,82 @@
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'idris') == -1
" This script allows for unicode concealing of certain characters
" For instance -> goes to →
"
" It needs vim >= 7.3, set nocompatible, set enc=utf-8
"
" If you want to turn this on, let g:idris_conceal = 1
if !exists('g:idris_conceal') || !has('conceal') || &enc != 'utf-8'
finish
endif
" vim: set fenc=utf-8:
syntax match idrNiceOperator "\\\ze[[:alpha:][:space:]_([]" conceal cchar=λ
syntax match idrNiceOperator "<-" conceal cchar=
syntax match idrNiceOperator "->" conceal cchar=
syntax match idrNiceOperator "\<sum\>" conceal cchar=
syntax match idrNiceOperator "\<product\>" conceal cchar=
syntax match idrNiceOperator "\<sqrt\>" conceal cchar=
syntax match idrNiceOperator "\<pi\>" conceal cchar=π
syntax match idrNiceOperator "==" conceal cchar=
syntax match idrNiceOperator "\/=" conceal cchar=
let s:extraConceal = 1
let s:doubleArrow = 1
" Set this to 0 to use the more technically correct arrow from bar
" Some windows font don't support some of the characters,
" so if they are the main font, we don't load them :)
if has("win32")
let s:incompleteFont = [ 'Consolas'
\ , 'Lucida Console'
\ , 'Courier New'
\ ]
let s:mainfont = substitute( &guifont, '^\([^:,]\+\).*', '\1', '')
for s:fontName in s:incompleteFont
if s:mainfont ==? s:fontName
let s:extraConceal = 0
break
endif
endfor
endif
if s:extraConceal
syntax match idrNiceOperator "Void" conceal cchar=
" Match greater than and lower than w/o messing with Kleisli composition
syntax match idrNiceOperator "<=\ze[^<]" conceal cchar=
syntax match idrNiceOperator ">=\ze[^>]" conceal cchar=
if s:doubleArrow
syntax match idrNiceOperator "=>" conceal cchar=
else
syntax match idrNiceOperator "=>" conceal cchar=
endif
syntax match idrNiceOperator "=\zs<<" conceal cchar=«
syntax match idrNiceOperator "++" conceal cchar=
syntax match idrNiceOperator "::" conceal cchar=
syntax match idrNiceOperator "-<" conceal cchar=
syntax match idrNiceOperator ">-" conceal cchar=
syntax match idrNiceOperator "-<<" conceal cchar=
syntax match idrNiceOperator ">>-" conceal cchar=
" Only replace the dot, avoid taking spaces around.
syntax match idrNiceOperator /\s\.\s/ms=s+1,me=e-1 conceal cchar=
syntax match idrNiceOperator "\.\." conceal cchar=
syntax match idrNiceOperator "`elem`" conceal cchar=
syntax match idrNiceOperator "`notElem`" conceal cchar=
endif
hi link idrNiceOperator Operator
hi! link Conceal Operator
setlocal conceallevel=2
endif

View File

@@ -0,0 +1,62 @@
if !exists('g:polyglot_disabled') || !(index(g:polyglot_disabled, 'typescript') != -1 || index(g:polyglot_disabled, 'typescript') != -1 || index(g:polyglot_disabled, 'jsx') != -1)
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" Vim syntax file
"
" Language: javascript.jsx
" Maintainer: MaxMellon <maxmellon1994@gmail.com>
"
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
let s:jsx_cpo = &cpo
set cpo&vim
syntax case match
if exists('b:current_syntax')
let s:current_syntax = b:current_syntax
unlet b:current_syntax
endif
if exists('s:current_syntax')
let b:current_syntax = s:current_syntax
endif
if hlexists("jsNoise") " 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
" add a javaScriptBlock group for build-in syntax
syntax region javaScriptBlockBuildIn
\ contained
\ matchgroup=javaScriptBraces
\ start="{"
\ end="}"
\ extend
\ contains=javaScriptBlockBuildIn,@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.*
endif
runtime syntax/jsx_pretty.vim
let b:current_syntax = 'javascript.jsx'
let &cpo = s:jsx_cpo
unlet s:jsx_cpo
endif

View File

@@ -0,0 +1,27 @@
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'graphql') == -1
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
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'
" 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
syn cluster jsExpression add=graphqlTaggedTemplate
syn cluster graphqlTaggedTemplate add=graphqlTemplateString
endif

216
after/syntax/jsx_pretty.vim Normal file
View File

@@ -0,0 +1,216 @@
if !exists('g:polyglot_disabled') || !(index(g:polyglot_disabled, 'typescript') != -1 || index(g:polyglot_disabled, 'typescript') != -1 || index(g:polyglot_disabled, 'jsx') != -1)
let s:highlight_close_tag = get(g:, 'vim_jsx_pretty_highlight_close_tag', 0)
" <tag id="sample">
" ~~~~~~~~~~~~~~~~~
" and self close tag
" <tag id="sample" />
" ~~~~~~~~~~~~~~~~~~~
syntax region jsxTag
\ start=+<+
\ matchgroup=jsxOpenPunct
\ end=+>+
\ matchgroup=NONE
\ end=+\(/\_s*>\)\@=+
\ contained
\ contains=jsxOpenTag,jsxEscapeJs,jsxAttrib,jsComment,@javascriptComments,javaScriptLineComment,javaScriptComment,typescriptLineComment,typescriptComment,jsxSpreadOperator
\ keepend
\ extend
" <tag></tag>
" ~~~~~~~~~~~
" and fragment
" <></>
" ~~~~~
" and self close tag
" <tag />
" ~~~~~~~
syntax region jsxElement
\ start=+<\_s*\(>\|\${\|\z(\<[-:_\.\$0-9A-Za-z]\+\>\)\)+
\ end=+/\_s*>+
\ end=+<\_s*/\_s*\z1\_s*>+
\ contains=jsxElement,jsxEscapeJs,jsxTag,jsxComment,jsxCloseString,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
" <>
" ~~
exe 'syntax region jsxOpenTag
\ matchgroup=jsxOpenPunct
\ start=+<+
\ end=+>+
\ matchgroup=NONE
\ end=+\>+
\ contained
\ contains=jsxTagName
\ nextgroup=jsxAttrib
\ skipwhite
\ skipempty ' .(s:highlight_close_tag ? 'transparent' : '')
" <foo.bar>
" ~
syntax match jsxDot +\.+ contained display
" <foo:bar>
" ~
syntax match jsxNamespace +:+ contained display
" <tag id="sample">
" ~
syntax match jsxEqual +=+ contained display nextgroup=jsxString,jsxEscapeJs,jsxRegion skipwhite
" <tag />
" ~~
syntax match jsxCloseString +/\_s*>+ contained
" </tag>
" ~~~~~~
" and fragment close tag
" </>
" ~~~
syntax region jsxCloseTag
\ matchgroup=jsxClosePunct
\ start=+<\_s*/+
\ end=+>+
\ contained
\ contains=jsxTagName
" <tag key={this.props.key}>
" ~~~
syntax match jsxAttrib
\ +\<[-A-Za-z_][-:_\$0-9A-Za-z]*\>+
\ contained
\ nextgroup=jsxEqual
\ skipwhite
\ skipempty
\ contains=jsxAttribKeyword
\ display
" <MyComponent ...>
" ~~~~~~~~~~~
" NOT
" <someCamel ...>
" ~~~~~
exe 'syntax match jsxComponentName
\ +\<[A-Z][\$0-9A-Za-z]\+\>+
\ contained
\ display ' .(s:highlight_close_tag ? 'transparent' : '')
" <tag key={this.props.key}>
" ~~~
exe 'syntax match jsxTagName
\ +\<[-:_\.\$0-9A-Za-z]\+\>+
\ contained
\ contains=jsxComponentName,jsxDot,jsxNamespace
\ nextgroup=jsxAttrib
\ skipempty
\ skipwhite
\ display ' .(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
let s:tags = get(g:, 'vim_jsx_pretty_template_tags', ['html', 'raw'])
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'
syntax region jsxEscapeJs
\ start=+\${+
\ end=++
\ extend
\ contained
\ contains=jsTemplateExpression,javascriptTemplateSubstitution,javaScriptEmbed,typescriptInterpolation
syntax region jsxOpenTag
\ matchgroup=jsxOpenPunct
\ start=+<\%(\${\)\@=+
\ matchgroup=NONE
\ end=++
\ contained
\ contains=jsxEscapeJs
\ nextgroup=jsxAttrib,jsxSpreadOperator
\ skipwhite
\ skipempty
syntax keyword jsxAttribKeyword class contained display
syntax match jsxSpreadOperator +\.\.\.+ contained display nextgroup=jsxEscapeJs skipwhite
syntax match jsxCloseTag +<//>+ display
syntax match jsxComment +<!--\_.\{-}-->+ display
endif
" Highlight the tag name
highlight def link jsxTag Function
highlight def link jsxTagName Identifier
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 jsxDot Operator
highlight def link jsxNamespace Operator
if s:highlight_close_tag
highlight def link jsxCloseString Identifier
highlight def link jsxOpenPunct jsxTag
else
" Highlight the jsxCloseString (i.e. />), jsxPunct (i.e. <,>) and jsxCloseTag (i.e. <//>)
highlight def link jsxCloseString Comment
highlight def link jsxOpenPunct jsxPunct
endif
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
highlight def link jsObjectKey Label
highlight def link jsArrowFuncArgs Type
highlight def link jsFuncArgs Type
endif
endif

26
after/syntax/llvm.vim Normal file
View File

@@ -0,0 +1,26 @@
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'llvm') == -1
" Copyright (c) 2018 rhysd
"
" 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.
syn keyword llvmKeyword attributes
syn match llvmNoName /#\d\+\>/
endif

View File

@@ -1,17 +1,8 @@
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'jsx') == -1
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'mdx') == -1
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" Vim syntax file
"
" Language: JSX (JavaScript)
" Maintainer: Max Wang <mxawng@gmail.com>
" Depends: pangloss/vim-javascript
"
" CREDITS: Inspired by Facebook.
"
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" Prologue; load in XML syntax.
" based on mxw/vim-jsx
if exists('b:current_syntax')
let s:current_syntax=b:current_syntax
unlet b:current_syntax
@@ -21,17 +12,6 @@ if exists('s:current_syntax')
let b:current_syntax=s:current_syntax
endif
" Officially, vim-jsx depends on the pangloss/vim-javascript syntax package
" (and is tested against it exclusively). However, in practice, we make some
" effort towards compatibility with other packages.
"
" These are the plugin-to-syntax-element correspondences:
"
" - pangloss/vim-javascript: jsBlock, jsExpression
" - jelera/vim-javascript-syntax: javascriptBlock
" - othree/yajs.vim: javascriptNoReserved
" JSX attributes should color as JS. Note the trivial end pattern; we let
" jsBlock take care of ending the region.
syn region xmlString contained start=+{+ end=++ contains=jsBlock,javascriptBlock
@@ -49,7 +29,7 @@ syn region jsxChild contained start=+{+ end=++ contains=jsBlock,javascriptBlock
" and generic Flow type annotations (http://flowtype.org/).
syn region jsxRegion
\ contains=@Spell,@XMLSyntax,jsxRegion,jsxChild,jsBlock,javascriptBlock
\ start=+\%(<\|\w\)\@<!<\z([a-zA-Z][a-zA-Z0-9:\-.]*\>[:,]\@!\)\([^>]*>(\)\@!+
\ start=+\%(<\|\w\)\@<!<\z([a-zA-Z][a-zA-Z0-9:\-.]*\)+
\ skip=+<!--\_.\{-}-->+
\ end=+</\z1\_\s\{-}>+
\ end=+/>+

File diff suppressed because it is too large Load Diff

4
after/syntax/reason.vim Normal file
View File

@@ -0,0 +1,4 @@
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'reason') == -1
endif

View File

@@ -1,11 +1,13 @@
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'rust') == -1
if !exists('g:rust_conceal') || g:rust_conceal == 0 || !has('conceal') || &enc != 'utf-8'
scriptencoding utf-8
if !get(g:, 'rust_conceal', 0) || !has('conceal') || &encoding !=# 'utf-8'
finish
endif
" For those who don't want to see `::`...
if exists('g:rust_conceal_mod_path') && g:rust_conceal_mod_path != 0
if get(g:, 'rust_conceal_mod_path', 0)
syn match rustNiceOperator "::" conceal cchar=
endif
@@ -20,7 +22,7 @@ syn match rustNiceOperator "=>" contains=rustFatRightArrowHead,rustFatRightArrow
syn match rustNiceOperator /\<\@!_\(_*\>\)\@=/ conceal cchar=
" For those who don't want to see `pub`...
if exists('g:rust_conceal_pub') && g:rust_conceal_pub != 0
if get(g:, 'rust_conceal_pub', 0)
syn match rustPublicSigil contained "pu" conceal cchar=
syn match rustPublicRest contained "b" conceal cchar= 
syn match rustNiceOperator "pub " contains=rustPublicSigil,rustPublicRest
@@ -28,11 +30,16 @@ endif
hi link rustNiceOperator Operator
if !(exists('g:rust_conceal_mod_path') && g:rust_conceal_mod_path != 0)
if !get(g:, 'rust_conceal_mod_path', 0)
hi! link Conceal Operator
augroup rust.vim.after
autocmd!
" And keep it after a colorscheme change
au ColorScheme <buffer> hi! link Conceal Operator
autocmd ColorScheme <buffer> hi! link Conceal Operator
augroup END
endif
" vim: set et sw=4 sts=4 ts=8:
endif

View File

@@ -0,0 +1,50 @@
if !exists('g:polyglot_disabled') || !(index(g:polyglot_disabled, 'typescript') != -1 || index(g:polyglot_disabled, 'typescript') != -1 || index(g:polyglot_disabled, 'jsx') != -1)
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" Vim syntax file
"
" Language: javascript.jsx
" Maintainer: MaxMellon <maxmellon1994@gmail.com>
" Depends: leafgarland/typescript-vim
"
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
let s:jsx_cpo = &cpo
set cpo&vim
syntax case match
if exists('b:current_syntax')
let s:current_syntax = b:current_syntax
unlet b:current_syntax
endif
if exists('s:current_syntax')
let b:current_syntax = s:current_syntax
endif
" refine the typescript line comment
syntax region typescriptLineComment start=+//+ end=/$/ contains=@Spell,typescriptCommentTodo,typescriptRef extend keepend
if !hlexists('typescriptTypeCast')
" add a typescriptBlock group for typescript
syntax region typescriptBlock
\ matchgroup=typescriptBraces
\ start="{"
\ end="}"
\ contained
\ extend
\ contains=@typescriptExpression,typescriptBlock
\ fold
endif
syntax cluster typescriptExpression add=jsxRegion,typescriptParens
runtime syntax/jsx_pretty.vim
let b:current_syntax = 'typescript.tsx'
let &cpo = s:jsx_cpo
unlet s:jsx_cpo
endif

View File

@@ -0,0 +1,26 @@
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'graphql') == -1
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
let s:tags = '\%(' . join(graphql#javascript_tags(), '\|') . '\)'
exec 'syntax region graphqlTemplateString start=+' . s:tags . '\@20<=`+ skip=+\\`+ end=+`+ contains=@GraphQLSyntax,typescriptTemplateSubstitution extend'
exec 'syntax match graphqlTaggedTemplate +' . s:tags . '\ze`+ nextgroup=graphqlTemplateString'
" Support expression interpolation ((${...})) inside template strings.
syntax region graphqlTemplateExpression start=+${+ end=+}+ contained contains=typescriptTemplateSubstitution containedin=graphqlFold keepend
hi def link graphqlTemplateString typescriptTemplate
hi def link graphqlTemplateExpression typescriptTemplateSubstitution
syn cluster typescriptExpression add=graphqlTaggedTemplate
syn cluster graphqlTaggedTemplate add=graphqlTemplateString
endif

View File

@@ -21,13 +21,17 @@ if version < 600
endif
syntax clear
syn match yamlBlock "[\[\]\{\}\|\>]"
syn match yamlInline "[\[\]\{\}]"
syn match yamlBlock "[>|]\d\?[+-]"
syn region yamlComment start="\#" end="$"
syn match yamlIndicator "#YAML:\S\+"
syn region yamlString start="\(^\|\s\|\[\|\,\|\-\)'" end="'" skip="\\'"
syn region yamlString start="\(^\|\s\|\[\|\,\|\-\)\@<='" end="'" skip="\\'"
syn region yamlString start='"' end='"' skip='\\"' contains=yamlEscape
syn region yamlString matchgroup=yamlBlock start=/[>|]\s*\n\+\z(\s\+\)\S/rs=s+1 skip=/^\%(\z1\S\|^$\)/ end=/^\z1\@!.*/me=s-1
syn region yamlString matchgroup=yamlBlock start=/[>|]\(\d\|[+-]\)\s*\n\+\z(\s\+\)\S/rs=s+2 skip=/^\%(\z1\S\|^$\)/ end=/^\z1\@!.*/me=s-1
syn region yamlString matchgroup=yamlBlock start=/[>|]\d\(\d\|[+-]\)\s*\n\+\z(\s\+\)\S/rs=s+3 skip=/^\%(\z1\S\|^$\)/ end=/^\z1\@!.*/me=s-1
syn match yamlEscape +\\[abfnrtv'"\\]+ contained
syn match yamlEscape "\\\o\o\=\o\=" contained
syn match yamlEscape "\\x\x\+" contained
@@ -53,6 +57,7 @@ hi link yamlKey Identifier
hi link yamlType Type
hi link yamlComment Comment
hi link yamlInline Operator
hi link yamlBlock Operator
hi link yamlString String
hi link yamlEscape Special

View File

@@ -21,6 +21,9 @@ function! s:L2U_Setup()
if !has_key(b:, "l2u_cmdtab_set")
let b:l2u_cmdtab_set = 0
endif
if !has_key(b:, "l2u_keymap_set")
let b:l2u_keymap_set = 0
endif
" Did we activate the L2U as-you-type substitutions?
if !has_key(b:, "l2u_autosub_set")
@@ -76,11 +79,7 @@ function! s:L2U_SetupGlobal()
" A hack to forcibly get out of completion mode: feed
" this string with feedkeys()
if has("win32") || has("win64")
if has("gui_running")
let s:l2u_esc_sequence = "\u0006"
else
let s:l2u_esc_sequence = "\u0006\b"
endif
else
let s:l2u_esc_sequence = "\u0091\b"
end
@@ -409,8 +408,8 @@ function! LaTeXtoUnicode#FallbackCallback()
return
endfunction
" This is the function which is mapped to <S-Tab> in command-line mode
function! LaTeXtoUnicode#CmdTab()
" This is the function that performs the substitution in command-line mode
function! LaTeXtoUnicode#CmdTab(triggeredbytab)
" first stage
" analyse command line
let col1 = getcmdpos() - 1
@@ -419,6 +418,9 @@ function! LaTeXtoUnicode#CmdTab()
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>
endif
return l
endif
let base = l[col0 : col1-1]
@@ -434,6 +436,9 @@ function! LaTeXtoUnicode#CmdTab()
endif
endfor
if len(partmatches) == 0
if a:triggeredbytab
call feedkeys("\<Tab>", 'nt') " fall-back to the default <Tab>
endif
return l
endif
" exact matches are replaced with Unicode
@@ -463,8 +468,13 @@ endfunction
" Setup the L2U tab mapping
function! s:L2U_SetTab(wait_insert_enter)
if !b:l2u_cmdtab_set && get(g:, "latex_to_unicode_tab", 1) && b:l2u_enabled
cmap <buffer> <S-Tab> <Plug>L2UCmdTab
cnoremap <buffer> <Plug>L2UCmdTab <C-\>eLaTeXtoUnicode#CmdTab()<CR>
let b:l2u_cmdtab_keys = get(g:, "latex_to_unicode_cmd_mapping", ['<Tab>','<S-Tab>'])
if type(b:l2u_cmdtab_keys) != type([]) " avoid using v:t_list for backward compatibility
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>'
endfor
let b:l2u_cmdtab_set = 1
endif
if b:l2u_tab_set
@@ -500,7 +510,9 @@ endfunction
" Revert the LaTeX-to-Unicode tab mapping settings
function! s:L2U_UnsetTab()
if b:l2u_cmdtab_set
cunmap <buffer> <S-Tab>
for k in b:l2u_cmdtab_keys
exec 'cunmap <buffer> '.k
endfor
let b:l2u_cmdtab_set = 0
endif
if !b:l2u_tab_set
@@ -593,6 +605,21 @@ function! s:L2U_UnsetAutoSub()
let b:l2u_autosub_set = 0
endfunction
function! s:L2U_SetKeymap()
if !b:l2u_keymap_set && get(g:, "latex_to_unicode_keymap", 0) && b:l2u_enabled
setlocal keymap=latex2unicode
let b:l2u_keymap_set = 1
endif
endfunction
function! s:L2U_UnsetKeymap()
if !b:l2u_keymap_set
return
endif
setlocal keymap=
let b:l2u_keymap_set = 0
endfunction
" Initialization. Can be used to re-init when global settings have changed.
function! LaTeXtoUnicode#Init(...)
let wait_insert_enter = a:0 > 0 ? a:1 : 1
@@ -605,9 +632,11 @@ function! LaTeXtoUnicode#Init(...)
call s:L2U_UnsetTab()
call s:L2U_UnsetAutoSub()
call s:L2U_UnsetKeymap()
call s:L2U_SetTab(wait_insert_enter)
call s:L2U_SetAutoSub(wait_insert_enter)
call s:L2U_SetKeymap()
endfunction
function! LaTeXtoUnicode#Toggle()

66
autoload/RstFold.vim Normal file
View File

@@ -0,0 +1,66 @@
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'rst') == -1
" Author: Antony Lee <anntzer.lee@gmail.com>
" Description: Helper functions for reStructuredText syntax folding
" Last Modified: 2018-12-29
function s:CacheRstFold()
if !g:rst_fold_enabled
return
endif
let closure = {'header_types': {}, 'max_level': 0, 'levels': {}}
function closure.Process(match) dict
let curline = getcurpos()[1]
if has_key(self.levels, curline - 1)
" For over+under-lined headers, the regex will match both at the
" overline and at the title itself; in that case, skip the second match.
return
endif
let lines = split(a:match, '\n')
let key = repeat(lines[-1][0], len(lines))
if !has_key(self.header_types, key)
let self.max_level += 1
let self.header_types[key] = self.max_level
endif
let self.levels[curline] = self.header_types[key]
endfunction
let save_cursor = getcurpos()
let save_mark = getpos("'[")
silent keeppatterns %s/\v^%(%(([=`:.'"~^_*+#-])\1+\n)?.{1,2}\n([=`:.'"~^_*+#-])\2+)|%(%(([=`:.''"~^_*+#-])\3{2,}\n)?.{3,}\n([=`:.''"~^_*+#-])\4{2,})$/\=closure.Process(submatch(0))/gn
call setpos('.', save_cursor)
call setpos("'[", save_mark)
let b:RstFoldCache = closure.levels
endfunction
function RstFold#GetRstFold()
if !g:rst_fold_enabled
return
endif
if !has_key(b:, 'RstFoldCache')
call s:CacheRstFold()
endif
if has_key(b:RstFoldCache, v:lnum)
return '>' . b:RstFoldCache[v:lnum]
else
return '='
endif
endfunction
function RstFold#GetRstFoldText()
if !g:rst_fold_enabled
return
endif
if !has_key(b:, 'RstFoldCache')
call s:CacheRstFold()
endif
let indent = repeat(' ', b:RstFoldCache[v:foldstart] - 1)
let thisline = getline(v:foldstart)
" For over+under-lined headers, skip the overline.
let text = thisline =~ '^\([=`:.''"~^_*+#-]\)\1\+$' ? getline(v:foldstart + 1) : thisline
return indent . text
endfunction
endif

View File

@@ -1,89 +1,119 @@
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'rust') == -1
function! cargo#cmd(args)
silent! clear
if !a:args
execute "!" . "cargo ". a:args
else
echom "Missing arguments"
endif
function! cargo#Load()
" Utility call to get this script loaded, for debugging
endfunction
function! cargo#build(args)
silent! clear
if !a:args
execute "!" . "cargo build " . a:args
function! cargo#cmd(args)
execute "! cargo" a:args
endfunction
function! s:nearest_cargo(...) abort
" If the second argument is not specified, the first argument determines
" whether we will start from the current directory or the directory of the
" current buffer, otherwise, we start with the provided path on the
" second argument.
let l:is_getcwd = get(a:, 1, 0)
if l:is_getcwd
let l:starting_path = get(a:, 2, getcwd())
else
execute "!" . "cargo build"
let l:starting_path = get(a:, 2, expand('%:p:h'))
endif
silent! clear
execute "!" . "cargo build"
return findfile('Cargo.toml', l:starting_path . ';')
endfunction
function! cargo#nearestCargo(is_getcwd) abort
return s:nearest_cargo(a:is_getcwd)
endfunction
function! cargo#nearestWorkspaceCargo(is_getcwd) abort
let l:nearest = s:nearest_cargo(a:is_getcwd)
while l:nearest !=# ''
for l:line in readfile(l:nearest, '', 0x100)
if l:line =~# '\V[workspace]'
return l:nearest
endif
endfor
let l:next = fnamemodify(l:nearest, ':p:h:h')
let l:nearest = s:nearest_cargo(0, l:next)
endwhile
return ''
endfunction
function! cargo#nearestRootCargo(is_getcwd) abort
" Try to find a workspace Cargo.toml, and if not found, take the nearest
" regular Cargo.toml
let l:workspace_cargo = cargo#nearestWorkspaceCargo(a:is_getcwd)
if l:workspace_cargo !=# ''
return l:workspace_cargo
endif
return s:nearest_cargo(a:is_getcwd)
endfunction
function! cargo#build(args)
call cargo#cmd("build " . a:args)
endfunction
function! cargo#clean(args)
silent! clear
if !a:args
execute "!" . "cargo clean " . a:args
else
execute "!" . "cargo clean"
endif
silent! clear
execute "!" . "cargo clean"
call cargo#cmd("clean " . a:args)
endfunction
function! cargo#doc(args)
silent! clear
if !a:args
execute "!" . "cargo doc " . a:args
else
execute "!" . "cargo doc"
endif
call cargo#cmd("doc " . a:args)
endfunction
function! cargo#new(args)
silent! clear
if !a:args
execute "!cargo new " . a:args
:cd `=a:args`
else
echom "Missing arguments"
endif
call cargo#cmd("new " . a:args)
cd `=a:args`
endfunction
function! cargo#init(args)
silent! clear
if !a:args
execute "!" . "cargo init " . a:args
else
execute "!" . "cargo init"
endif
call cargo#cmd("init " . a:args)
endfunction
function! cargo#run(args)
silent! clear
if !a:args
execute "!" . "cargo run " . a:args
else
execute "!" . "cargo run"
endif
call cargo#cmd("run " . a:args)
endfunction
function! cargo#test(args)
silent! clear
if !a:args
execute "!" . "cargo test " . a:args
else
execute "!" . "cargo test"
endif
call cargo#cmd("test " . a:args)
endfunction
function! cargo#bench(args)
silent! clear
if !a:args
execute "!" . "cargo bench " . a:args
else
execute "!" . "cargo bench"
call cargo#cmd("bench " . a:args)
endfunction
function! cargo#runtarget(args)
let l:filename = expand('%:p')
let l:read_manifest = system('cargo read-manifest')
let l:metadata = json_decode(l:read_manifest)
let l:targets = get(l:metadata, 'targets', [])
let l:did_run = 0
for l:target in l:targets
let l:src_path = get(l:target, 'src_path', '')
let l:kinds = get(l:target, 'kind', [])
let l:name = get(l:target, 'name', '')
if l:src_path == l:filename
if index(l:kinds, 'example') != -1
let l:did_run = 1
call cargo#run("--example " . shellescape(l:name) . " " . a:args)
return
elseif index(l:kinds, 'bin') != -1
let l:did_run = 1
call cargo#run("--bin " . shellescape(l:name) . " " . a:args)
return
endif
endif
endfor
if l:did_run != 1
call cargo#run(a:args)
return
endif
endfunction
" vim: set et sw=4 sts=4 ts=8:
endif

View File

@@ -0,0 +1,30 @@
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'rust') == -1
function! cargo#quickfix#CmdPre() abort
if &filetype ==# 'rust' && get(b:, 'current_compiler', '') ==# 'cargo'
" Preserve the current directory, and 'lcd' to the nearest Cargo file.
let b:rust_compiler_cargo_qf_has_lcd = haslocaldir()
let b:rust_compiler_cargo_qf_prev_cd = getcwd()
let b:rust_compiler_cargo_qf_prev_cd_saved = 1
let l:nearest = fnamemodify(cargo#nearestRootCargo(0), ':h')
execute 'lchdir! '.l:nearest
else
let b:rust_compiler_cargo_qf_prev_cd_saved = 0
endif
endfunction
function! cargo#quickfix#CmdPost() abort
if exists("b:rust_compiler_cargo_qf_prev_cd_saved") && b:rust_compiler_cargo_qf_prev_cd_saved
" Restore the current directory.
if b:rust_compiler_cargo_qf_has_lcd
execute 'lchdir! '.b:rust_compiler_cargo_qf_prev_cd
else
execute 'chdir! '.b:rust_compiler_cargo_qf_prev_cd
endif
let b:rust_compiler_cargo_qf_prev_cd_saved = 0
endif
endfunction
" vim: set et sw=4 sts=4 ts=8:
endif

View File

@@ -35,21 +35,45 @@ function! s:run_cmd(cmd) abort
return s:P.system(a:cmd)
endfunction
function! s:find_root_by_spec(d) abort
let dir = finddir('spec', a:d . ';')
if dir ==# ''
function! s:find_root_by(search_dir, d) abort
let found_dir = finddir(a:search_dir, a:d . ';')
if found_dir ==# ''
return ''
endif
" Note: ':h:h' for {root}/spec/ -> {root}/spec -> {root}
return fnamemodify(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.
"
" Searching for the 'spec/' directory is not enough: for example the crystal
" 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 '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 ''
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(parent_dir)
let root_dir = s:find_root_by_spec_and_src(parent_dir)
if root_dir ==# ''
" No spec diretory found. No need to make temporary file
" No spec directory found. No need to make temporary file
return a:file_path
endif
@@ -230,7 +254,7 @@ 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(path)
let root_path = s:find_root_by_spec_and_src(path)
if root_path ==# ''
return s:echo_error("'spec' directory is not found")
endif
@@ -248,9 +272,9 @@ function! crystal_lang#run_current_spec(...) abort
let source_dir = fnamemodify(path, ':h')
" /foo/bar
let root_dir = s:find_root_by_spec(source_dir)
let root_dir = s:find_root_by_spec_and_src(source_dir)
if root_dir ==# ''
return s:echo_error("'spec' directory is not found")
return s:echo_error("Root directory with 'src/' and 'spec/' not found")
endif
" src
@@ -310,6 +334,10 @@ function! crystal_lang#format(option_str, ...) abort
call setpos('.', pos_save)
endfunction
function! crystal_lang#expand(file, pos, ...) abort
return crystal_lang#tool('expand', a:file, a:pos, get(a:, 1, ''))
endfunction
let &cpo = s:save_cpo
unlet s:save_cpo

3191
autoload/csv.vim Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -7,21 +7,35 @@ function! s:error(text) abort
echohl None
endfunction
function! s:cexpr(errorformat, joined_lines) abort
let temp_errorfomat = &errorformat
try
let &errorformat = a:errorformat
cexpr a:joined_lines
function! s:cexpr(errorformat, lines, reason) abort
call setqflist([], ' ', {
\ 'lines': a:lines,
\ 'efm': a:errorformat,
\ 'context': {'reason': a:reason},
\})
copen
finally
let &errorformat = temp_errorfomat
endtry
endfunction
" If the quickfix list has a context matching [reason], clear and close it.
function! s:clearQfList(reason) abort
let context = get(getqflist({'context': 1}), 'context', {})
if type(context) == v:t_dict &&
\ has_key(context, 'reason') &&
\ context.reason == a:reason
call setqflist([], 'r')
cclose
endif
endfunction
function! dart#fmt(q_args) abort
if executable('dartfmt')
let buffer_content = join(getline(1, '$'), "\n")
let joined_lines = system(printf('dartfmt %s', a:q_args), buffer_content)
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")
@@ -30,12 +44,11 @@ function! dart#fmt(q_args) abort
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 file_path = expand('%')
call map(errors, 'file_path.":".v:val')
let error_format = '%A%f:line %l\, column %c of stdin: %m,%C%.%#'
call s:cexpr(error_format, join(errors, "\n"))
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')
@@ -46,8 +59,9 @@ function! dart#analyzer(q_args) abort
if executable('dartanalyzer')
let path = expand('%:p:gs:\:/:')
if filereadable(path)
let joined_lines = system(printf('dartanalyzer %s %s', a:q_args, shellescape(path)))
call s:cexpr('%m (%f\, line %l\, col %c)', joined_lines)
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
@@ -60,8 +74,9 @@ function! dart#tojs(q_args) abort
if executable('dart2js')
let path = expand('%:p:gs:\:/:')
if filereadable(path)
let joined_lines = system(printf('dart2js %s %s', a:q_args, shellescape(path)))
call s:cexpr('%m (%f\, line %l\, col %c)', joined_lines)
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
@@ -129,6 +144,15 @@ function! s:PackageMap() abort
return [v:true, map]
endfunction
" Toggle whether dartfmt is run on save or not.
function! dart#ToggleFormatOnSave() abort
if get(g:, "dart_format_on_save", 0)
let g:dart_format_on_save = 0
return
endif
let g:dart_format_on_save = 1
endfunction
" Finds a file name '.packages' in the cwd, or in any directory above the open
" file.
"

View File

@@ -0,0 +1,24 @@
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'elixir') == -1
let s:path = expand('<sfile>:h')
let s:cmd = join(['mix', 'run', '--no-start', '--no-compile', shellescape(s:path.'/get_repos.exs')])
function! s:repo_list() abort
return map(systemlist(s:cmd), 'split(v:val)')
endfunction
function! db#adapter#ecto#canonicalize(url) abort
for l:item in s:repo_list()
let l:name = get(l:item, 0)
let l:url = get(l:item, 1)
if !empty(l:name) && 'ecto:'.l:name ==# a:url
return l:url
endif
endfor
endfunction
function! db#adapter#ecto#complete_opaque(url) abort
return map(s:repo_list(), 'v:val[0]')
endfunction
endif

View File

@@ -23,23 +23,25 @@ function! elixir#indent#indent(lnum)
let handlers = [
\'top_of_file',
\'starts_with_end',
\'starts_with_mid_or_end_block_keyword',
\'following_trailing_do',
\'following_trailing_rocket',
\'starts_with_string_continuation',
\'following_trailing_binary_operator',
\'starts_with_pipe',
\'starts_with_close_bracket',
\'starts_with_binary_operator',
\'inside_nested_construct',
\'starts_with_comment',
\'inside_block',
\'starts_with_end',
\'inside_generic_block',
\'follow_prev_nb'
\]
for handler in handlers
call s:debug('testing handler elixir#indent#handle_'.handler)
let indent = function('elixir#indent#handle_'.handler)(lnum, text, prev_nb_lnum, prev_nb_text)
if indent != -1
let context = {'lnum': lnum, 'text': text, 'first_nb_char_idx': match(text, '\w'), 'prev_nb_lnum': prev_nb_lnum, 'prev_nb_text': prev_nb_text}
let indent = function('elixir#indent#handle_'.handler)(context)
if indent == -2
" Keep indent the same
call s:debug('line '.lnum.': elixir#indent#handle_'.handler.' returned -2; returning indent of -1')
call cursor(curs_lnum, curs_col)
return -1
elseif indent != -1
call s:debug('line '.lnum.': elixir#indent#handle_'.handler.' returned '.indent)
call cursor(curs_lnum, curs_col)
return indent
@@ -57,9 +59,17 @@ function! s:debug(str)
endif
endfunction
function! s:starts_with(context, expr)
return s:_starts_with(a:context.text, a:expr, a:context.lnum)
endfunction
function! s:prev_starts_with(context, expr)
return s:_starts_with(a:context.prev_nb_text, a:expr, a:context.prev_nb_lnum)
endfunction
" Returns 0 or 1 based on whether or not the text starts with the given
" expression and is not a string or comment
function! s:starts_with(text, expr, lnum)
function! s:_starts_with(text, expr, lnum)
let pos = match(a:text, '^\s*'.a:expr)
if pos == -1
return 0
@@ -74,9 +84,13 @@ function! s:starts_with(text, expr, lnum)
end
endfunction
function! s:prev_ends_with(context, expr)
return s:_ends_with(a:context.prev_nb_text, a:expr, a:context.prev_nb_lnum)
endfunction
" Returns 0 or 1 based on whether or not the text ends with the given
" expression and is not a string or comment
function! s:ends_with(text, expr, lnum)
function! s:_ends_with(text, expr, lnum)
let pos = match(a:text, a:expr.'\s*$')
if pos == -1
return 0
@@ -92,7 +106,11 @@ endfunction
" Returns 0 or 1 based on whether or not the given line number and column
" number pair is a string or comment
function! s:is_string_or_comment(line, col)
return synIDattr(synID(a:line, a:col, 1), "name") =~ '\%(String\|Comment\)'
return s:syntax_name(a:line, a:col) =~ '\%(String\|Comment\)'
endfunction
function! s:syntax_name(line, col)
return synIDattr(synID(a:line, a:col, 1), "name")
endfunction
" Skip expression for searchpair. Returns 0 or 1 based on whether the value
@@ -140,16 +158,24 @@ function! s:find_last_pos(lnum, text, match)
return -1
endfunction
function! elixir#indent#handle_top_of_file(_lnum, _text, prev_nb_lnum, _prev_nb_text)
if a:prev_nb_lnum == 0
function! elixir#indent#handle_top_of_file(context)
if a:context.prev_nb_lnum == 0
return 0
else
return -1
end
endfunction
function! elixir#indent#handle_follow_prev_nb(_lnum, _text, prev_nb_lnum, prev_nb_text)
return s:get_base_indent(a:prev_nb_lnum, a:prev_nb_text)
function! elixir#indent#handle_starts_with_string_continuation(context)
if s:syntax_name(a:context.lnum, a:context.first_nb_char_idx) =~ '\(String\|Comment\)$'
return -2
else
return -1
end
endfunction
function! elixir#indent#handle_follow_prev_nb(context)
return s:get_base_indent(a:context.prev_nb_lnum, a:context.prev_nb_text)
endfunction
" Given the line at `lnum`, returns the indent of the line that acts as the 'base indent'
@@ -163,13 +189,13 @@ function! s:get_base_indent(lnum, text)
let data_structure_close = '\%(\]\|}\|)\)'
let pipe = '|>'
if s:starts_with(a:text, binary_operator, a:lnum)
if s:_starts_with(a:text, binary_operator, a:lnum)
return s:get_base_indent(prev_nb_lnum, prev_nb_text)
elseif s:starts_with(a:text, pipe, a:lnum)
elseif s:_starts_with(a:text, pipe, a:lnum)
return s:get_base_indent(prev_nb_lnum, prev_nb_text)
elseif s:ends_with(prev_nb_text, binary_operator, prev_nb_lnum)
elseif s:_ends_with(prev_nb_text, binary_operator, prev_nb_lnum)
return s:get_base_indent(prev_nb_lnum, prev_nb_text)
elseif s:ends_with(a:text, data_structure_close, a:lnum)
elseif s:_ends_with(a:text, data_structure_close, a:lnum)
let data_structure_open = '\%(\[\|{\|(\)'
let close_match_idx = match(a:text, data_structure_close . '\s*$')
call cursor(a:lnum, close_match_idx + 1)
@@ -181,54 +207,26 @@ function! s:get_base_indent(lnum, text)
endif
endfunction
function! elixir#indent#handle_following_trailing_do(lnum, text, prev_nb_lnum, prev_nb_text)
if s:ends_with(a:prev_nb_text, s:keyword('do'), a:prev_nb_lnum)
if s:starts_with(a:text, s:keyword('end'), a:lnum)
return indent(a:prev_nb_lnum)
else
return indent(a:prev_nb_lnum) + s:sw()
end
else
return -1
endif
endfunction
function! elixir#indent#handle_following_trailing_rocket(lnum, text, prev_nb_lnum, prev_nb_text)
if s:ends_with(a:prev_nb_text, '->', a:prev_nb_lnum)
return indent(a:prev_nb_lnum) + s:sw()
else
return -1
endif
endfunction
function! elixir#indent#handle_following_trailing_binary_operator(lnum, text, prev_nb_lnum, prev_nb_text)
function! elixir#indent#handle_following_trailing_binary_operator(context)
let binary_operator = '\%(=\|<>\|>>>\|<=\|||\|+\|\~\~\~\|-\|&&\|<<<\|/\|\^\^\^\|\*\)'
if s:ends_with(a:prev_nb_text, binary_operator, a:prev_nb_lnum)
return indent(a:prev_nb_lnum) + s:sw()
if s:prev_ends_with(a:context, binary_operator)
return indent(a:context.prev_nb_lnum) + s:sw()
else
return -1
endif
endfunction
function! elixir#indent#handle_following_prev_end(_lnum, _text, prev_nb_lnum, prev_nb_text)
if s:ends_with(a:prev_nb_text, s:keyword('end'), a:prev_nb_lnum)
return indent(a:prev_nb_lnum)
else
return -1
endif
endfunction
function! elixir#indent#handle_starts_with_pipe(lnum, text, prev_nb_lnum, prev_nb_text)
if s:starts_with(a:text, '|>', a:lnum)
function! elixir#indent#handle_starts_with_pipe(context)
if s:starts_with(a:context, '|>')
let match_operator = '\%(!\|=\|<\|>\)\@<!=\%(=\|>\|\~\)\@!'
let pos = s:find_last_pos(a:prev_nb_lnum, a:prev_nb_text, match_operator)
let pos = s:find_last_pos(a:context.prev_nb_lnum, a:context.prev_nb_text, match_operator)
if pos == -1
return indent(a:prev_nb_lnum)
return indent(a:context.prev_nb_lnum)
else
let next_word_pos = match(strpart(a:prev_nb_text, pos+1, len(a:prev_nb_text)-1), '\S')
let next_word_pos = match(strpart(a:context.prev_nb_text, pos+1, len(a:context.prev_nb_text)-1), '\S')
if next_word_pos == -1
return indent(a:prev_nb_lnum) + s:sw()
return indent(a:context.prev_nb_lnum) + s:sw()
else
return pos + 1 + next_word_pos
end
@@ -238,16 +236,8 @@ function! elixir#indent#handle_starts_with_pipe(lnum, text, prev_nb_lnum, prev_n
endif
endfunction
function! elixir#indent#handle_starts_with_comment(_lnum, text, prev_nb_lnum, _prev_nb_text)
if match(a:text, '^\s*#') != -1
return indent(a:prev_nb_lnum)
else
return -1
endif
endfunction
function! elixir#indent#handle_starts_with_end(lnum, text, _prev_nb_lnum, _prev_nb_text)
if s:starts_with(a:text, s:keyword('end'), a:lnum)
function! elixir#indent#handle_starts_with_end(context)
if s:starts_with(a:context, s:keyword('end'))
let pair_lnum = searchpair(s:keyword('do\|fn'), '', s:keyword('end').'\zs', 'bnW', "line('.') == " . line('.') . " || elixir#indent#searchpair_back_skip()")
return indent(pair_lnum)
else
@@ -255,36 +245,18 @@ function! elixir#indent#handle_starts_with_end(lnum, text, _prev_nb_lnum, _prev_
endif
endfunction
function! elixir#indent#handle_starts_with_mid_or_end_block_keyword(lnum, text, _prev_nb_lnum, _prev_nb_text)
if s:starts_with(a:text, s:keyword('catch\|rescue\|after\|else'), a:lnum)
let pair_lnum = searchpair(s:keyword('with\|receive\|try\|if\|fn'), s:keyword('catch\|rescue\|after\|else').'\zs', s:keyword('end'), 'bnW', "line('.') == " . line('.') . " || elixir#indent#searchpair_back_skip()")
return indent(pair_lnum)
else
return -1
endif
endfunction
function! elixir#indent#handle_starts_with_close_bracket(lnum, text, _prev_nb_lnum, _prev_nb_text)
if s:starts_with(a:text, '\%(\]\|}\|)\)', a:lnum)
let pair_lnum = searchpair('\%(\[\|{\|(\)', '', '\%(\]\|}\|)\)', 'bnW', "line('.') == " . line('.') . " || elixir#indent#searchpair_back_skip()")
return indent(pair_lnum)
else
return -1
endif
endfunction
function! elixir#indent#handle_starts_with_binary_operator(lnum, text, prev_nb_lnum, prev_nb_text)
function! elixir#indent#handle_starts_with_binary_operator(context)
let binary_operator = '\%(=\|<>\|>>>\|<=\|||\|+\|\~\~\~\|-\|&&\|<<<\|/\|\^\^\^\|\*\)'
if s:starts_with(a:text, binary_operator, a:lnum)
if s:starts_with(a:context, binary_operator)
let match_operator = '\%(!\|=\|<\|>\)\@<!=\%(=\|>\|\~\)\@!'
let pos = s:find_last_pos(a:prev_nb_lnum, a:prev_nb_text, match_operator)
let pos = s:find_last_pos(a:context.prev_nb_lnum, a:context.prev_nb_text, match_operator)
if pos == -1
return indent(a:prev_nb_lnum)
return indent(a:context.prev_nb_lnum)
else
let next_word_pos = match(strpart(a:prev_nb_text, pos+1, len(a:prev_nb_text)-1), '\S')
let next_word_pos = match(strpart(a:context.prev_nb_text, pos+1, len(a:context.prev_nb_text)-1), '\S')
if next_word_pos == -1
return indent(a:prev_nb_lnum) + s:sw()
return indent(a:context.prev_nb_lnum) + s:sw()
else
return pos + 1 + next_word_pos
end
@@ -298,162 +270,89 @@ endfunction
" nested structure. For example, we might be in a function in a map in a
" function, etc... so we need to first figure out what the innermost structure
" is then forward execution to the proper handler
function! elixir#indent#handle_inside_nested_construct(lnum, text, prev_nb_lnum, prev_nb_text)
function! elixir#indent#handle_inside_block(context)
let start_pattern = '\C\%(\<with\>\|\<if\>\|\<case\>\|\<cond\>\|\<try\>\|\<receive\>\|\<fn\>\|{\|\[\|(\)'
let end_pattern = '\C\%(\<end\>\|\]\|}\|)\)'
let pair_info = searchpairpos(start_pattern, '', end_pattern, 'bnW', "line('.') == " . line('.') . " || elixir#indent#searchpair_back_skip()", max([0, a:lnum - g:elixir_indent_max_lookbehind]))
let pair_lnum = pair_info[0]
let pair_col = pair_info[1]
if pair_lnum != 0 || pair_col != 0
let pair_text = getline(pair_lnum)
let pair_char = pair_text[pair_col - 1]
if pair_char == 'f'
call s:debug("testing s:do_handle_inside_fn")
return s:do_handle_inside_fn(pair_lnum, pair_col, a:lnum, a:text, a:prev_nb_lnum, a:prev_nb_text)
elseif pair_char == '['
call s:debug("testing s:do_handle_inside_square_brace")
return s:do_handle_inside_square_brace(pair_lnum, pair_col, a:lnum, a:text, a:prev_nb_lnum, a:prev_nb_text)
elseif pair_char == '{'
call s:debug("testing s:do_handle_inside_curly_brace")
return s:do_handle_inside_curly_brace(pair_lnum, pair_col, a:lnum, a:text, a:prev_nb_lnum, a:prev_nb_text)
elseif pair_char == '('
call s:debug("testing s:do_handle_inside_parens")
return s:do_handle_inside_parens(pair_lnum, pair_col, a:lnum, a:text, a:prev_nb_lnum, a:prev_nb_text)
elseif pair_char == 'w'
call s:debug("testing s:do_handle_inside_with")
return s:do_handle_inside_with(pair_lnum, pair_col, a:lnum, a:text, a:prev_nb_lnum, a:prev_nb_text)
else
call s:debug("testing s:do_handle_inside_keyword_block")
return s:do_handle_inside_keyword_block(pair_lnum, pair_col, a:lnum, a:text, a:prev_nb_lnum, a:prev_nb_text)
end
else
return -1
end
endfunction
" hack - handle do: better
let block_info = searchpairpos(start_pattern, '', end_pattern, 'bnW', "line('.') == " . line('.') . " || elixir#indent#searchpair_back_skip() || getline(line('.')) =~ 'do:'", max([0, a:context.lnum - g:elixir_indent_max_lookbehind]))
let block_start_lnum = block_info[0]
let block_start_col = block_info[1]
if block_start_lnum != 0 || block_start_col != 0
let block_text = getline(block_start_lnum)
let block_start_char = block_text[block_start_col - 1]
function! s:do_handle_inside_with(pair_lnum, pair_col, lnum, text, prev_nb_lnum, prev_nb_text)
if a:pair_lnum == a:lnum
" This is the `with` line or an inline `with`/`do`
call s:debug("current line is `with`")
return -1
else
" Determine if in with/do, do/else|end, or else/end
let start_pattern = '\C\%(\<with\>\|\<else\>\|\<do\>\)'
let end_pattern = '\C\%(\<end\>\)'
let pair_info = searchpairpos(start_pattern, '', end_pattern, 'bnW', "line('.') == " . line('.') . " || elixir#indent#searchpair_back_skip()")
let pair_lnum = pair_info[0]
let pair_col = pair_info[1]
let never_match = '\(a\)\@=b'
let config = {
\'f': {'aligned_clauses': s:keyword('end'), 'pattern_match_clauses': never_match},
\'c': {'aligned_clauses': s:keyword('end'), 'pattern_match_clauses': never_match},
\'t': {'aligned_clauses': s:keyword('end\|catch\|rescue\|after\|else'), 'pattern_match_clauses': s:keyword('catch\|rescue\|else')},
\'r': {'aligned_clauses': s:keyword('end\|after'), 'pattern_match_clauses': s:keyword('after')},
\'i': {'aligned_clauses': s:keyword('end\|else'), 'pattern_match_clauses': never_match},
\'[': {'aligned_clauses': ']', 'pattern_match_clauses': never_match},
\'{': {'aligned_clauses': '}', 'pattern_match_clauses': never_match},
\'(': {'aligned_clauses': ')', 'pattern_match_clauses': never_match}
\}
let pair_text = getline(pair_lnum)
let pair_char = pair_text[pair_col - 1]
if s:starts_with(a:text, '\Cdo:', a:lnum)
call s:debug("current line is do:")
return pair_col - 1 + s:sw()
elseif s:starts_with(a:text, '\Celse:', a:lnum)
call s:debug("current line is else:")
return pair_col - 1
elseif s:starts_with(a:text, '\C\(\<do\>\|\<else\>\)', a:lnum)
call s:debug("current line is do/else")
return pair_col - 1
elseif s:starts_with(pair_text, '\C\(do\|else\):', pair_lnum)
call s:debug("inside do:/else:")
return pair_col - 1 + s:sw()
elseif pair_char == 'w'
call s:debug("inside with/do")
return pair_col + 4
elseif pair_char == 'd'
call s:debug("inside do/else|end")
return pair_col - 1 + s:sw()
if block_start_char == 'w'
call s:debug("testing s:handle_with")
return s:handle_with(block_start_lnum, block_start_col, a:context)
else
call s:debug("inside else/end")
return s:do_handle_inside_pattern_match_block(pair_lnum, a:text, a:prev_nb_lnum, a:prev_nb_text)
end
end
endfunction
function! s:do_handle_inside_keyword_block(pair_lnum, _pair_col, _lnum, text, prev_nb_lnum, prev_nb_text)
let keyword_pattern = '\C\%(\<case\>\|\<cond\>\|\<try\>\|\<receive\>\|\<after\>\|\<catch\>\|\<rescue\>\|\<else\>\)'
if a:pair_lnum
" last line is a "receive" or something
if s:starts_with(a:prev_nb_text, keyword_pattern, a:prev_nb_lnum)
call s:debug("prev nb line is keyword")
return indent(a:prev_nb_lnum) + s:sw()
let block_config = config[block_start_char]
if s:starts_with(a:context, block_config.aligned_clauses)
call s:debug("clause")
return indent(block_start_lnum)
else
return s:do_handle_inside_pattern_match_block(a:pair_lnum, a:text, a:prev_nb_lnum, a:prev_nb_text)
end
else
return -1
let clause_lnum = searchpair(block_config.pattern_match_clauses, '', '*', 'bnW', "line('.') == " . line('.') . " || elixir#indent#searchpair_back_skip()", block_start_lnum)
let relative_lnum = max([clause_lnum, block_start_lnum])
call s:debug("pattern matching relative to lnum " . relative_lnum)
return s:do_handle_pattern_match_block(relative_lnum, a:context)
endif
endfunction
" Implements indent for pattern-matching blocks (e.g. case, fn, with/else)
function! s:do_handle_inside_pattern_match_block(block_start_lnum, text, prev_nb_lnum, prev_nb_text)
if a:text =~ '->'
call s:debug("current line contains ->")
return indent(a:block_start_lnum) + s:sw()
elseif a:prev_nb_text =~ '->'
call s:debug("prev nb line contains ->")
return indent(a:prev_nb_lnum) + s:sw()
else
return indent(a:prev_nb_lnum)
end
endfunction
function! s:do_handle_inside_fn(pair_lnum, _pair_col, lnum, text, prev_nb_lnum, prev_nb_text)
if a:pair_lnum && a:pair_lnum != a:lnum
return s:do_handle_inside_pattern_match_block(a:pair_lnum, a:text, a:prev_nb_lnum, a:prev_nb_text)
else
return -1
endif
endfunction
function! s:do_handle_inside_square_brace(pair_lnum, pair_col, _lnum, _text, _prev_nb_lnum, _prev_nb_text)
" If in list...
if a:pair_lnum != 0 || a:pair_col != 0
let pair_text = getline(a:pair_lnum)
let substr = strpart(pair_text, a:pair_col, len(pair_text)-1)
let indent_pos = match(substr, '\S')
if indent_pos != -1
return indent_pos + a:pair_col
else
return indent(a:pair_lnum) + s:sw()
endif
else
return -1
end
endfunction
function! s:do_handle_inside_curly_brace(pair_lnum, _pair_col, _lnum, _text, _prev_nb_lnum, _prev_nb_text)
return indent(a:pair_lnum) + s:sw()
endfunction
function! s:do_handle_inside_parens(pair_lnum, pair_col, _lnum, _text, prev_nb_lnum, prev_nb_text)
if a:pair_lnum
if s:ends_with(a:prev_nb_text, '(', a:prev_nb_lnum)
return indent(a:prev_nb_lnum) + s:sw()
elseif a:pair_lnum == a:prev_nb_lnum
" Align indent (e.g. "def add(a,")
let pos = s:find_last_pos(a:prev_nb_lnum, a:prev_nb_text, '[^(]\+,')
if pos == -1
return 0
else
return pos
end
else
return indent(a:prev_nb_lnum)
end
else
return -1
endif
end
endfunction
function! elixir#indent#handle_inside_generic_block(lnum, _text, prev_nb_lnum, prev_nb_text)
let pair_lnum = searchpair(s:keyword('do\|fn'), '', s:keyword('end'), 'bW', "line('.') == ".a:lnum." || s:is_string_or_comment(line('.'), col('.'))", max([0, a:lnum - g:elixir_indent_max_lookbehind]))
function! s:handle_with(start_lnum, start_col, context)
let block_info = searchpairpos('\C\%(\<with\>\|\<do\>\|\<else\>\)', '', s:keyword('end'), 'bnW', "line('.') == " . line('.') . " || elixir#indent#searchpair_back_skip()")
let block_start_lnum = block_info[0]
let block_start_col = block_info[1]
let block_start_text = getline(block_start_lnum)
let block_start_char = block_start_text[block_start_col - 1]
if s:starts_with(a:context, s:keyword('do\|else\|end'))
return indent(a:start_lnum)
elseif block_start_char == 'w' || s:starts_with(a:context, '\C\(do\|else\):')
return indent(a:start_lnum) + 5
elseif s:_starts_with(block_start_text, '\C\(do\|else\):', a:start_lnum)
return indent(block_start_lnum) + s:sw()
else
return s:do_handle_pattern_match_block(a:start_lnum, a:context)
end
endfunction
function! s:do_handle_pattern_match_block(relative_line, context)
let relative_indent = indent(a:relative_line)
" hack!
if a:context.text =~ '\(fn.*\)\@<!->'
call s:debug("current line contains ->; assuming match definition")
return relative_indent + s:sw()
elseif search('\(fn.*\)\@<!->', 'bnW', a:relative_line) != 0
call s:debug("a previous line contains ->; assuming match handler")
return relative_indent + 2 * s:sw()
else
call s:debug("couldn't find any previous ->; assuming body text")
return relative_indent + s:sw()
end
endfunction
function! elixir#indent#handle_inside_generic_block(context)
let pair_lnum = searchpair(s:keyword('do\|fn'), '', s:keyword('end'), 'bW', "line('.') == ".a:context.lnum." || s:is_string_or_comment(line('.'), col('.'))", max([0, a:context.lnum - g:elixir_indent_max_lookbehind]))
if pair_lnum
" TODO: @jbodah 2017-03-29: this should probably be the case in *all*
" blocks
if s:ends_with(a:prev_nb_text, ',', a:prev_nb_lnum)
if s:prev_ends_with(a:context, ',')
return indent(pair_lnum) + 2 * s:sw()
else
return indent(pair_lnum) + s:sw()

View File

@@ -349,11 +349,14 @@ function! elm#FindRootDirectory() abort
if empty(l:elm_root)
let l:current_file = expand('%:p')
let l:dir_current_file = fnameescape(fnamemodify(l:current_file, ':h'))
let l:match = findfile('elm-package.json', l:dir_current_file . ';')
if empty(l:match)
let l:elm_root = ''
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 = fnamemodify(l:match, ':p:h')
let l:elm_root = ''
endif
if !empty(l:elm_root)

View File

@@ -134,7 +134,13 @@ function! elm#util#GoToModule(name)
endfunction
function! s:findLocalModule(rel_path, root)
let l:package_json = a:root . '/elm-package.json'
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']

View File

@@ -9,15 +9,15 @@ function! fish#Indent()
let l:indent = 0
let l:prevline = getline(l:prevlnum)
if l:prevline =~# '\v^\s*switch>'
let l:indent = l:shiftwidth * 2
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(v:lnum) - (l:indent ==# 0 ? l:shiftwidth : l:indent)
return indent(l:prevlnum) - (l:indent ==# 0 ? l:shiftwidth : l:indent)
elseif l:line =~# '\v^\s*%(case|else)>'
return indent(v:lnum) - l:shiftwidth
return indent(l:prevlnum) - l:shiftwidth
endif
return indent(l:prevlnum) + l:indent
endfunction

496
autoload/go/config.vim Normal file
View File

@@ -0,0 +1,496 @@
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'go') == -1
" don't spam the user when Vim is started in Vi compatibility mode
let s:cpo_save = &cpo
set cpo&vim
function! go#config#AutodetectGopath() abort
return get(g:, 'go_autodetect_gopath', 0)
endfunction
function! go#config#ListTypeCommands() abort
return get(g:, 'go_list_type_commands', {})
endfunction
function! go#config#VersionWarning() abort
return get(g:, 'go_version_warning', 1)
endfunction
function! go#config#BuildTags() abort
return get(g:, 'go_build_tags', '')
endfunction
function! go#config#SetBuildTags(value) abort
if a:value is ''
silent! unlet g:go_build_tags
call go#lsp#ResetWorkspaceDirectories()
return
endif
let g:go_build_tags = a:value
call go#lsp#ResetWorkspaceDirectories()
endfunction
function! go#config#TestTimeout() abort
return get(g:, 'go_test_timeout', '10s')
endfunction
function! go#config#TestShowName() abort
return get(g:, 'go_test_show_name', 0)
endfunction
function! go#config#TermHeight() abort
return get(g:, 'go_term_height', winheight(0))
endfunction
function! go#config#TermWidth() abort
return get(g:, 'go_term_width', winwidth(0))
endfunction
function! go#config#TermMode() abort
return get(g:, 'go_term_mode', 'vsplit')
endfunction
function! go#config#TermCloseOnExit() abort
return get(g:, 'go_term_close_on_exit', 1)
endfunction
function! go#config#SetTermCloseOnExit(value) abort
let g:go_term_close_on_exit = a:value
endfunction
function! go#config#TermEnabled() abort
return has('nvim') && get(g:, 'go_term_enabled', 0)
endfunction
function! go#config#SetTermEnabled(value) abort
let g:go_term_enabled = a:value
endfunction
function! go#config#TemplateUsePkg() abort
return get(g:, 'go_template_use_pkg', 0)
endfunction
function! go#config#TemplateTestFile() abort
return get(g:, 'go_template_test_file', "hello_world_test.go")
endfunction
function! go#config#TemplateFile() abort
return get(g:, 'go_template_file', "hello_world.go")
endfunction
function! go#config#StatuslineDuration() abort
return get(g:, 'go_statusline_duration', 60000)
endfunction
function! go#config#SnippetEngine() abort
return get(g:, 'go_snippet_engine', 'automatic')
endfunction
function! go#config#PlayBrowserCommand() abort
if go#util#IsWin()
let go_play_browser_command = '!start rundll32 url.dll,FileProtocolHandler %URL%'
elseif go#util#IsMac()
let go_play_browser_command = 'open %URL%'
elseif executable('xdg-open')
let go_play_browser_command = 'xdg-open %URL%'
elseif executable('firefox')
let go_play_browser_command = 'firefox %URL% &'
elseif executable('chromium')
let go_play_browser_command = 'chromium %URL% &'
else
let go_play_browser_command = ''
endif
return get(g:, 'go_play_browser_command', go_play_browser_command)
endfunction
function! go#config#MetalinterDeadline() abort
" gometalinter has a default deadline of 5 seconds only when asynchronous
" jobs are not supported.
let deadline = '5s'
if go#util#has_job() && has('lambda')
let deadline = ''
endif
return get(g:, 'go_metalinter_deadline', deadline)
endfunction
function! go#config#ListType() abort
return get(g:, 'go_list_type', '')
endfunction
function! go#config#ListAutoclose() abort
return get(g:, 'go_list_autoclose', 1)
endfunction
function! go#config#InfoMode() abort
return get(g:, 'go_info_mode', 'gopls')
endfunction
function! go#config#GuruScope() abort
let scope = get(g:, 'go_guru_scope', [])
if !empty(scope)
" strip trailing slashes for each path in scope. bug:
" https://github.com/golang/go/issues/14584
let scopes = go#util#StripTrailingSlash(scope)
endif
return scope
endfunction
function! go#config#SetGuruScope(scope) abort
if empty(a:scope)
if exists('g:go_guru_scope')
unlet g:go_guru_scope
endif
else
let g:go_guru_scope = a:scope
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'
" strip last '/' character if available
let last_char = strlen(godoc_url) - 1
if godoc_url[last_char] == '/'
let godoc_url = strpart(godoc_url, 0, last_char)
endif
" custom godoc installations expect /pkg before package names
let godoc_url .= "/pkg"
endif
return godoc_url
endfunction
function! go#config#DocPopupWindow() abort
return get(g:, 'go_doc_popup_window', 0)
endfunction
function! go#config#DefReuseBuffer() abort
return get(g:, 'go_def_reuse_buffer', 0)
endfunction
function! go#config#DefMode() abort
return get(g:, 'go_def_mode', 'gopls')
endfunction
function! go#config#DeclsIncludes() abort
return get(g:, 'go_decls_includes', 'func,type')
endfunction
function! go#config#Debug() abort
return get(g:, 'go_debug', [])
endfunction
function! go#config#DebugWindows() abort
return get(g:, 'go_debug_windows', {
\ 'stack': 'leftabove 20vnew',
\ 'out': 'botright 10new',
\ 'vars': 'leftabove 30vnew',
\ }
\ )
endfunction
function! go#config#DebugAddress() abort
return get(g:, 'go_debug_address', '127.0.0.1:8181')
endfunction
function! go#config#DebugCommands() abort
" make sure g:go_debug_commands is set so that it can be added to easily.
let g:go_debug_commands = get(g:, 'go_debug_commands', [])
return g:go_debug_commands
endfunction
function! go#config#DebugLogOutput() abort
return get(g:, 'go_debug_log_output', 'debugger,rpc')
endfunction
function! go#config#LspLog() abort
" make sure g:go_lsp_log is set so that it can be added to easily.
let g:go_lsp_log = get(g:, 'go_lsp_log', [])
return g:go_lsp_log
endfunction
function! go#config#SetDebugDiag(value) abort
let g:go_debug_diag = a:value
endfunction
function! go#config#AutoSameids() abort
return get(g:, 'go_auto_sameids', 0)
endfunction
function! go#config#SetAutoSameids(value) abort
let g:go_auto_sameids = a:value
endfunction
function! go#config#AddtagsTransform() abort
return get(g:, 'go_addtags_transform', "snakecase")
endfunction
function! go#config#TemplateAutocreate() abort
return get(g:, "go_template_autocreate", 1)
endfunction
function! go#config#SetTemplateAutocreate(value) abort
let g:go_template_autocreate = a:value
endfunction
function! go#config#MetalinterCommand() abort
return get(g:, "go_metalinter_command", "golangci-lint")
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)
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)
endfunction
function! go#config#GolintBin() abort
return get(g:, "go_golint_bin", "golint")
endfunction
function! go#config#ErrcheckBin() abort
return get(g:, "go_errcheck_bin", "errcheck")
endfunction
function! go#config#MetalinterAutosave() abort
return get(g:, "go_metalinter_autosave", 0)
endfunction
function! go#config#SetMetalinterAutosave(value) abort
let g:go_metalinter_autosave = a:value
endfunction
function! go#config#ListHeight() abort
return get(g:, "go_list_height", 0)
endfunction
function! go#config#FmtAutosave() abort
return get(g:, "go_fmt_autosave", 1)
endfunction
function! go#config#SetFmtAutosave(value) abort
let g:go_fmt_autosave = a:value
endfunction
function! go#config#AsmfmtAutosave() abort
return get(g:, "go_asmfmt_autosave", 0)
endfunction
function! go#config#SetAsmfmtAutosave(value) abort
let g:go_asmfmt_autosave = a:value
endfunction
function! go#config#ModFmtAutosave() abort
return get(g:, "go_mod_fmt_autosave", 1)
endfunction
function! go#config#SetModFmtAutosave(value) abort
let g:go_mod_fmt_autosave = a:value
endfunction
function! go#config#DocMaxHeight() abort
return get(g:, "go_doc_max_height", 20)
endfunction
function! go#config#AutoTypeInfo() abort
return get(g:, "go_auto_type_info", 0)
endfunction
function! go#config#SetAutoTypeInfo(value) abort
let g:go_auto_type_info = a:value
endfunction
function! go#config#AlternateMode() abort
return get(g:, "go_alternate_mode", "edit")
endfunction
function! go#config#DeclsMode() abort
return get(g:, "go_decls_mode", "")
endfunction
function! go#config#FmtCommand() abort
return get(g:, "go_fmt_command", "gofmt")
endfunction
function! go#config#FmtOptions() abort
return get(g:, "go_fmt_options", {})
endfunction
function! go#config#FmtFailSilently() abort
return get(g:, "go_fmt_fail_silently", 0)
endfunction
function! go#config#FmtExperimental() abort
return get(g:, "go_fmt_experimental", 0 )
endfunction
function! go#config#PlayOpenBrowser() abort
return get(g:, "go_play_open_browser", 1)
endfunction
function! go#config#GorenameBin() abort
return get(g:, "go_gorename_bin", "gorename")
endfunction
function! go#config#GorenamePrefill() abort
return get(g:, "go_gorename_prefill", 'expand("<cword>") =~# "^[A-Z]"' .
\ '? go#util#pascalcase(expand("<cword>"))' .
\ ': go#util#camelcase(expand("<cword>"))')
endfunction
function! go#config#TextobjIncludeFunctionDoc() abort
return get(g:, "go_textobj_include_function_doc", 1)
endfunction
function! go#config#TextobjIncludeVariable() abort
return get(g:, "go_textobj_include_variable", 1)
endfunction
function! go#config#BinPath() abort
return get(g:, "go_bin_path", "")
endfunction
function! go#config#SearchBinPathFirst() abort
return get(g:, 'go_search_bin_path_first', 1)
endfunction
function! go#config#HighlightArrayWhitespaceError() abort
return get(g:, 'go_highlight_array_whitespace_error', 0)
endfunction
function! go#config#HighlightChanWhitespaceError() abort
return get(g:, 'go_highlight_chan_whitespace_error', 0)
endfunction
function! go#config#HighlightExtraTypes() abort
return get(g:, 'go_highlight_extra_types', 0)
endfunction
function! go#config#HighlightSpaceTabError() abort
return get(g:, 'go_highlight_space_tab_error', 0)
endfunction
function! go#config#HighlightTrailingWhitespaceError() abort
return get(g:, 'go_highlight_trailing_whitespace_error', 0)
endfunction
function! go#config#HighlightOperators() abort
return get(g:, 'go_highlight_operators', 0)
endfunction
function! go#config#HighlightFunctions() abort
return get(g:, 'go_highlight_functions', 0)
endfunction
function! go#config#HighlightFunctionParameters() abort
" fallback to highlight_function_arguments for backwards compatibility
return get(g:, 'go_highlight_function_parameters', get(g:, 'go_highlight_function_arguments', 0))
endfunction
function! go#config#HighlightFunctionCalls() abort
return get(g:, 'go_highlight_function_calls', 0)
endfunction
function! go#config#HighlightFields() abort
return get(g:, 'go_highlight_fields', 0)
endfunction
function! go#config#HighlightTypes() abort
return get(g:, 'go_highlight_types', 0)
endfunction
function! go#config#HighlightBuildConstraints() abort
return get(g:, 'go_highlight_build_constraints', 0)
endfunction
function! go#config#HighlightStringSpellcheck() abort
return get(g:, 'go_highlight_string_spellcheck', 1)
endfunction
function! go#config#HighlightFormatStrings() abort
return get(g:, 'go_highlight_format_strings', 1)
endfunction
function! go#config#HighlightGenerateTags() abort
return get(g:, 'go_highlight_generate_tags', 0)
endfunction
function! go#config#HighlightVariableAssignments() abort
return get(g:, 'go_highlight_variable_assignments', 0)
endfunction
function! go#config#HighlightVariableDeclarations() abort
return get(g:, 'go_highlight_variable_declarations', 0)
endfunction
function! go#config#HighlightDebug() abort
return get(g:, 'go_highlight_debug', 1)
endfunction
function! go#config#FoldEnable(...) abort
if a:0 > 0
return index(go#config#FoldEnable(), a:1) > -1
endif
return get(g:, 'go_fold_enable', ['block', 'import', 'varconst', 'package_comment'])
endfunction
function! go#config#EchoGoInfo() abort
return get(g:, "go_echo_go_info", 1)
endfunction
function! go#config#CodeCompletionEnabled() abort
return get(g:, "go_code_completion_enabled", 1)
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
unlet g:go_gorename_prefill
endif
" restore Vi compatibility settings
let &cpo = s:cpo_save
unlet s:cpo_save
" vim: sw=2 ts=2 et
endif

16
autoload/graphql.vim Normal file
View File

@@ -0,0 +1,16 @@
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'graphql') == -1
" Vim plugin
" Language: GraphQL
" Maintainer: Jon Parise <jon@indelible.org>
if exists('g:autoloaded_graphql')
finish
endif
let g:autoloaded_graphql = 1
function! graphql#javascript_tags() abort
return get(g:, 'graphql_javascript_tags', ['gql', 'graphql', 'Relay.QL'])
endfunction
endif

View File

@@ -0,0 +1,41 @@
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()
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')
let &l:commentstring = '<!-- %s -->'
elseif syn_name =~? '^jsxAttrib'
let &l:commentstring = '// %s'
else
let &l:commentstring = '{/* %s */}'
endif
else
let &l:commentstring = a:original
endif
" Restore the cursor position
call winrestview(save_view)
endfunction
function! s:syn_name(lnum, cnum)
let syn_id = get(synstack(a:lnum, a:cnum), -1)
return synIDattr(syn_id, "name")
endfunction
function! s:syn_contains(lnum, cnum, syn_name)
let stack = synstack(a:lnum, a:cnum)
let syn_names = map(stack, 'synIDattr(v:val, "name")')
return index(syn_names, a:syn_name) >= 0
endfunction
endif

View File

@@ -0,0 +1,218 @@
if !exists('g:polyglot_disabled') || !(index(g:polyglot_disabled, 'typescript') != -1 || index(g:polyglot_disabled, 'typescript') != -1 || index(g:polyglot_disabled, 'jsx') != -1)
if exists('*shiftwidth')
function! s:sw()
return shiftwidth()
endfunction
else
function! s:sw()
return &sw
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")')
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")')
endfunction
function! s:prev_indent(lnum)
let lnum = prevnonblank(a:lnum - 1)
return indent(lnum)
endfunction
function! s:prev_line(lnum)
let lnum = prevnonblank(a:lnum - 1)
return substitute(getline(lnum), '^\s*\|\s*$', '', 'g')
endfunction
function! s:syn_attr_jsx(synattr)
return a:synattr =~? "^jsx"
endfunction
function! s:syn_xmlish(syns)
return s:syn_attr_jsx(get(a:syns, -1))
endfunction
function! s:syn_jsx_element(syns)
return get(a:syns, -1) =~? 'jsxElement'
endfunction
function! s:syn_js_comment(syns)
return get(a:syns, -1) =~? 'Comment$'
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')
endfunction
function! s:syn_jsx_attrib(syns)
return len(filter(copy(a:syns), 'v:val =~? "jsxAttrib"'))
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)
if s:syn_xmlish(current_syn)
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
else
return prev_ind
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
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
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
endfunction
endif

246
autoload/julia/doc.vim Normal file
View File

@@ -0,0 +1,246 @@
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'julia') == -1
" path to the julia binary to communicate with
if has('win32') || has('win64')
if exists('g:julia#doc#juliapath')
" use assigned g:julia#doc#juliapath
elseif executable('julia')
" use julia command in PATH
let g:julia#doc#juliapath = 'julia'
else
" search julia binary in the default installation paths
let pathlist = sort(glob($LOCALAPPDATA . '\Julia-*\bin\julia.exe', 1, 1))
let g:julia#doc#juliapath = get(pathlist, -1, 'julia')
endif
else
let g:julia#doc#juliapath = get(g:, 'julia#doc#juliapath', 'julia')
endif
function! s:version() abort
let VERSION = {'major': 0, 'minor': 0}
if !executable(g:julia#doc#juliapath)
return VERSION
endif
let cmd = printf('%s -v', g:julia#doc#juliapath)
let output = system(cmd)
let versionstr = matchstr(output, '\C^julia version \zs\d\+\.\d\+\ze')
let [major, minor] = map(split(versionstr, '\.'), 'str2nr(v:val)')
let VERSION.major = major
let VERSION.minor = minor
return VERSION
endfunction
let s:VERSION = s:version()
let s:NODOCPATTERN = '\C\VNo documentation found.'
function! julia#doc#lookup(keyword, ...) abort
let juliapath = get(a:000, 0, g:julia#doc#juliapath)
let keyword = escape(a:keyword, '"\')
let cmd = printf('%s -E "@doc %s"', juliapath, keyword)
return systemlist(cmd)
endfunction
function! julia#doc#open(keyword) abort
if empty(a:keyword)
call s:warn('Not an appropriate keyword.')
return
endif
if !executable(g:julia#doc#juliapath)
call s:warn('%s command is not executable', g:julia#doc#juliapath)
return
endif
let doc = julia#doc#lookup(a:keyword, g:julia#doc#juliapath)
if empty(doc) || match(doc[0], s:NODOCPATTERN) > -1
call s:warn('No documentation found for "%s".', a:keyword)
return
endif
" workaround for * and ? since a buffername cannot include them
let keyword = a:keyword
let keyword = substitute(keyword, '\*', ':asterisk:', 'g')
let keyword = substitute(keyword, '?', ':question:', 'g')
let buffername = printf('juliadoc: %s', keyword)
call s:write_to_preview_window(doc, "juliadoc", buffername)
call filter(s:HELPHISTORY, 'v:val isnot# a:keyword')
call add(s:HELPHISTORY, a:keyword)
endfunction
function! s:write_to_preview_window(content, ftype, buffername)
" Are we in the preview window from the outset? If not, best to close any
" preview windows that might exist.
let pvw = &previewwindow
if !pvw
silent! pclose!
endif
execute "silent! pedit +setlocal\\ nobuflisted\\ noswapfile\\"
\ "buftype=nofile\\ bufhidden=wipe" a:buffername
silent! wincmd P
if &previewwindow
setlocal modifiable noreadonly
silent! %delete _
call append(0, a:content)
silent! $delete _
normal! ggj
setlocal nomodified readonly nomodifiable
execute "setfiletype" a:ftype
" Only return to a normal window if we didn't start in a preview window.
if !pvw
silent! wincmd p
endif
else
" We couldn't make it to the preview window, so as a fallback we dump the
" contents in the status area.
execute printf("echo '%s'", join(a:content, "\n"))
endif
endfunction
function! s:warn(...) abort
if a:0 == 0
return
endif
echohl WarningMsg
try
if a:0 == 1
echo a:1
else
echo call('printf', a:000)
endif
finally
echohl None
endtry
endfunction
let s:KEYWORDPATTERN = '\m@\?\h\k*!\?'
" This function is called in normal mode or visual mode.
function! julia#doc#keywordprg(word) abort
if a:word is# ''
return
endif
let word = s:unfnameescape(a:word)
if word is# expand('<cword>')
" 'K' in normal mode
" NOTE: Because ! and @ is not in 'iskeyword' option, this func ignore
" the argument to recognize keywords like "@time" and "push!"
let view = winsaveview()
let lnum = line('.')
let tail = searchpos(s:KEYWORDPATTERN, 'ce', lnum)
let head = searchpos(s:KEYWORDPATTERN, 'bc', lnum)
call winrestview(view)
if head == [0, 0] || tail == [0, 0]
return
else
let start = head[1] - 1
let end = tail[1] - 1
let word = getline(lnum)[start : end]
endif
endif
call julia#doc#open(word)
endfunction
if exists('+shellslash')
let s:ESCAPEDCHARS = " \t\n\"#%'*<?`|"
else
let s:ESCAPEDCHARS = " \t\n*?[{`$\\%#'\"|!<"
endif
let s:FNAMEESCAPEPATTERN = '\\\ze[' . escape(s:ESCAPEDCHARS, ']^-\') . ']'
" this function reproduces an original string escaped by fnameescape()
function! s:unfnameescape(str) abort
if a:str is# ''
return ''
endif
" NOTE: We cannot determine the original string if a:str starts from '\-',
" '\+' or '\>' because fnameescape('-') ==# fnameescape('\-').
if a:str is# '\-'
" Remove escape anyway.
return '-'
endif
if a:str =~# '^\\[+>]'
let str = a:str[1:]
else
let str = a:str
endif
return substitute(str, s:FNAMEESCAPEPATTERN, '', 'g')
endfunction
let s:HELPPROMPT = 'help?> '
let s:HELPHISTORY = []
function! julia#doc#prompt() abort
let inputhist = s:savehistory('input')
echohl MoreMsg
try
call s:restorehistory('input', s:HELPHISTORY)
let keyword = input(s:HELPPROMPT, '', 'customlist,julia#doc#complete')
" Clear the last prompt
normal! :
finally
echohl None
call s:restorehistory('input', inputhist)
endtry
if empty(keyword)
return
endif
call julia#doc#open(keyword)
endfunction
function! s:savehistory(name) abort
if histnr(a:name) == -1
return []
endif
let history = []
for i in range(1, histnr(a:name))
let item = histget(a:name, i)
if !empty(item)
call add(history, item)
endif
endfor
return history
endfunction
function! s:restorehistory(name, history) abort
call histdel(a:name)
for item in a:history
call histadd(a:name, item)
endfor
endfunction
if s:VERSION.major == 0 && s:VERSION.minor <= 6
let s:REPL_SEARCH = 'Base.Docs.repl_search'
else
let s:REPL_SEARCH = 'import REPL.repl_search; repl_search'
endif
function! julia#doc#complete(ArgLead, CmdLine, CursorPos) abort
return s:likely(a:ArgLead)
endfunction
function! s:likely(str) abort
" escape twice
let str = escape(escape(a:str, '"\'), '"\')
let cmd = printf('%s -E "%s(\"%s\")"', g:julia#doc#juliapath, s:REPL_SEARCH, str)
let output = systemlist(cmd)
return split(matchstr(output[0], '\C^search: \zs.*'))
endfunction
endif

View File

@@ -244,8 +244,8 @@ function! julia_blocks#init_mappings()
call julia_blocks#select_reset()
augroup JuliaBlocks
au!
au InsertEnter *.jl call julia_blocks#select_reset()
au CursorMoved *.jl call s:cursor_moved()
au InsertEnter <buffer> call julia_blocks#select_reset()
au CursorMoved <buffer> call s:cursor_moved()
augroup END
" we would need some autocmd event associated with exiting from

File diff suppressed because it is too large Load Diff

536
autoload/pony.vim Normal file
View File

@@ -0,0 +1,536 @@
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'pony') == -1
" Vim plugin file
" Language: Pony
" Maintainer: Jak Wings
" TODO: Make sure echomsg is off for release.
let s:cpo_save = &cpo
set cpo&vim
"let s:skip = '<SID>InCommentOrLiteral(line("."), col("."))'
let s:skip2 = '<SID>InLiteral(line("."), col(".")) || <SID>InComment(line("."), col(".")) == 1'
let s:skip3 = '!<SID>InKeyword(line("."), col("."))'
let s:skip4 = '!<SID>InBracket(line("."), col("."))'
let s:cfstart = '\v<%(ifdef|if|match|while|for|repeat|try|with|recover|object|lambda|iftype)>'
let s:cfmiddle = '\v<%(then|elseif|else|until|do|in|elseiftype)>|\|'
let s:cfend = '\v<end>'
let s:bstartp = '\v<%(ifdef|if|then|elseif|else|(match)|while|for|in|do|try|with|recover|repeat|until|(object)|lambda|iftype|elseiftype)>'
function! pony#Indent()
if v:lnum <= 1
return 0
endif
call cursor(v:lnum, 1)
let l:pnzpos = searchpos('.', 'cbnW')
if l:pnzpos == [0, 0]
return 0
endif
if s:InComment2(l:pnzpos) > 1
"echomsg 'Comment' (l:pnzpos[0] . '-' . v:lnum) -1
return cindent(v:lnum)
endif
if s:InLiteral2(l:pnzpos)
"echomsg 'String' (l:pnzpos[0] . '-' . v:lnum) -1
return -1
endif
unlet! l:pnzpos
" NOTE: Lines started in comments and strings are checked already.
let l:pnblnum = s:PrevNonblank(v:lnum - 1)
if l:pnblnum < 1
return 0
endif
let l:pnbline = getline(l:pnblnum)
let l:pnbindent = indent(l:pnblnum)
let l:line = getline(v:lnum)
let l:indent = l:pnbindent
let l:shiftwidth = shiftwidth()
" FIXME?
let l:continuing = 0
" If the previous line ends with a unary or binary operator,
if s:IsContinued(l:pnblnum)
let l:contlnum = l:pnblnum
let l:ppcontinued = 0
let l:ppnblnum = s:PrevNonblank(l:pnblnum - 1)
while s:IsContinued(l:ppnblnum)
let l:ppcontinued += 1
let l:contlnum = l:ppnblnum
let l:ppnblnum = s:PrevNonblank(l:ppnblnum - 1)
endwhile
"echomsg 'Continued1' l:pnblnum l:contlnum
" If the previous line is also continuing another line,
if l:ppcontinued
let l:continuing = 1
if getline(l:contlnum) =~# '\v^\s*%(actor|class|struct|primitive|trait|type|interface)>'
" reset the indent level.
"echomsg 'Continuing0' (l:contlnum . '-' . v:lnum) (l:shiftwidth * 2)
let l:indent = l:shiftwidth * 2
else
" keep using the previous indent.
"echomsg 'Continuing1' (l:pnblnum . '-' . v:lnum) l:pnbindent
let l:indent = l:pnbindent
endif
" if the previous line is part of the definition of a class,
elseif l:pnbline =~# '\v^\s*%(actor|class|struct|primitive|trait|type|interface)>'
" reset the indent level.
"echomsg 'Continuing2' (l:pnblnum . '-' . v:lnum) (l:shiftwidth * 2)
let l:continuing = 1
let l:indent = l:shiftwidth * 2
" if the previous line is part of the definition of a method,
elseif l:pnbline =~# '\v^\s*%(fun|new|be)>'
" reset the indent level.
"echomsg 'Continuing3' (l:pnblnum . '-' . v:lnum) (l:pnbindent + l:shiftwidth)
let l:continuing = 1
let l:indent = l:pnbindent + l:shiftwidth
" if the previous line is the start of a definition body,
elseif l:pnbline =~# '=>\s*$'
" indent this line.
"echomsg 'Continuing4' (l:pnblnum . '-' . v:lnum) (l:pnbindent + l:shiftwidth)
let l:continuing = 1
let l:indent = l:pnbindent + l:shiftwidth
else
" indent this line twice as far.
"echomsg 'Continuing5' (l:pnblnum . '-' . v:lnum) (l:pnbindent + l:shiftwidth * 2)
let l:continuing = 1
let l:indent = l:pnbindent + l:shiftwidth * 2
endif
unlet! l:contlnum l:ppnblnum l:ppcontinued
endif
" If this line starts a document string,
if !l:continuing && l:line =~# '^\s*"""'
let l:ppnblnum = s:PrevNonblank(l:pnblnum - 1)
if s:IsContinued(l:ppnblnum)
let l:contlnum = l:ppnblnum
while s:IsContinued(l:ppnblnum)
let l:contlnum = l:ppnblnum
let l:ppnblnum = s:PrevNonblank(l:ppnblnum - 1)
endwhile
if getline(l:contlnum) =~# '\v^\s*%(actor|class|struct|primitive|trait|type|interface)>'
" reset the indent level.
"echomsg 'DocString' (l:contlnum . '-' . v:lnum) l:shiftwidth
return l:shiftwidth
endif
endif
unlet! l:contlnum l:ppnblnum
endif
" If the previous line contains an unmatched opening bracket
if !l:continuing && l:pnbline =~# '[{[(]'
" if the line ends with an opening bracket,
if l:pnbline =~# '[{[(]\s*$' && !s:InCommentOrLiteral(l:pnblnum, col([l:pnblnum, '$']) - 1)
" indent this line.
let l:indent += l:shiftwidth
else
" find the unmatched opening bracket,
let l:start = [0, 0]
let l:end = col([l:pnblnum, '$']) - 1
call cursor(l:pnblnum, l:end)
while l:end > 0
let l:start = s:OuterPos(l:start, searchpairpos('(', '', ')', 'bnW', s:skip4, l:pnblnum))
let l:start = s:OuterPos(l:start, searchpairpos('\[', '', '\]', 'bnW', s:skip4, l:pnblnum))
let l:start = s:OuterPos(l:start, searchpairpos('{', '', '}', 'bnW', s:skip4, l:pnblnum))
if l:start == [0, 0]
break
endif
" find the matched closing bracket on the same line,
call cursor(l:start[0], l:start[1])
let l:c = s:CharAtCursor(l:start[0], l:start[1])
if searchpair(escape(l:c, '['), '', escape(tr(l:c, '([{', ')]}'), ']'),
\ 'znW', s:skip4, l:pnblnum) < 1
" the unmatched opening bracket is found,
break
endif
let l:end = l:start[1]
let l:start = [0, 0]
endwhile
if l:start != [0, 0]
" indent this line.
"echomsg 'Open bracket' (l:pnblnum . '-' . v:lnum) (l:indent + l:shiftwidth)
let l:indent += l:shiftwidth
endif
endif
unlet! l:start l:end l:c
endif
" If there is a matched closing bracket on the previous line,
" NOTE:
" >|[
" | (1 -
" | 1) * 2]
" | command
" ^
if !l:continuing
call cursor(l:pnblnum, 1)
" find the last closing bracket,
let l:end = [0, 0]
let l:end = s:OuterPos(l:end, searchpairpos('(', '', ')', 'zncr', s:skip4, l:pnblnum))
let l:end = s:OuterPos(l:end, searchpairpos('\[', '', '\]', 'zncr', s:skip4, l:pnblnum))
let l:end = s:OuterPos(l:end, searchpairpos('{', '', '}', 'zncr', s:skip4, l:pnblnum))
if l:end != [0, 0]
" find the matched opening bracket on another line,
let l:c = s:CharAtCursor(l:end[0], l:end[1])
let l:start = searchpairpos(escape(tr(l:c, ')]}', '([{'), '['), '', escape(l:c, ']'), 'nbW', s:skip4)
if l:start[0] != l:end[0]
" and then this line has the same indent as the line the matched bracket stays.
"echomsg 'Matched bracket' (l:start[0] . '-' . v:lnum) indent(l:start[0])
let l:indent = indent(l:start[0])
endif
endif
unlet! l:start l:end l:c
endif
" If there is a matched closing bracket on this line,
" NOTE:
" |[
" >| (1 -
" | 1) * 2
" |]
" ^ ^
if l:line =~# '^\s*[)\]}]'
" find the first closing bracket,
call cursor(v:lnum, 1)
let l:end = [0, 0]
let l:end = s:InnerPos(l:end, searchpairpos('(', '', ')', 'zncW', s:skip4, v:lnum))
let l:end = s:InnerPos(l:end, searchpairpos('\[', '', '\]', 'zncW', s:skip4, v:lnum))
let l:end = s:InnerPos(l:end, searchpairpos('{', '', '}', 'zncW', s:skip4, v:lnum))
if l:end != [0, 0]
" find the matched opening bracket on another line,
let l:c = s:CharAtCursor(l:end[0], l:end[1])
let l:start = searchpairpos(escape(tr(l:c, ')]}', '([{'), '['), '', escape(l:c, ']'), 'nbW', s:skip4)
if l:start[0] != l:end[0]
" and then this line has the same indent as the line the matched bracket stays.
"echomsg 'Closing Bracket' (l:start[0] . '-' . v:lnum) indent(l:start[0])
let l:indent = indent(l:start[0])
endif
endif
unlet! l:start l:end l:c
endif
" If this line starts the definition of a method, closure or match case,
if l:line =~# '^\s*=>'
" find the start of the definition,
call cursor(v:lnum, 1)
let l:start = searchpairpos('\v<%(new|be|fun|lambda)>|\|', '', '=>\zs', 'bnW', s:skip3)
if l:start != [0, 0]
" then this line has the same indent as the start.
"echomsg 'Method body' (l:start[0] . '-' . v:lnum) indent(l:start[0])
return indent(l:start[0])
endif
unlet! l:start
endif
" If this line starts a class definition or starts an alias,
if l:line =~# '\v^\s*%(actor|class|struct|primitive|trait|interface|use|type)>'
" reset the indent level.
return 0
endif
" If this line starts a method definition,
if l:line =~# '\v^\s*%(new|be|fun)>'
call cursor(v:lnum, 1)
let l:start = searchpairpos(s:cfstart, s:cfmiddle, s:cfend, 'bW', s:skip3)
if l:start != [0, 0]
let l:start = searchpos(s:bstartp, 'zcnpW', l:start[0])
" see if it is in an object block,
if l:start[2] == 3
"echomsg 'Method in object' (l:start[0] . '-' . v:lnum) (l:shiftwidth + indent(l:start[0]))
return l:shiftwidth + indent(l:start[0])
endif
endif
return l:shiftwidth
endif
" If this line starts a match case,
call cursor(v:lnum, 1)
if l:line =~# '^\s*|' && s:InKeyword(searchpos('|', 'znW', v:lnum))
" find the start or the previous case of the match block,
let l:start = searchpairpos(s:cfstart, s:cfmiddle, s:cfend, 'bnW', s:skip3)
if l:start != [0, 0]
" then this line has the same indent as the start.
"echomsg 'Match case' (l:start[0] . '-' . v:lnum) indent(l:start[0])
return indent(l:start[0])
endif
unlet! l:start
endif
" If this line ends (part of) a control flow,
if l:line =~# '\v^\s*%(end|elseif|else|then|in|do|until|elseiftype)>'
" find the start or middle of the control block,
call cursor(v:lnum, 1)
let l:start = searchpairpos(s:cfstart, s:cfmiddle, s:cfend, 'bnW', s:skip3)
if l:start != [0, 0]
" then this line has the same indent as the start.
"echomsg 'Block end' (l:start[0] . '-' . v:lnum) indent(l:start[0])
return indent(l:start[0])
endif
unlet! l:start
endif
" If the previous line starts a class definition,
if l:pnbline =~# '\v^\s*%(actor|class|struct|primitive|trait|type|interface)>'
" reset the indent level.
if s:IsContinued(l:pnblnum)
return l:shiftwidth * 2
else
return l:shiftwidth
endif
endif
" If the previous line starts a method definition,
if l:pnbline =~# '\v^\s*%(new|be|fun)>'
return l:pnbindent + l:shiftwidth
endif
" If the previous line starts (part of) a control flow,
call cursor(l:pnblnum, 1)
while 1
" find the start of the control block,
let l:start = searchpos(s:bstartp, 'zcepW', l:pnblnum)
if l:start[2] == 0
break
endif
if !s:InKeyword(l:start[0:1])
call cursor(l:pnblnum, l:start[1] + 3)
continue
endif
let l:index = l:start[2]
" find the end of the control block on the same line,
let l:end = searchpair(s:cfstart, '', s:cfend, 'znW', s:skip3, l:pnblnum)
" if the control block is not ended,
if l:end < 1
" if this line is a case for a match,
if l:index == 2 && l:line =~# '^\s*|'
" then this line has the same indent as the start of the match block.
return l:pnbindent
else
" then indent this line.
"echomsg 'Block start' (l:pnblnum . '-' . v:lnum) (l:pnbindent + l:shiftwidth)
return l:pnbindent + l:shiftwidth
endif
endif
endwhile
unlet! l:start l:end l:index
return l:indent
endfunction
function! s:PrevNonblank(lnum)
let l:lnum = prevnonblank(a:lnum)
while l:lnum > 0 && (s:InComment2(l:lnum, 1) || s:InLiteral2(l:lnum, 1))
let l:lnum = prevnonblank(l:lnum - 1)
endwhile
return l:lnum
endfunction
" NOTE:
" v
" |1 /* comment */
" |2
function! s:IsContinued(lnum)
let l:lnum = s:PrevNonblank(a:lnum)
if l:lnum < 1
return 0
endif
let l:line = getline(l:lnum)
let l:width = strwidth(substitute(l:line, '\s*$', '', ''))
" FIXME?
" | 1 + //
" | //
" | 2
return !s:InCommentOrLiteral(a:lnum, l:width)
\ && (l:line =~# '\v<%(and|or|xor|is|isnt|as|not|consume|addressof|digestof)\s*$'
\ || l:line =~# '\v%([=\-.]\>|[<!=>]\=\~?|\<\<\~?|\>\>\~?|\<:|[+\-*/%<>]\~?|[.,|:@~])\s*$'
\ )
endfunction
function! s:InCommentOrLiteral(...)
return call('s:InComment', a:000) || call('s:InLiteral', a:000)
endfunction
function! s:InKeyword(...)
let [l:lnum, l:col] = (type(a:1) == type([]) ? a:1 : a:000)
for id in s:Or(synstack(l:lnum, l:col), [])
if synIDattr(id, 'name') =~# '^ponyKw'
return 1
endif
endfor
return 0
endfunction
function! s:InBracket(...)
let [l:lnum, l:col] = (type(a:1) == type([]) ? a:1 : a:000)
for id in s:Or(synstack(l:lnum, l:col), [])
if synIDattr(id, 'name') ==# 'ponyBracket'
return 1
endif
endfor
return 0
endfunction
function! s:InComment(...)
let [l:lnum, l:col] = (type(a:1) == type([]) ? a:1 : a:000)
let l:stack = synstack(l:lnum, l:col)
let l:i = len(l:stack)
while l:i > 0
let l:sname = synIDattr(l:stack[l:i - 1], 'name')
if l:sname =~# '^ponyNestedCommentX\?$'
return 1 + l:i - (l:sname =~# 'X$')
elseif l:sname =~# '^ponyCommentX\?$'
return 1
endif
let l:i -= 1
endwhile
return 0
endfunction
function! s:InLiteral(...)
let [l:lnum, l:col] = (type(a:1) == type([]) ? a:1 : a:000)
let l:stack = synstack(l:lnum, l:col)
let l:i = len(l:stack)
while l:i > 0
let l:sname = synIDattr(l:stack[l:i - 1], 'name')
if l:sname =~# '^ponyDocumentStringX\?$'
return 3
elseif l:sname =~# '^ponyStringX\?$'
return 2
elseif l:sname =~# '^ponyCharacterX\?$'
return 1
endif
let l:i -= 1
endwhile
return 0
endfunction
" NOTE:
" |// //inside
" ^^^^^^^^^^
" |/* /*inside*/ */
" ^^^^^^^^^^^^^^
function! s:InComment2(...)
let [l:lnum, l:col] = (type(a:1) == type([]) ? a:1 : a:000)
let l:stack = synstack(l:lnum, l:col)
let l:i = len(l:stack)
while l:i > 0
let l:sname = synIDattr(l:stack[l:i - 1], 'name')
if l:sname ==# 'ponyNestedComment'
return 1 + l:i
elseif l:sname ==# 'ponyComment'
return 1
elseif l:sname =~# '\v^pony%(Nested)?CommentX$'
return 0
endif
let l:i -= 1
endwhile
return 0
endfunction
" NOTE:
" |"inside"
" ^^^^^^
" |"""inside"""""
" ^^^^^^^^^^^^
function! s:InLiteral2(...)
let [l:lnum, l:col] = (type(a:1) == type([]) ? a:1 : a:000)
let l:stack = synstack(l:lnum, l:col)
let l:i = len(l:stack)
while l:i > 0
let l:sname = synIDattr(l:stack[l:i - 1], 'name')
if l:sname ==# 'ponyDocumentString'
return 3
elseif l:sname ==# 'ponyString'
return 2
elseif l:sname ==# 'ponyCharacter'
return 1
elseif l:sname =~# '\v^pony%(DocumentString|String|Character)X$'
return 0
endif
let l:i -= 1
endwhile
return 0
endfunction
function! s:CharAtCursor(...)
let [l:lnum, l:col] = (type(a:1) == type([]) ? a:1 : a:000)
return matchstr(getline(l:lnum), '\%' . l:col . 'c.')
endfunction
function! s:Or(x, y)
return !empty(a:x) ? a:x : a:y
endfunction
function! s:InnerPos(x, y)
if a:x == [0, 0]
return a:y
elseif a:y == [0, 0]
return a:x
else
return a:x[1] < a:y[1] ? a:x : a:y
end
endfunction
function! s:OuterPos(x, y)
if a:x == [0, 0]
return a:y
elseif a:y == [0, 0]
return a:x
else
return a:x[1] > a:y[1] ? a:x : a:y
end
endfunction
function! pony#ClearTrailingSpace(all, alt, ...)
let l:force = (a:0 > 0 ? a:1 : 0)
if !l:force && (&readonly || !&modifiable || !&modified)
return
endif
if a:all
for lnum in range(1, line('$'))
let l:line = getline(lnum)
let l:end = col([lnum, '$']) - 1
if l:end > 0 && l:line =~# '\s$' && !s:InLiteral(lnum, l:end)
if a:alt
call setline(lnum, substitute(l:line, '\S\@<=\s\s*$', '', ''))
else
call setline(lnum, substitute(l:line, '\s\+$', '', ''))
endif
endif
endfor
else
let l:lnum = line('.')
let l:end = col('$') - 1
let l:line = getline(l:lnum)
if l:line =~# '\s$' && !s:InLiteral(l:lnum, l:end)
if a:alt
call setline(l:lnum, substitute(l:line, '\s\+$', '', ''))
else
call setline(l:lnum, substitute(l:line, '\S\@<=\s\s*$', '', ''))
endif
endif
endif
endfunction
let &cpo = s:cpo_save
unlet s:cpo_save
endif

72
autoload/puppet/align.vim Normal file
View File

@@ -0,0 +1,72 @@
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'puppet') == -1
function! puppet#align#IndentLevel(lnum)
return indent(a:lnum) / &shiftwidth
endfunction
function! puppet#align#LinesInBlock(lnum)
let lines = []
let indent_level = puppet#align#IndentLevel(a:lnum)
let marker = a:lnum - 1
while marker >= 1
let line_text = getline(marker)
let line_indent = puppet#align#IndentLevel(marker)
if line_text =~? '\v\S'
if line_indent < indent_level
break
elseif line_indent == indent_level
call add(lines, marker)
endif
endif
let marker -= 1
endwhile
let marker = a:lnum
while marker <= line('$')
let line_text = getline(marker)
let line_indent = puppet#align#IndentLevel(marker)
if line_text =~? '\v\S'
if line_indent < indent_level
break
elseif line_indent == indent_level
call add(lines, marker)
endif
endif
let marker += 1
endwhile
return lines
endfunction
""
" Format lines with hashrocket (=>)
" @param a:1 a line where function should search for first hashrocket
" expression, if param is not given, line with active cursor is used
function! puppet#align#AlignHashrockets(...) abort
let l:lnum = get(a:, 1, line('.'))
let lines_in_block = puppet#align#LinesInBlock(l:lnum)
let max_left_len = 0
let indent_str = printf('%' . indent(l:lnum) . 's', '')
for line_num in lines_in_block
let data = matchlist(getline(line_num), '^\s*\(.\{-}\S\)\s*=>\s*\(.*\)$')
if !empty(data)
let max_left_len = max([max_left_len, strlen(data[1])])
endif
endfor
for line_num in lines_in_block
let data = matchlist(getline(line_num), '^\s*\(.\{-}\S\)\s*=>\s*\(.*\)$')
if !empty(data)
let new_line = printf('%s%-' . max_left_len . 's => %s', indent_str, data[1], data[2])
call setline(line_num, new_line)
endif
endfor
endfunction
endif

40
autoload/puppet/ctags.vim Normal file
View File

@@ -0,0 +1,40 @@
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'puppet') == -1
if !exists('s:ctags_type')
let s:ctags_type = 0
endif
let s:ctags_options_dir = expand('<sfile>:p:h:h:h') . '/ctags/'
" Return full path to option file for ctags application
function! puppet#ctags#OptionFile()
if puppet#ctags#Type() == 'universal'
let l:ctags_options = 'puppet_u.ctags'
else
let l:ctags_options = 'puppet.ctags'
endif
return s:ctags_options_dir . l:ctags_options
endfunction
" Return type of installed ctags application,
" can be 'universal' or 'exuberant'
function! puppet#ctags#Type()
if !s:ctags_type
let l:version = system('ctags --version')
if l:version =~ 'Universal Ctags'
let s:ctags_type = 'universal'
elseif l:version =~ 'Exuberant Ctags'
let s:ctags_type = 'exuberant'
else
echoerr 'Unknown version of Ctags'
endif
endif
return s:ctags_type
endfunction
endif

View File

@@ -0,0 +1,61 @@
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'puppet') == -1
"
" Simple format using puppet's l:indents and align hashrockets function
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)
call puppet#format#Fallback(l:start_lnum, l:end_lnum)
endfunction
""
" Format hashrockets expressions in every line in range start_lnum and
" end_lnum, both ends included
"
" TODO way of using AlignHashrockets function is ineffective, because it
" formats same lines again and again, find better way to do it
function! puppet#format#Hashrocket(start_lnum, end_lnum) abort
let l:lnum = a:start_lnum
while l:lnum <= a:end_lnum
call puppet#align#AlignHashrockets(l:lnum)
let l:lnum += 1
endwhile
endfunction
""
" Format indention in every line in range start_lnum and end_lnum, both ends
" included
"
function! puppet#format#Indention(start_lnum, end_lnum) abort
execute 'normal! ' . a:start_lnum . 'gg=' . a:end_lnum . 'gg'
endfunction
""
" Use internal vim default autoformat method for every line in range, only
" lines which exeed &widthline are formated
"
function! puppet#format#Fallback(start_lnum, end_lnum) abort
" 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)
execute 'normal! gww'
" Checking if autoformat expand number of lines if yes, I will extend
" range too
if l:eof_lnum < line('$')
let l:end_lnum += line('$') - l:eof_lnum
let l:eof_lnum = line('$')
endif
endif
let l:lnum += 1
endwhile
endfunction
endif

View File

@@ -1,7 +0,0 @@
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'racket') == -1
if !exists("g:raco_command")
let g:raco_command = system("which raco")
endif
endif

View File

@@ -5,7 +5,6 @@ if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'ruby') == -1
" Maintainer: Mark Guzman <segfault@hasno.info>
" URL: https://github.com/vim-ruby/vim-ruby
" Release Coordinator: Doug Kearns <dougkearns@gmail.com>
" Maintainer Version: 0.8.1
" ----------------------------------------------------------------------------
"
" Ruby IRB/Complete author: Keiju ISHITSUKA(keiju@ishitsuka.com)
@@ -55,6 +54,23 @@ if !exists("g:rubycomplete_include_objectspace")
endif
" }}} configuration failsafe initialization
" {{{ regex patterns
" Regex that defines the start-match for the 'end' keyword.
let s:end_start_regex =
\ '\C\%(^\s*\|[=,*/%+\-|;{]\|<<\|>>\|:\s\)\s*\zs' .
\ '\<\%(module\|class\|if\|for\|while\|until\|case\|unless\|begin' .
\ '\|\%(\K\k*[!?]\?\s\+\)\=def\):\@!\>' .
\ '\|\%(^\|[^.:@$]\)\@<=\<do:\@!\>'
" Regex that defines the middle-match for the 'end' keyword.
let s:end_middle_regex = '\<\%(ensure\|else\|\%(\%(^\|;\)\s*\)\@<=\<rescue:\@!\>\|when\|elsif\):\@!\>'
" Regex that defines the end-match for the 'end' keyword.
let s:end_end_regex = '\%(^\|[^.:@$]\)\@<=\<end:\@!\>'
" }}} regex patterns
" {{{ vim-side support functions
let s:rubycomplete_debug = 0
@@ -105,7 +121,7 @@ function! s:GetBufferRubyEntity( name, type, ... )
endif
let curpos = getpos(".")
let [enum,ecol] = searchpairpos( crex, '', '\(end\|}\)', 'wr' )
let [enum,ecol] = searchpairpos( s:end_start_regex, s:end_middle_regex, s:end_end_regex, 'W' )
call cursor(lastpos[1], lastpos[2])
if lnum > enum
@@ -130,19 +146,28 @@ function! s:IsPosInClassDef(pos)
return ret
endfunction
function! s:IsInComment(pos)
let stack = synstack(a:pos[0], a:pos[1])
if !empty(stack)
return synIDattr(stack[0], 'name') =~ 'ruby\%(.*Comment\|Documentation\)'
else
return 0
endif
endfunction
function! s:GetRubyVarType(v)
let stopline = 1
let vtp = ''
let pos = getpos('.')
let curpos = getpos('.')
let sstr = '^\s*#\s*@var\s*'.escape(a:v, '*').'\>\s\+[^ \t]\+\s*$'
let [lnum,lcol] = searchpos(sstr,'nb',stopline)
if lnum != 0 && lcol != 0
call setpos('.',pos)
call setpos('.',curpos)
let str = getline(lnum)
let vtp = substitute(str,sstr,'\1','')
return vtp
endif
call setpos('.',pos)
call setpos('.',curpos)
let ctors = '\(now\|new\|open\|get_instance'
if exists('g:rubycomplete_rails') && g:rubycomplete_rails == 1 && s:rubycomplete_rails_loaded == 1
let ctors = ctors.'\|find\|create'
@@ -152,9 +177,13 @@ function! s:GetRubyVarType(v)
let fstr = '=\s*\([^ \t]\+.' . ctors .'\>\|[\[{"''/]\|%[xwQqr][(\[{@]\|[A-Za-z0-9@:\-()\.]\+...\?\|lambda\|&\)'
let sstr = ''.escape(a:v, '*').'\>\s*[+\-*/]*'.fstr
let [lnum,lcol] = searchpos(sstr,'nb',stopline)
if lnum != 0 && lcol != 0
let str = matchstr(getline(lnum),fstr,lcol)
let pos = searchpos(sstr,'bW')
while pos != [0,0] && s:IsInComment(pos)
let pos = searchpos(sstr,'bW')
endwhile
if pos != [0,0]
let [lnum, col] = pos
let str = matchstr(getline(lnum),fstr,col)
let str = substitute(str,'^=\s*','','')
call setpos('.',pos)
@@ -176,7 +205,7 @@ function! s:GetRubyVarType(v)
end
return ''
endif
call setpos('.',pos)
call setpos('.',curpos)
return ''
endfunction
@@ -255,15 +284,27 @@ class VimRubyCompletion
# {{{ buffer analysis magic
def load_requires
custom_paths = VIM::evaluate("get(g:, 'rubycomplete_load_paths', [])")
if !custom_paths.empty?
$LOAD_PATH.concat(custom_paths).uniq!
end
buf = VIM::Buffer.current
enum = buf.line_number
nums = Range.new( 1, enum )
nums.each do |x|
ln = buf[x]
begin
eval( "require %s" % $1 ) if /.*require\s*(.*)$/.match( ln )
rescue Exception
#ignore?
if /.*require_relative\s*(.*)$/.match( ln )
eval( "require %s" % File.expand_path($1) )
elsif /.*require\s*(["'].*?["'])/.match( ln )
eval( "require %s" % $1 )
end
rescue Exception => e
dprint e.inspect
end
end
end
@@ -346,8 +387,13 @@ class VimRubyCompletion
if x != cur_line
next if x == 0
ln = buf[x]
if /^\s*(module|class|def|include)\s+/.match(ln)
clscnt += 1 if $1 == "class"
is_const = false
if /^\s*(module|class|def|include)\s+/.match(ln) || is_const = /^\s*?[A-Z]([A-z]|[1-9])*\s*?[|]{0,2}=\s*?.+\s*?/.match(ln)
clscnt += 1 if /class|module/.match($1)
# We must make sure to load each constant only once to avoid errors
if is_const
ln.gsub!(/\s*?[|]{0,2}=\s*?/, '||=')
end
#dprint "\$1$1
classdef += "%s\n" % ln
classdef += "end\n" if /def\s+/.match(ln)
@@ -425,7 +471,6 @@ class VimRubyCompletion
return get_buffer_entity_list( "class" )
end
def load_rails
allow_rails = VIM::evaluate("exists('g:rubycomplete_rails') && g:rubycomplete_rails")
return if allow_rails.to_i.zero?
@@ -531,7 +576,6 @@ class VimRubyCompletion
ret += ActiveRecord::ConnectionAdapters::SchemaStatements.methods
end
return ret
end
@@ -617,7 +661,6 @@ class VimRubyCompletion
want_gems = VIM::evaluate("get(g:, 'rubycomplete_load_gemfile')")
load_gems unless want_gems.to_i.zero?
input = VIM::Buffer.current.line
cpos = VIM::Window.current.cursor[1] - 1
input = input[0..cpos]
@@ -659,25 +702,25 @@ class VimRubyCompletion
methods.delete_if { |c| c.match( /'/ ) }
end
when /^::([A-Z][^:\.\(]*)$/ # Absolute Constant or class methods
when /^::([A-Z][^:\.\(]*)?$/ # Absolute Constant or class methods
dprint "const or cls"
receiver = $1
methods = Object.constants
methods.grep(/^#{receiver}/).collect{|e| "::" + e}
methods = Object.constants.collect{ |c| c.to_s }.grep(/^#{receiver}/)
when /^(((::)?[A-Z][^:.\(]*)+?)::?([^:.]*)$/ # Constant or class methods
receiver = $1
message = Regexp.quote($4)
dprint "const or cls 2 [recv: \'%s\', msg: \'%s\']" % [ receiver, message ]
load_buffer_class( receiver )
load_buffer_module( receiver )
begin
classes = eval("#{receiver}.constants")
#methods = eval("#{receiver}.methods")
constants = eval("#{receiver}.constants").collect{ |c| c.to_s }.grep(/^#{message}/)
methods = eval("#{receiver}.methods").collect{ |m| m.to_s }.grep(/^#{message}/)
rescue Exception
dprint "exception: %s" % $!
constants = []
methods = []
end
methods.grep(/^#{message}/).collect{|e| receiver + "::" + e}
when /^(:[^:.]+)\.([^.]*)$/ # Symbol
dprint "symbol"
@@ -790,7 +833,6 @@ class VimRubyCompletion
methods += Kernel.public_methods
end
include_object = VIM::evaluate("exists('g:rubycomplete_include_object') && g:rubycomplete_include_object")
methods = clean_sel( methods, message )
methods = (methods-Object.instance_methods) if include_object == "0"
@@ -833,7 +875,6 @@ let s:rubycomplete_rails_loaded = 0
call s:DefRuby()
"}}} ruby-side code
" vim:tw=78:sw=4:ts=8:et:fdm=marker:ft=vim:norl:
endif

View File

@@ -5,6 +5,58 @@ if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'rust') == -1
" Last Modified: May 27, 2014
" For bugs, patches and license go to https://github.com/rust-lang/rust.vim
function! rust#Load()
" Utility call to get this script loaded, for debugging
endfunction
function! rust#GetConfigVar(name, default)
" Local buffer variable with same name takes predeence over global
if has_key(b:, a:name)
return get(b:, a:name)
endif
if has_key(g:, a:name)
return get(g:, a:name)
endif
return a:default
endfunction
" Include expression {{{1
function! rust#IncludeExpr(fname) abort
" Remove leading 'crate::' to deal with 2018 edition style 'use'
" statements
let l:fname = substitute(a:fname, '^crate::', '', '')
" Remove trailing colons arising from lines like
"
" use foo::{Bar, Baz};
let l:fname = substitute(l:fname, ':\+$', '', '')
" Replace '::' with '/'
let l:fname = substitute(l:fname, '::', '/', 'g')
" When we have
"
" use foo::bar::baz;
"
" we can't tell whether baz is a module or a function; and we can't tell
" which modules correspond to files.
"
" So we work our way up, trying
"
" foo/bar/baz.rs
" foo/bar.rs
" foo.rs
while l:fname !=# '.'
let l:path = findfile(l:fname)
if !empty(l:path)
return l:fname
endif
let l:fname = fnamemodify(l:fname, ':h')
endwhile
return l:fname
endfunction
" Jump {{{1
function! rust#Jump(mode, function) range
@@ -70,7 +122,7 @@ function! s:Run(dict, rustc_args, args)
let pwd = a:dict.istemp ? a:dict.tmpdir : ''
let output = s:system(pwd, shellescape(rustc) . " " . join(map(rustc_args, 'shellescape(v:val)')))
if output != ''
if output !=# ''
echohl WarningMsg
echo output
echohl None
@@ -137,7 +189,7 @@ function! s:Expand(dict, pretty, args)
endfunction
function! rust#CompleteExpand(lead, line, pos)
if a:line[: a:pos-1] =~ '^RustExpand!\s*\S*$'
if a:line[: a:pos-1] =~# '^RustExpand!\s*\S*$'
" first argument and it has a !
let list = ["normal", "expanded", "typed", "expanded,identified", "flowgraph=", "everybody_loops"]
if !empty(a:lead)
@@ -166,7 +218,7 @@ function! s:Emit(dict, type, args)
let args = [relpath, '--emit', a:type, '-o', output_path] + a:args
let pwd = a:dict.istemp ? a:dict.tmpdir : ''
let output = s:system(pwd, shellescape(rustc) . " " . join(map(args, 'shellescape(v:val)')))
if output != ''
if output !=# ''
echohl WarningMsg
echo output
echohl None
@@ -176,10 +228,10 @@ function! s:Emit(dict, type, args)
exe 'silent keepalt read' fnameescape(output_path)
1
d
if a:type == "llvm-ir"
if a:type ==# "llvm-ir"
setl filetype=llvm
let extension = 'll'
elseif a:type == "asm"
elseif a:type ==# "asm"
setl filetype=asm
let extension = 's'
endif
@@ -245,8 +297,8 @@ function! s:WithPath(func, ...)
let dict.tmpdir_relpath = filename
let dict.path = dict.tmpdir.'/'.filename
let saved.mod = &mod
set nomod
let saved.mod = &modified
set nomodified
silent exe 'keepalt write! ' . fnameescape(dict.path)
if pathisempty
@@ -327,7 +379,7 @@ function! s:ShellTokenize(text)
endif
let l:state = 3
elseif l:state == 5 " single-quoted
if l:c == "'"
if l:c ==# "'"
let l:state = 1
else
let l:current .= l:c
@@ -345,7 +397,7 @@ function! s:RmDir(path)
if empty(a:path)
echoerr 'Attempted to delete empty path'
return 0
elseif a:path == '/' || a:path == $HOME
elseif a:path ==# '/' || a:path ==# $HOME
echoerr 'Attempted to delete protected path: ' . a:path
return 0
endif
@@ -398,26 +450,101 @@ function! rust#Play(count, line1, line2, ...) abort
call setreg('"', save_regcont, save_regtype)
endif
let body = l:rust_playpen_url."?code=".webapi#http#encodeURI(content)
let url = l:rust_playpen_url."?code=".webapi#http#encodeURI(content)
if strlen(body) > 5000
echohl ErrorMsg | echomsg 'Buffer too large, max 5000 encoded characters ('.strlen(body).')' | echohl None
if strlen(url) > 5000
echohl ErrorMsg | echomsg 'Buffer too large, max 5000 encoded characters ('.strlen(url).')' | echohl None
return
endif
let payload = "format=simple&url=".webapi#http#encodeURI(body)
let payload = "format=simple&url=".webapi#http#encodeURI(url)
let res = webapi#http#post(l:rust_shortener_url.'create.php', payload, {})
if res.status[0] ==# '2'
let url = res.content
if exists('g:rust_clip_command')
call system(g:rust_clip_command, url)
endif
redraw | echomsg 'Done: '.url
let footer = ''
if exists('g:rust_clip_command')
call system(g:rust_clip_command, url)
if !v:shell_error
let footer = ' (copied to clipboard)'
endif
endif
redraw | echomsg 'Done: '.url.footer
endfunction
" Run a test under the cursor or all tests {{{1
" Finds a test function name under the cursor. Returns empty string when a
" test function is not found.
function! s:SearchTestFunctionNameUnderCursor() abort
let cursor_line = line('.')
" Find #[test] attribute
if search('\m\C#\[test\]', 'bcW') is 0
return ''
endif
" Move to an opening brace of the test function
let test_func_line = search('\m\C^\s*fn\s\+\h\w*\s*(.\+{$', 'eW')
if test_func_line is 0
return ''
endif
" Search the end of test function (closing brace) to ensure that the
" cursor position is within function definition
normal! %
if line('.') < cursor_line
return ''
endif
return matchstr(getline(test_func_line), '\m\C^\s*fn\s\+\zs\h\w*')
endfunction
function! rust#Test(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 '
else
let cmd = '!'
let manifest = shellescape(manifest)
endif
if a:all
if a:options ==# ''
execute cmd . 'cargo test --manifest-path' manifest
else
execute cmd . 'cargo test --manifest-path' manifest a:options
endif
return
endif
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
endfunction
" }}}1
" vim: set noet sw=8 ts=8:
" vim: set et sw=4 sts=4 ts=8:
endif

107
autoload/rust/debugging.vim Normal file
View File

@@ -0,0 +1,107 @@
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'rust') == -1
" For debugging, inspired by https://github.com/w0rp/rust/blob/master/autoload/rust/debugging.vim
let s:global_variable_list = [
\ '_rustfmt_autosave_because_of_config',
\ 'ftplugin_rust_source_path',
\ 'loaded_syntastic_rust_cargo_checker',
\ 'loaded_syntastic_rust_filetype',
\ 'loaded_syntastic_rust_rustc_checker',
\ 'rust_bang_comment_leader',
\ 'rust_cargo_avoid_whole_workspace',
\ 'rust_clip_command',
\ 'rust_conceal',
\ 'rust_conceal_mod_path',
\ 'rust_conceal_pub',
\ 'rust_fold',
\ 'rust_last_args',
\ 'rust_last_rustc_args',
\ 'rust_original_delimitMate_excluded_regions',
\ 'rust_playpen_url',
\ 'rust_prev_delimitMate_quotes',
\ 'rust_recent_nearest_cargo_tol',
\ 'rust_recent_root_cargo_toml',
\ 'rust_recommended_style',
\ 'rust_set_conceallevel',
\ 'rust_set_conceallevel=1',
\ 'rust_set_foldmethod',
\ 'rust_set_foldmethod=1',
\ 'rust_shortener_url',
\ 'rustc_makeprg_no_percent',
\ 'rustc_path',
\ 'rustfmt_autosave',
\ 'rustfmt_autosave_if_config_present',
\ 'rustfmt_command',
\ 'rustfmt_emit_files',
\ 'rustfmt_fail_silently',
\ 'rustfmt_options',
\ 'syntastic_extra_filetypes',
\ 'syntastic_rust_cargo_fname',
\]
function! s:Echo(message) abort
execute 'echo a:message'
endfunction
function! s:EchoGlobalVariables() abort
for l:key in s:global_variable_list
if l:key !~# '^_'
call s:Echo('let g:' . l:key . ' = ' . string(get(g:, l:key, v:null)))
endif
if has_key(b:, l:key)
call s:Echo('let b:' . l:key . ' = ' . string(b:[l:key]))
endif
endfor
endfunction
function! rust#debugging#Info() abort
call cargo#Load()
call rust#Load()
call rustfmt#Load()
call s:Echo('rust.vim Global Variables:')
call s:Echo('')
call s:EchoGlobalVariables()
silent let l:output = system(g:rustfmt_command . ' --version')
echo l:output
let l:rustc = exists("g:rustc_path") ? g:rustc_path : "rustc"
silent let l:output = system(l:rustc . ' --version')
echo l:output
silent let l:output = system('cargo --version')
echo l:output
version
if exists(":SyntasticInfo")
echo "----"
echo "Info from Syntastic:"
execute "SyntasticInfo"
endif
endfunction
function! rust#debugging#InfoToClipboard() abort
redir @"
silent call rust#debugging#Info()
redir END
call s:Echo('RustInfo copied to your clipboard')
endfunction
function! rust#debugging#InfoToFile(filename) abort
let l:expanded_filename = expand(a:filename)
redir => l:output
silent call rust#debugging#Info()
redir END
call writefile(split(l:output, "\n"), l:expanded_filename)
call s:Echo('RustInfo written to ' . l:expanded_filename)
endfunction
" vim: set et sw=4 sts=4 ts=8:
endif

View File

@@ -0,0 +1,48 @@
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'rust') == -1
let s:delimitMate_extra_excluded_regions = ',rustLifetimeCandidate,rustGenericLifetimeCandidate'
" For this buffer, when delimitMate issues the `User delimitMate_map`
" event in the autocommand system, add the above-defined extra excluded
" regions to delimitMate's state, if they have not already been added.
function! rust#delimitmate#onMap() abort
if &filetype !=# 'rust'
return
endif
if get(b:, "delimitMate_quotes")
let b:rust_prev_delimitMate_quotes = b:delimitMate_quotes
endif
let b:delimitMate_quotes = "\" `"
if match(delimitMate#Get("excluded_regions"),
\ s:delimitMate_extra_excluded_regions) == -1
call delimitMate#Set("excluded_regions",
\delimitMate#Get("excluded_regions").s:delimitMate_extra_excluded_regions)
endif
endfunction
" For this buffer, when delimitMate issues the `User delimitMate_unmap`
" event in the autocommand system, delete the above-defined extra excluded
" regions from delimitMate's state (the deletion being idempotent and
" having no effect if the extra excluded regions are not present in the
" targeted part of delimitMate's state).
function! rust#delimitmate#onUnmap() abort
if &filetype !=# 'rust'
return
endif
if get(b:, "rust_prev_delimitMate_quotes")
let b:delimitMate_quotes = b:rust_prev_delimitMate_quotes
endif
call delimitMate#Set("excluded_regions", substitute(
\ delimitMate#Get("excluded_regions"),
\ '\C\V' . s:delimitMate_extra_excluded_regions,
\ '', 'g'))
endfunction
" vim: set et sw=4 sts=4 ts=8:
endif

21
autoload/rust/tags.vim Normal file
View File

@@ -0,0 +1,21 @@
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'rust') == -1
" Tagbar support code, for the sake of not automatically overriding its
" configuration in case Universal Ctags is detected.
let s:ctags_is_uctags = 0
let s:checked_ctags = 0
function! rust#tags#IsUCtags() abort
if s:checked_ctags == 0
if system('ctags --version') =~? 'universal ctags'
let s:ctags_is_uctags = 1
endif
let s:checked_ctags = 1
endif
return s:ctags_is_uctags
endfunction
" vim: set et sw=4 sts=4 ts=8:
endif

View File

@@ -21,91 +21,246 @@ if !exists("g:rustfmt_fail_silently")
let g:rustfmt_fail_silently = 0
endif
function! rustfmt#DetectVersion()
" Save rustfmt '--help' for feature inspection
silent let s:rustfmt_help = system(g:rustfmt_command . " --help")
let s:rustfmt_unstable_features = s:rustfmt_help =~# "--unstable-features"
" Build a comparable rustfmt version varible out of its `--version` output:
silent let l:rustfmt_version_full = system(g:rustfmt_command . " --version")
let l:rustfmt_version_list = matchlist(l:rustfmt_version_full,
\ '\vrustfmt ([0-9]+[.][0-9]+[.][0-9]+)')
if len(l:rustfmt_version_list) < 3
let s:rustfmt_version = "0"
else
let s:rustfmt_version = l:rustfmt_version_list[1]
endif
return s:rustfmt_version
endfunction
call rustfmt#DetectVersion()
if !exists("g:rustfmt_emit_files")
let g:rustfmt_emit_files = s:rustfmt_version >= "0.8.2"
endif
if !exists("g:rustfmt_file_lines")
let g:rustfmt_file_lines = s:rustfmt_help =~# "--file-lines JSON"
endif
let s:got_fmt_error = 0
function! s:RustfmtCommandRange(filename, line1, line2)
let l:arg = {"file": shellescape(a:filename), "range": [a:line1, a:line2]}
return printf("%s %s --write-mode=overwrite --file-lines '[%s]'", g:rustfmt_command, g:rustfmt_options, json_encode(l:arg))
function! rustfmt#Load()
" Utility call to get this script loaded, for debugging
endfunction
function! s:RustfmtCommand(filename)
return g:rustfmt_command . " --write-mode=overwrite " . g:rustfmt_options . " " . shellescape(a:filename)
endfunction
function! s:RunRustfmt(command, curw, tmpname)
if exists("*systemlist")
let out = systemlist(a:command)
function! s:RustfmtWriteMode()
if g:rustfmt_emit_files
return "--emit=files"
else
let out = split(system(a:command), '\r\?\n')
return "--write-mode=overwrite"
endif
endfunction
function! s:RustfmtConfig()
let l:rustfmt_toml = findfile('rustfmt.toml', expand('%:p:h') . ';')
if l:rustfmt_toml !=# ''
return '--config-path '.l:rustfmt_toml
endif
if v:shell_error == 0 || v:shell_error == 3
let l:_rustfmt_toml = findfile('.rustfmt.toml', expand('%:p:h') . ';')
if l:_rustfmt_toml !=# ''
return '--config-path '.l:_rustfmt_toml
endif
return ''
endfunction
function! s:RustfmtCommandRange(filename, line1, line2)
if g:rustfmt_file_lines == 0
echo "--file-lines is not supported in the installed `rustfmt` executable"
return
endif
let l:arg = {"file": shellescape(a:filename), "range": [a:line1, a:line2]}
let l:write_mode = s:RustfmtWriteMode()
let l:rustfmt_config = s:RustfmtConfig()
" FIXME: When --file-lines gets to be stable, add version range checking
" accordingly.
let l:unstable_features = s:rustfmt_unstable_features ? '--unstable-features' : ''
let l:cmd = printf("%s %s %s %s %s --file-lines '[%s]' %s", g:rustfmt_command,
\ l:write_mode, g:rustfmt_options,
\ l:unstable_features, l:rustfmt_config,
\ json_encode(l:arg), shellescape(a:filename))
return l:cmd
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
endfunction
function! s:DeleteLines(start, end) abort
silent! execute a:start . ',' . a:end . 'delete _'
endfunction
function! s:RunRustfmt(command, tmpname, fail_silently)
mkview!
let l:stderr_tmpname = tempname()
call writefile([], l:stderr_tmpname)
let l:command = a:command . ' 2> ' . l:stderr_tmpname
if a:tmpname ==# ''
" Rustfmt in stdin/stdout mode
" chdir to the directory of the file
let l:has_lcd = haslocaldir()
let l:prev_cd = getcwd()
execute 'lchdir! '.expand('%:h')
let l:buffer = getline(1, '$')
if exists("*systemlist")
silent let out = systemlist(l:command, l:buffer)
else
silent let out = split(system(l:command,
\ join(l:buffer, "\n")), '\r\?\n')
endif
else
if exists("*systemlist")
silent let out = systemlist(l:command)
else
silent let out = split(system(l:command), '\r\?\n')
endif
endif
let l:stderr = readfile(l:stderr_tmpname)
call delete(l:stderr_tmpname)
let l:open_lwindow = 0
if v:shell_error == 0
" remove undo point caused via BufWritePre
try | silent undojoin | catch | endtry
" Replace current file with temp file, then reload buffer
call rename(a:tmpname, expand('%'))
silent edit!
let &syntax = &syntax
if a:tmpname ==# ''
let l:content = l:out
else
" take the tmpfile's content, this is better than rename
" because it preserves file modes.
let l:content = readfile(a:tmpname)
endif
call s:DeleteLines(len(l:content), line('$'))
call setline(1, l:content)
" only clear location list if it was previously filled to prevent
" clobbering other additions
if s:got_fmt_error
let s:got_fmt_error = 0
call setloclist(0, [])
lwindow
let l:open_lwindow = 1
endif
elseif g:rustfmt_fail_silently == 0
elseif g:rustfmt_fail_silently == 0 && a:fail_silently == 0
" otherwise get the errors and put them in the location list
let errors = []
let l:errors = []
for line in out
" src/lib.rs:13:5: 13:10 error: expected `,`, or `}`, found `value`
let tokens = matchlist(line, '^\(.\{-}\):\(\d\+\):\(\d\+\):\s*\(\d\+:\d\+\s*\)\?\s*error: \(.*\)')
let l:prev_line = ""
for l:line in l:stderr
" error: expected one of `;` or `as`, found `extern`
" --> src/main.rs:2:1
let tokens = matchlist(l:line, '^\s\+-->\s\(.\{-}\):\(\d\+\):\(\d\+\)$')
if !empty(tokens)
call add(errors, {"filename": @%,
call add(l:errors, {"filename": @%,
\"lnum": tokens[2],
\"col": tokens[3],
\"text": tokens[5]})
\"text": l:prev_line})
endif
let l:prev_line = l:line
endfor
if empty(errors)
% | " Couldn't detect rustfmt error format, output errors
endif
if !empty(errors)
call setloclist(0, errors, 'r')
if !empty(l:errors)
call setloclist(0, l:errors, 'r')
echohl Error | echomsg "rustfmt returned error" | echohl None
else
echo "rust.vim: was not able to parse rustfmt messages. Here is the raw output:"
echo "\n"
for l:line in l:stderr
echo l:line
endfor
endif
let s:got_fmt_error = 1
lwindow
" We didn't use the temp file, so clean up
call delete(a:tmpname)
let l:open_lwindow = 1
endif
call winrestview(a:curw)
" Restore the current directory if needed
if a:tmpname ==# ''
if l:has_lcd
execute 'lchdir! '.l:prev_cd
else
execute 'chdir! '.l:prev_cd
endif
endif
" Open lwindow after we have changed back to the previous directory
if l:open_lwindow == 1
lwindow
endif
silent! loadview
endfunction
function! rustfmt#FormatRange(line1, line2)
let l:curw = winsaveview()
let l:tmpname = expand("%:p:h") . "/." . expand("%:p:t") . ".rustfmt"
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:curw, l:tmpname)
call s:RunRustfmt(command, l:tmpname, 0)
call delete(l:tmpname)
endfunction
function! rustfmt#Format()
let l:curw = winsaveview()
let l:tmpname = expand("%:p:h") . "/." . expand("%:p:t") . ".rustfmt"
call writefile(getline(1, '$'), l:tmpname)
let command = s:RustfmtCommand(l:tmpname)
call s:RunRustfmt(command, l:curw, l:tmpname)
call s:RunRustfmt(s:RustfmtCommand(), '', 0)
endfunction
function! rustfmt#Cmd()
" Mainly for debugging
return s:RustfmtCommand()
endfunction
function! rustfmt#PreWrite()
if !filereadable(expand("%@"))
return
endif
if rust#GetConfigVar('rustfmt_autosave_if_config_present', 0)
if findfile('rustfmt.toml', '.;') !=# '' || findfile('.rustfmt.toml', '.;') !=# ''
let b:rustfmt_autosave = 1
let b:_rustfmt_autosave_because_of_config = 1
endif
else
if has_key(b:, '_rustfmt_autosave_because_of_config')
unlet b:_rustfmt_autosave_because_of_config
unlet b:rustfmt_autosave
endif
endif
if !rust#GetConfigVar("rustfmt_autosave", 0)
return
endif
call s:RunRustfmt(s:RustfmtCommand(), '', 1)
endfunction
" vim: set et sw=4 sts=4 ts=8:
endif

View File

@@ -1,41 +0,0 @@
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'scss') == -1
" usage:
" set indentexpr=scss_indent#GetIndent(v:lnum)
fun! scss_indent#GetIndent(lnum)
" { -> increase indent
" } -> decrease indent
if a:lnum == 1
" start at 0 indentation
return 0
endif
" try to find last line ending with { or }
" ignoring // comments
let regex = '\([{}]\)\%(\/\/.*\)\?$'
let nr = search(regex, 'bnW')
if nr > 0
let last = indent(nr)
let m = matchlist(getline(nr), regex)
let m_curr = matchlist(getline(a:lnum), regex)
echoe string(m).string(m_curr)
if !empty(m_curr) && m_curr[1] == '}' && m[1] == '{'
" last was open, current is close, use same indent
return last
elseif !empty(m_curr) && m_curr[1] == '}' && m[1] == '}'
" } line and last line was }: decrease
return last - &sw
endif
if m[1] == '{'
" line after {: increase indent
return last + &sw
else
" line after } or { - same indent
return last
endif
else
return 0
endif
endfun
endif

34
autoload/smt2.vim Normal file
View File

@@ -0,0 +1,34 @@
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'smt2') == -1
" Invokes the solver on current file
function! smt2#RunSolver()
silent !clear
execute "!" . g:smt2_solver_command . " " . bufname("%")
endfunction
" Puts the solver's output in new split (replaces old split)
function! smt2#RunSolverAndShowResult()
let output = system(g:smt2_solver_command . " " . bufname("%") . " 2>&1")
" Create split (or reuse existent)
if exists("s:outputbufnr") && bufwinnr(s:outputbufnr) > 0
execute bufwinnr(s:outputbufnr) . 'wincmd w'
else
silent! vnew
let s:outputbufnr=bufnr('%')
endif
" Clear & (re-)fill contents
silent! normal! ggdG
setlocal filetype=smt2 buftype=nofile nobuflisted noswapfile
call append(0, split(output, '\v\n'))
normal! gg
endfunction
" Requests the solver's version
function! smt2#PrintSolverVersion()
silent !clear
execute "!" . g:smt2_solver_command . " " . g:smt2_solver_version_switch
endfunction
endif

60
autoload/terraform.vim Normal file
View File

@@ -0,0 +1,60 @@
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'terraform') == -1
function! terraform#fmt()
if !filereadable(expand('%:p'))
return
endif
let l:curw = winsaveview()
" Make a fake change so that the undo point is right.
normal! ix
normal! "_x
silent execute '%!terraform fmt -no-color -'
if v:shell_error != 0
let output = getline(1, '$')
silent undo
echo join(output, "\n")
endif
call winrestview(l:curw)
endfunction
function! terraform#align()
let p = '^.*=[^>]*$'
if exists(':Tabularize') && getline('.') =~# '^.*=' && (getline(line('.')-1) =~# p || getline(line('.')+1) =~# p)
let column = strlen(substitute(getline('.')[0:col('.')],'[^=]','','g'))
let position = strlen(matchstr(getline('.')[0:col('.')],'.*=\s*\zs.*'))
Tabularize/=/l1
normal! 0
call search(repeat('[^=]*=',column).'\s\{-\}'.repeat('.',position),'ce',line('.'))
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'
\ ]
endfunction
endif

View File

@@ -2,7 +2,7 @@ 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: January 02, 2018
" Last Change: November 03, 2018
" Initializes global variables to defaults unless they are already set
function! vifm#globals#Init()
@@ -26,6 +26,10 @@ function! vifm#globals#Init()
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

View File

@@ -94,44 +94,61 @@ let landmark_role = [
\ ]
" Ref: https://www.w3.org/TR/dpub-aria-1.0/
" Version: W3C Candidate Recommendation 15 December 2016
" Version: W3C Recommendation 14 December 2017
let dpub_role = [
\ 'dpub-abstract',
\ 'dpub-afterword',
\ 'dpub-appendix',
\ 'dpub-biblioentry',
\ 'dpub-bibliography',
\ 'dpub-biblioref',
\ 'dpub-chapter',
\ 'dpub-cover',
\ 'dpub-epilogue',
\ 'dpub-footnote',
\ 'dpub-footnotes',
\ 'dpub-foreword',
\ 'dpub-glossary',
\ 'dpub-glossdef',
\ 'dpub-glossref',
\ 'dpub-glossterm',
\ 'dpub-index',
\ 'dpub-locator',
\ 'dpub-noteref',
\ 'dpub-notice',
\ 'dpub-pagebreak',
\ 'dpub-pagelist',
\ 'dpub-part',
\ 'dpub-preface',
\ 'dpub-prologue',
\ 'dpub-pullquote',
\ 'dpub-qna',
\ 'dpub-subtitle',
\ 'dpub-tip',
\ 'dpub-title',
\ 'dpub-toc'
\ 'doc-abstract',
\ 'doc-acknowledgments',
\ 'doc-afterword',
\ 'doc-appendix',
\ 'doc-backlink',
\ 'doc-biblioentry',
\ 'doc-bibliography',
\ 'doc-biblioref',
\ 'doc-chapter',
\ 'doc-colophon',
\ 'doc-conclusion',
\ 'doc-cover',
\ 'doc-credit',
\ 'doc-credits',
\ 'doc-dedication',
\ 'doc-endnote',
\ 'doc-endnotes',
\ 'doc-epigraph',
\ 'doc-epilogue',
\ 'doc-errata',
\ 'doc-example',
\ 'doc-footnote',
\ 'doc-foreword',
\ 'doc-glossary',
\ 'doc-glossref',
\ 'doc-index',
\ 'doc-introduction',
\ 'doc-noteref',
\ 'doc-notice',
\ 'doc-pagebreak',
\ 'doc-pagelist',
\ 'doc-part',
\ 'doc-preface',
\ 'doc-prologue',
\ 'doc-pullquote',
\ 'doc-qna',
\ 'doc-subtitle',
\ 'doc-tip',
\ 'doc-toc'
\ ]
" Ref: https://www.w3.org/TR/graphics-aria-1.0/
" Version: W3C Candidate Recommendation 29 March 2018
let graphic_role = [
\ 'graphics-document',
\ 'graphics-object',
\ 'graphics-symbol'
\ ]
let role = extend(widget_role, document_structure)
let role = extend(role, landmark_role)
let role = extend(role, dpub_role)
let role = extend(role, graphic_role)
" https://www.w3.org/TR/wai-aria-1.1/#states_and_properties
let global_states_and_properties = {

View File

@@ -191,7 +191,7 @@ let attributes_value = {
\ }
if g:html5_event_handler_attributes_complete == 1
let event_handler_attributes = {'onabort': [], 'onblur': [], 'oncanplay': [], 'oncanplaythrough': [], 'onchange': [], 'onclick': [], 'oncontextmenu': [], 'ondblclick': [], 'ondrag': [], 'ondragend': [], 'ondragenter': [], 'ondragleave': [], 'ondragover': [], 'ondragstart': [], 'ondrop': [], 'ondurationchange': [], 'onemptied': [], 'onended': [], 'onerror': [], 'onfocus': [], 'onformchange': [], 'onforminput': [], 'oninput': [], 'oninvalid': [], 'onkeydown': [], 'onkeypress': [], 'onkeyup': [], 'onload': [], 'onloadeddata': [], 'onloadedmetadata': [], 'onloadstart': [], 'onmousedown': [], 'onmousemove': [], 'onmouseout': [], 'onmouseover': [], 'onmouseup': [], 'onmousewheel': [], 'onpause': [], 'onplay': [], 'onplaying': [], 'onprogress': [], 'onratechange': [], 'onreadystatechange': [], 'onscroll': [], 'onseeked': [], 'onseeking': [], 'onselect': [], 'onshow': [], 'onstalled': [], 'onsubmit': [], 'onsuspend': [], 'ontimeupdate': [], 'onvolumechange': [], 'onwaiting': []}
let event_handler_attributes = {'onabort': [], 'onblur': [], 'oncanplay': [], 'oncanplaythrough': [], 'onchange': [], 'onclick': [], 'oncontextmenu': [], 'ondblclick': [], 'ondrag': [], 'ondragend': [], 'ondragenter': [], 'ondragleave': [], 'ondragover': [], 'ondragstart': [], 'ondrop': [], 'ondurationchange': [], 'onemptied': [], 'onended': [], 'onerror': [], 'onfocus': [], 'onformchange': [], 'onforminput': [], 'oninput': [], 'oninvalid': [], 'onkeydown': [], 'onkeypress': [], 'onkeyup': [], 'onload': [], 'onloadeddata': [], 'onloadedmetadata': [], 'onloadstart': [], 'onmousedown': [], 'onmousemove': [], 'onmouseout': [], 'onmouseover': [], 'onmouseup': [], 'onmousewheel': [], 'onpause': [], 'onplay': [], 'onplaying': [], 'onprogress': [], 'onratechange': [], 'onreadystatechange': [], 'onscroll': [], 'onseeked': [], 'onseeking': [], 'onselect': [], 'onshow': [], 'onstalled': [], 'onsubmit': [], 'onsuspend': [], 'ontimeupdate': [], 'onvolumechange': [], 'onwaiting': [], 'onselectstart': [], 'onselectchange': []}
let global_attributes = extend(global_attributes, event_handler_attributes)
let body_attributes = {'onafterprint': [], 'onbeforeprint': [], 'onbeforeunload': [], 'onblur': [], 'onerror': [], 'onfocus': [], 'onhashchange': [], 'onload': [], 'onmessage': [], 'onoffline': [], 'ononline': [], 'onpopstate': [], 'onredo': [], 'onresize': [], 'onstorage': [], 'onundo': [], 'onunload': []}
@@ -214,6 +214,8 @@ if g:html5_event_handler_attributes_complete == 1
\ 'ondragleave': ['Script', ''],
\ 'ondragover': ['Script', ''],
\ 'ondragstart': ['Script', ''],
\ 'onselectstart': ['Script', ''],
\ 'onselectchange': ['Script', ''],
\ 'ondrop': ['Script', ''],
\ 'ondurationchange': ['Script', ''],
\ 'onemptied': ['Script', ''],
@@ -374,6 +376,8 @@ let abutton_dec = 'details\\|embed\\|iframe\\|keygen\\|label\\|menu\\|select\\|t
let crossorigin = ['anonymous', 'use-credentials']
let referrerpolicy = ['no-referrer', 'no-referrer-when-downgrade', 'same-origin', 'origin', 'strict-origin', 'origin-when-cross-origin', 'strict-origin-when-cross-origin', 'unsafe-url']
let g:xmldata_html5 = {
\ 'vimxmlentities': ['AElig', 'Aacute', 'Acirc', 'Agrave', 'Alpha', 'Aring', 'Atilde', 'Auml', 'Beta', 'Ccedil', 'Chi', 'Dagger', 'Delta', 'ETH', 'Eacute', 'Ecirc', 'Egrave', 'Epsilon', 'Eta', 'Euml', 'Gamma', 'Iacute', 'Icirc', 'Igrave', 'Iota', 'Iuml', 'Kappa', 'Lambda', 'Mu', 'Ntilde', 'Nu', 'OElig', 'Oacute', 'Ocirc', 'Ograve', 'Omega', 'Omicron', 'Oslash', 'Otilde', 'Ouml', 'Phi', 'Pi', 'Prime', 'Psi', 'Rho', 'Scaron', 'Sigma', 'THORN', 'Tau', 'Theta', 'Uacute', 'Ucirc', 'Ugrave', 'Upsilon', 'Uuml', 'Xi', 'Yacute', 'Yuml', 'Zeta', 'aacute', 'acirc', 'acute', 'aelig', 'agrave', 'alefsym', 'alpha', 'amp', 'and', 'ang', 'apos', 'aring', 'asymp', 'atilde', 'auml', 'bdquo', 'beta', 'brvbar', 'bull', 'cap', 'ccedil', 'cedil', 'cent', 'chi', 'circ', 'clubs', 'cong', 'copy', 'crarr', 'cup', 'curren', 'dArr', 'dagger', 'darr', 'deg', 'delta', 'diams', 'divide', 'eacute', 'ecirc', 'egrave', 'empty', 'emsp', 'ensp', 'epsilon', 'equiv', 'eta', 'eth', 'euml', 'euro', 'exist', 'fnof', 'forall', 'frac12', 'frac14', 'frac34', 'frasl', 'gamma', 'ge', 'gt', 'hArr', 'harr', 'hearts', 'hellip', 'iacute', 'icirc', 'iexcl', 'igrave', 'image', 'infin', 'int', 'iota', 'iquest', 'isin', 'iuml', 'kappa', 'lArr', 'lambda', 'lang', 'laquo', 'larr', 'lceil', 'ldquo', 'le', 'lfloor', 'lowast', 'loz', 'lrm', 'lsaquo', 'lsquo', 'lt', 'macr', 'mdash', 'micro', 'middot', 'minus', 'mu', 'nabla', 'nbsp', 'ndash', 'ne', 'ni', 'not', 'notin', 'nsub', 'ntilde', 'nu', 'oacute', 'ocirc', 'oelig', 'ograve', 'oline', 'omega', 'omicron', 'oplus', 'or', 'ordf', 'ordm', 'oslash', 'otilde', 'otimes', 'ouml', 'para', 'part', 'permil', 'perp', 'phi', 'pi', 'piv', 'plusmn', 'pound', 'prime', 'prod', 'prop', 'psi', 'quot', 'rArr', 'radic', 'rang', 'raquo', 'rarr', 'rceil', 'rdquo', 'real', 'reg', 'rfloor', 'rho', 'rlm', 'rsaquo', 'rsquo', 'sbquo', 'scaron', 'sdot', 'sect', 'shy', 'sigma', 'sigmaf', 'sim', 'spades', 'sub', 'sube', 'sum', 'sup', 'sup1', 'sup2', 'sup3', 'supe', 'szlig', 'tau', 'there4', 'theta', 'thetasym', 'thinsp', 'thorn', 'tilde', 'times', 'trade', 'uArr', 'uacute', 'uarr', 'ucirc', 'ugrave', 'uml', 'upsih', 'upsilon', 'uuml', 'weierp', 'xi', 'yacute', 'yen', 'yuml', 'zeta', 'zwj', 'zwnj'],
@@ -392,7 +396,7 @@ let g:xmldata_html5 = {
\ ],
\ 'area': [
\ [],
\ extend(copy(global_attributes), {'alt': [], 'href': [], 'target': [], 'rel': linktypes, 'media': [], 'hreflang': lang_tag, 'type': [], 'shape': ['rect', 'circle', 'poly', 'default'], 'coords': [], 'referrerpolicy': ['no-referrer', 'no-referrer-when-downgrade', 'origin', 'origin-when-cross-origin', 'unsafe-url']})
\ extend(copy(global_attributes), {'alt': [], 'href': [], 'target': [], 'rel': linktypes, 'media': [], 'hreflang': lang_tag, 'type': [], 'shape': ['rect', 'circle', 'poly', 'default'], 'coords': [], 'referrerpolicy': referrerpolicy})
\ ],
\ 'article': [
\ flow_elements + ['style'],
@@ -490,6 +494,10 @@ let g:xmldata_html5 = {
\ filter(copy(phrasing_elements), "!(v:val =~ 'dfn')"),
\ global_attributes
\ ],
\ 'dialog': [
\ flow_elements,
\ extend(copy(global_attributes), {'open': []})
\ ],
\ 'div': [
\ flow_elements + ['style'],
\ global_attributes
@@ -580,11 +588,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': ['no-referrer', 'no-referrer-when-downgrade', 'origin', 'origin-when-cross-origin', 'unsafe-url'], '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': []})
\ ],
\ 'img': [
\ [],
\ extend(copy(global_attributes), {'src': [], 'alt': [], 'height': [], 'width': [], 'decoding': ['async', 'sync', 'auto'], 'usemap': [], 'ismap': ['ismap', ''], 'referrerpolicy': ['no-referrer', 'no-referrer-when-downgrade', 'origin', 'origin-when-cross-origin', 'unsafe-url'], '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']})
\ ],
\ 'input': [
\ [],
@@ -616,7 +624,7 @@ let g:xmldata_html5 = {
\ ],
\ 'link': [
\ [],
\ extend(copy(global_attributes), {'href': [], 'rel': linkreltypes, 'hreflang': lang_tag, 'media': [], 'type': [], 'sizes': ['any'], 'referrerpolicy': ['no-referrer', 'no-referrer-when-downgrade', 'origin', 'origin-when-cross-origin', 'unsafe-url'], 'crossorigin': crossorigin, 'preload': ['preload', ''], 'prefetch': ['prefetch', ''], 'as': ['report', 'document', 'document', 'object', 'embed', 'audio', 'font', 'image', 'audioworklet', 'paintworklet', 'script', 'serviceworker', 'sharedworker', 'worker', 'style', 'track', 'video', 'image', 'manifest', 'xslt', 'fetch', '']})
\ extend(copy(global_attributes), {'href': [], 'rel': linkreltypes, 'hreflang': lang_tag, 'media': [], 'type': [], 'sizes': ['any'], 'referrerpolicy': referrerpolicy, 'crossorigin': crossorigin, 'preload': ['preload', ''], 'prefetch': ['prefetch', ''], 'as': ['report', 'document', 'document', 'object', 'embed', 'audio', 'font', 'image', 'audioworklet', 'paintworklet', 'script', 'serviceworker', 'sharedworker', 'worker', 'style', 'track', 'video', 'image', 'manifest', 'xslt', 'fetch', '']})
\ ],
\ 'main': [
\ flow_elements + ['style'],

43
autoload/zig/config.vim Normal file
View File

@@ -0,0 +1,43 @@
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'zig') == -1
function! zig#config#ListTypeCommands() abort
return get(g:, 'zig_list_type_commands', {})
endfunction
function! zig#config#ListType() abort
return get(g:, 'zig_list_type', '')
endfunction
function! zig#config#ListAutoclose() abort
return get(g:, 'zig_list_autoclose', 1)
endfunction
function! zig#config#ListHeight() abort
return get(g:, "zig_list_height", 0)
endfunction
function! zig#config#FmtAutosave() abort
return get(g:, "zig_fmt_autosave", 0)
endfunction
function! zig#config#SetFmtAutosave(value) abort
let g:zig_fmt_autosave = a:value
endfunction
function! zig#config#FmtCommand() abort
return get(g:, "zig_fmt_command", ['zig', 'fmt', '--color', 'off'])
endfunction
function! zig#config#FmtFailSilently() abort
return get(g:, "zig_fmt_fail_silently", 0)
endfunction
function! zig#config#FmtExperimental() abort
return get(g:, "zig_fmt_experimental", 0)
endfunction
function! zig#config#Debug() abort
return get(g:, 'zig_debug', [])
endfunction
endif

170
autoload/zig/fmt.vim Normal file
View File

@@ -0,0 +1,170 @@
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'zig') == -1
" Adapted from fatih/vim-go: autoload/go/fmt.vim
"
" Copyright 2011 The Go Authors. All rights reserved.
" Use of this source code is governed by a BSD-style
" license that can be found in the LICENSE file.
"
function! zig#fmt#Format() abort
if zig#config#FmtExperimental()
" Using winsaveview to save/restore cursor state has the problem of
" closing folds on save:
" https://github.com/fatih/vim-go/issues/502
" One fix is to use mkview instead. Unfortunately, this sometimes causes
" other bad side effects:
" https://github.com/fatih/vim-go/issues/728
" and still closes all folds if foldlevel>0:
" https://github.com/fatih/vim-go/issues/732
let l:curw = {}
try
mkview!
catch
let l:curw = winsaveview()
endtry
" save our undo file to be restored after we are done. This is needed to
" prevent an additional undo jump due to BufWritePre auto command and also
" restore 'redo' history because it's getting being destroyed every
" BufWritePre
let tmpundofile = tempname()
exe 'wundo! ' . tmpundofile
else
" Save cursor position and many other things.
let l:curw = winsaveview()
endif
" Save cursor position and many other things.
let l:curw = winsaveview()
let bin_name = zig#config#FmtCommand()
" Get current position in file
let current_col = col('.')
let orig_line_count = line('$')
" Save current buffer first, else fmt will run on the original file and we
" will lose our changes.
silent! execute 'write' expand('%')
let [l:out, l:err] = zig#fmt#run(bin_name, expand('%'))
if l:err == 0
call zig#fmt#update_file(expand('%'))
elseif !zig#config#FmtFailSilently()
let errors = s:parse_errors(expand('%'), out)
call s:show_errors(errors)
endif
let diff_offset = line('$') - orig_line_count
if zig#config#FmtExperimental()
" restore our undo history
silent! exe 'rundo ' . tmpundofile
call delete(tmpundofile)
" Restore our cursor/windows positions, folds, etc.
if empty(l:curw)
silent! loadview
else
call winrestview(l:curw)
endif
else
" Restore our cursor/windows positions.
call winrestview(l:curw)
endif
" be smart and jump to the line the new statement was added/removed
call cursor(line('.') + diff_offset, current_col)
" Syntax highlighting breaks less often.
syntax sync fromstart
endfunction
" update_file updates the target file with the given formatted source
function! zig#fmt#update_file(target)
" remove undo point caused via BufWritePre
try | silent undojoin | catch | endtry
" reload buffer to reflect latest changes
silent edit!
let l:listtype = zig#list#Type("ZigFmt")
" the title information was introduced with 7.4-2200
" https://github.com/vim/vim/commit/d823fa910cca43fec3c31c030ee908a14c272640
if has('patch-7.4.2200')
" clean up previous list
if l:listtype == "quickfix"
let l:list_title = getqflist({'title': 1})
else
let l:list_title = getloclist(0, {'title': 1})
endif
else
" can't check the title, so assume that the list was for go fmt.
let l:list_title = {'title': 'Format'}
endif
if has_key(l:list_title, "title") && l:list_title['title'] == "Format"
call zig#list#Clean(l:listtype)
endif
endfunction
" run runs the gofmt/goimport command for the given source file and returns
" the output of the executed command. Target is the real file to be formatted.
function! zig#fmt#run(bin_name, target)
let l:cmd = []
call extend(cmd, a:bin_name)
call extend(cmd, [a:target])
return zig#util#Exec(l:cmd)
endfunction
" parse_errors parses the given errors and returns a list of parsed errors
function! s:parse_errors(filename, content) abort
let splitted = split(a:content, '\n')
" list of errors to be put into location list
let errors = []
for line in splitted
let tokens = matchlist(line, '^\(.\{-}\):\(\d\+\):\(\d\+\)\s*\(.*\)')
if !empty(tokens)
call add(errors,{
\"filename": a:filename,
\"lnum": tokens[2],
\"col": tokens[3],
\"text": tokens[4],
\ })
endif
endfor
return errors
endfunction
" show_errors opens a location list and shows the given errors. If the given
" errors is empty, it closes the the location list
function! s:show_errors(errors) abort
let l:listtype = zig#list#Type("ZigFmt")
if !empty(a:errors)
call zig#list#Populate(l:listtype, a:errors, 'Format')
echohl Error | echomsg "zig fmt returned error" | echohl None
endif
" this closes the window if there are no errors or it opens
" it if there is any
call zig#list#Window(l:listtype, len(a:errors))
endfunction
function! zig#fmt#ToggleFmtAutoSave() abort
if zig#config#FmtAutosave()
call zig#config#SetFmtAutosave(0)
call zig#util#EchoProgress("auto fmt disabled")
return
end
call zig#config#SetFmtAutosave(1)
call zig#util#EchoProgress("auto fmt enabled")
endfunction
" vim: sw=2 ts=2 et
endif

162
autoload/zig/list.vim Normal file
View File

@@ -0,0 +1,162 @@
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'zig') == -1
" Adapted from fatih/vim-go: autoload/go/list.vim
"
" Copyright 2011 The Go Authors. All rights reserved.
" Use of this source code is governed by a BSD-style
" license that can be found in the LICENSE file.
"
" Window opens the list with the given height up to 10 lines maximum.
" Otherwise g:zig_loclist_height is used.
"
" If no or zero height is given it closes the window by default.
" To prevent this, set g:zig_list_autoclose = 0
function! zig#list#Window(listtype, ...) abort
" we don't use lwindow to close the location list as we need also the
" ability to resize the window. So, we are going to use lopen and lclose
" for a better user experience. If the number of errors in a current
" location list increases/decreases, cwindow will not resize when a new
" updated height is passed. lopen in the other hand resizes the screen.
if !a:0 || a:1 == 0
call zig#list#Close(a:listtype)
return
endif
let height = zig#config#ListHeight()
if height == 0
" prevent creating a large location height for a large set of numbers
if a:1 > 10
let height = 10
else
let height = a:1
endif
endif
if a:listtype == "locationlist"
exe 'lopen ' . height
else
exe 'copen ' . height
endif
endfunction
" Get returns the current items from the list
function! zig#list#Get(listtype) abort
if a:listtype == "locationlist"
return getloclist(0)
else
return getqflist()
endif
endfunction
" Populate populate the list with the given items
function! zig#list#Populate(listtype, items, title) abort
if a:listtype == "locationlist"
call setloclist(0, a:items, 'r')
" The last argument ({what}) is introduced with 7.4.2200:
" https://github.com/vim/vim/commit/d823fa910cca43fec3c31c030ee908a14c272640
if has("patch-7.4.2200") | call setloclist(0, [], 'a', {'title': a:title}) | endif
else
call setqflist(a:items, 'r')
if has("patch-7.4.2200") | call setqflist([], 'a', {'title': a:title}) | endif
endif
endfunction
" Parse parses the given items based on the specified errorformat and
" populates the list.
function! zig#list#ParseFormat(listtype, errformat, items, title) abort
" backup users errorformat, will be restored once we are finished
let old_errorformat = &errorformat
" parse and populate the location list
let &errorformat = a:errformat
try
call zig#list#Parse(a:listtype, a:items, a:title)
finally
"restore back
let &errorformat = old_errorformat
endtry
endfunction
" Parse parses the given items based on the global errorformat and
" populates the list.
function! zig#list#Parse(listtype, items, title) abort
if a:listtype == "locationlist"
lgetexpr a:items
if has("patch-7.4.2200") | call setloclist(0, [], 'a', {'title': a:title}) | endif
else
cgetexpr a:items
if has("patch-7.4.2200") | call setqflist([], 'a', {'title': a:title}) | endif
endif
endfunction
" JumpToFirst jumps to the first item in the location list
function! zig#list#JumpToFirst(listtype) abort
if a:listtype == "locationlist"
ll 1
else
cc 1
endif
endfunction
" Clean cleans and closes the location list
function! zig#list#Clean(listtype) abort
if a:listtype == "locationlist"
lex []
else
cex []
endif
call zig#list#Close(a:listtype)
endfunction
" Close closes the location list
function! zig#list#Close(listtype) abort
let autoclose_window = zig#config#ListAutoclose()
if !autoclose_window
return
endif
if a:listtype == "locationlist"
lclose
else
cclose
endif
endfunction
function! s:listtype(listtype) abort
let listtype = zig#config#ListType()
if empty(listtype)
return a:listtype
endif
return listtype
endfunction
" s:default_list_type_commands is the defaults that will be used for each of
" the supported commands (see documentation for g:zig_list_type_commands). When
" defining a default, quickfix should be used if the command operates on
" multiple files, while locationlist should be used if the command operates on a
" single file or buffer. Keys that begin with an underscore are not supported
" in g:zig_list_type_commands.
let s:default_list_type_commands = {
\ "ZigFmt": "locationlist",
\ }
function! zig#list#Type(for) abort
let l:listtype = s:listtype(get(s:default_list_type_commands, a:for))
if l:listtype == "0"
call zig#util#EchoError(printf(
\ "unknown list type command value found ('%s'). Please open a bug report in the zig.vim repo.",
\ a:for))
let l:listtype = "quickfix"
endif
return get(zig#config#ListTypeCommands(), a:for, l:listtype)
endfunction
" vim: sw=2 ts=2 et
endif

394
autoload/zig/util.vim Normal file
View File

@@ -0,0 +1,394 @@
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'zig') == -1
" Adapted from vim-go: autoload/go/util.vim
"
" Copyright 2011 The Go Authors. All rights reserved.
" Use of this source code is governed by a BSD-style
" license that can be found in the LICENSE file.
"
" PathSep returns the appropriate OS specific path separator.
function! zig#util#PathSep() abort
if zig#util#IsWin()
return '\'
endif
return '/'
endfunction
" PathListSep returns the appropriate OS specific path list separator.
function! zig#util#PathListSep() abort
if zig#util#IsWin()
return ";"
endif
return ":"
endfunction
" LineEnding returns the correct line ending, based on the current fileformat
function! zig#util#LineEnding() abort
if &fileformat == 'dos'
return "\r\n"
elseif &fileformat == 'mac'
return "\r"
endif
return "\n"
endfunction
" Join joins any number of path elements into a single path, adding a
" Separator if necessary and returns the result
function! zig#util#Join(...) abort
return join(a:000, zig#util#PathSep())
endfunction
" IsWin returns 1 if current OS is Windows or 0 otherwise
function! zig#util#IsWin() abort
let win = ['win16', 'win32', 'win64', 'win95']
for w in win
if (has(w))
return 1
endif
endfor
return 0
endfunction
" IsMac returns 1 if current OS is macOS or 0 otherwise.
function! zig#util#IsMac() abort
return has('mac') ||
\ has('macunix') ||
\ has('gui_macvim') ||
\ zig#util#Exec(['uname'])[0] =~? '^darwin'
endfunction
" Checks if using:
" 1) Windows system,
" 2) And has cygpath executable,
" 3) And uses *sh* as 'shell'
function! zig#util#IsUsingCygwinShell()
return zig#util#IsWin() && executable('cygpath') && &shell =~ '.*sh.*'
endfunction
" Check if Vim jobs API is supported.
"
" The (optional) first paramter can be added to indicate the 'cwd' or 'env'
" parameters will be used, which wasn't added until a later version.
function! zig#util#has_job(...) abort
" cwd and env parameters to job_start was added in this version.
if a:0 > 0 && a:1 is 1
return has('job') && has("patch-8.0.0902")
endif
" job was introduced in 7.4.xxx however there are multiple bug fixes and one
" of the latest is 8.0.0087 which is required for a stable async API.
return has('job') && has("patch-8.0.0087")
endfunction
let s:env_cache = {}
" env returns the go environment variable for the given key. Where key can be
" GOARCH, GOOS, GOROOT, etc... It caches the result and returns the cached
" version.
function! zig#util#env(key) abort
let l:key = tolower(a:key)
if has_key(s:env_cache, l:key)
return s:env_cache[l:key]
endif
if executable('go')
let l:var = call('zig#util#'.l:key, [])
if zig#util#ShellError() != 0
call zig#util#EchoError(printf("'go env %s' failed", toupper(l:key)))
return ''
endif
else
let l:var = eval("$".toupper(a:key))
endif
let s:env_cache[l:key] = l:var
return l:var
endfunction
" Run a shell command.
"
" It will temporary set the shell to /bin/sh for Unix-like systems if possible,
" so that we always use a standard POSIX-compatible Bourne shell (and not e.g.
" csh, fish, etc.) See #988 and #1276.
function! s:system(cmd, ...) abort
" Preserve original shell and shellredir values
let l:shell = &shell
let l:shellredir = &shellredir
if !zig#util#IsWin() && executable('/bin/sh')
set shell=/bin/sh shellredir=>%s\ 2>&1
endif
try
return call('system', [a:cmd] + a:000)
finally
" Restore original values
let &shell = l:shell
let &shellredir = l:shellredir
endtry
endfunction
" System runs a shell command "str". Every arguments after "str" is passed to
" stdin.
function! zig#util#System(str, ...) abort
return call('s:system', [a:str] + a:000)
endfunction
" Exec runs a shell command "cmd", which must be a list, one argument per item.
" Every list entry will be automatically shell-escaped
" Every other argument is passed to stdin.
function! zig#util#Exec(cmd, ...) abort
if len(a:cmd) == 0
call zig#util#EchoError("zig#util#Exec() called with empty a:cmd")
return ['', 1]
endif
let l:bin = a:cmd[0]
if !executable(l:bin)
call zig#util#EchoError(printf("could not find binary '%s'", a:cmd[0]))
return ['', 1]
endif
return call('s:exec', [a:cmd] + a:000)
endfunction
function! s:exec(cmd, ...) abort
let l:bin = a:cmd[0]
let l:cmd = zig#util#Shelljoin([l:bin] + a:cmd[1:])
if zig#util#HasDebug('shell-commands')
call zig#util#EchoInfo('shell command: ' . l:cmd)
endif
let l:out = call('s:system', [l:cmd] + a:000)
return [l:out, zig#util#ShellError()]
endfunction
function! zig#util#ShellError() abort
return v:shell_error
endfunction
" StripPath strips the path's last character if it's a path separator.
" example: '/foo/bar/' -> '/foo/bar'
function! zig#util#StripPathSep(path) abort
let last_char = strlen(a:path) - 1
if a:path[last_char] == zig#util#PathSep()
return strpart(a:path, 0, last_char)
endif
return a:path
endfunction
" StripTrailingSlash strips the trailing slash from the given path list.
" example: ['/foo/bar/'] -> ['/foo/bar']
function! zig#util#StripTrailingSlash(paths) abort
return map(copy(a:paths), 'zig#util#StripPathSep(v:val)')
endfunction
" Shelljoin returns a shell-safe string representation of arglist. The
" {special} argument of shellescape() may optionally be passed.
function! zig#util#Shelljoin(arglist, ...) abort
try
let ssl_save = &shellslash
set noshellslash
if a:0
return join(map(copy(a:arglist), 'shellescape(v:val, ' . a:1 . ')'), ' ')
endif
return join(map(copy(a:arglist), 'shellescape(v:val)'), ' ')
finally
let &shellslash = ssl_save
endtry
endfunction
fu! zig#util#Shellescape(arg)
try
let ssl_save = &shellslash
set noshellslash
return shellescape(a:arg)
finally
let &shellslash = ssl_save
endtry
endf
" Shelllist returns a shell-safe representation of the items in the given
" arglist. The {special} argument of shellescape() may optionally be passed.
function! zig#util#Shelllist(arglist, ...) abort
try
let ssl_save = &shellslash
set noshellslash
if a:0
return map(copy(a:arglist), 'shellescape(v:val, ' . a:1 . ')')
endif
return map(copy(a:arglist), 'shellescape(v:val)')
finally
let &shellslash = ssl_save
endtry
endfunction
" Returns the byte offset for line and column
function! zig#util#Offset(line, col) abort
if &encoding != 'utf-8'
let sep = zig#util#LineEnding()
let buf = a:line == 1 ? '' : (join(getline(1, a:line-1), sep) . sep)
let buf .= a:col == 1 ? '' : getline('.')[:a:col-2]
return len(iconv(buf, &encoding, 'utf-8'))
endif
return line2byte(a:line) + (a:col-2)
endfunction
"
" Returns the byte offset for the cursor
function! zig#util#OffsetCursor() abort
return zig#util#Offset(line('.'), col('.'))
endfunction
" Windo is like the built-in :windo, only it returns to the window the command
" was issued from
function! zig#util#Windo(command) abort
let s:currentWindow = winnr()
try
execute "windo " . a:command
finally
execute s:currentWindow. "wincmd w"
unlet s:currentWindow
endtry
endfunction
" snippetcase converts the given word to given preferred snippet setting type
" case.
function! zig#util#snippetcase(word) abort
let l:snippet_case = zig#config#AddtagsTransform()
if l:snippet_case == "snakecase"
return zig#util#snakecase(a:word)
elseif l:snippet_case == "camelcase"
return zig#util#camelcase(a:word)
else
return a:word " do nothing
endif
endfunction
" snakecase converts a string to snake case. i.e: FooBar -> foo_bar
" Copied from tpope/vim-abolish
function! zig#util#snakecase(word) abort
let word = substitute(a:word, '::', '/', 'g')
let word = substitute(word, '\(\u\+\)\(\u\l\)', '\1_\2', 'g')
let word = substitute(word, '\(\l\|\d\)\(\u\)', '\1_\2', 'g')
let word = substitute(word, '[.-]', '_', 'g')
let word = tolower(word)
return word
endfunction
" camelcase converts a string to camel case. e.g. FooBar or foo_bar will become
" fooBar.
" Copied from tpope/vim-abolish.
function! zig#util#camelcase(word) abort
let word = substitute(a:word, '-', '_', 'g')
if word !~# '_' && word =~# '\l'
return substitute(word, '^.', '\l&', '')
else
return substitute(word, '\C\(_\)\=\(.\)', '\=submatch(1)==""?tolower(submatch(2)) : toupper(submatch(2))','g')
endif
endfunction
" pascalcase converts a string to 'PascalCase'. e.g. fooBar or foo_bar will
" become FooBar.
function! zig#util#pascalcase(word) abort
let word = zig#util#camelcase(a:word)
return toupper(word[0]) . word[1:]
endfunction
" Echo a message to the screen and highlight it with the group in a:hi.
"
" The message can be a list or string; every line with be :echomsg'd separately.
function! s:echo(msg, hi)
let l:msg = []
if type(a:msg) != type([])
let l:msg = split(a:msg, "\n")
else
let l:msg = a:msg
endif
" Tabs display as ^I or <09>, so manually expand them.
let l:msg = map(l:msg, 'substitute(v:val, "\t", " ", "")')
exe 'echohl ' . a:hi
for line in l:msg
echom "zig.vim: " . line
endfor
echohl None
endfunction
function! zig#util#EchoSuccess(msg)
call s:echo(a:msg, 'Function')
endfunction
function! zig#util#EchoError(msg)
call s:echo(a:msg, 'ErrorMsg')
endfunction
function! zig#util#EchoWarning(msg)
call s:echo(a:msg, 'WarningMsg')
endfunction
function! zig#util#EchoProgress(msg)
redraw
call s:echo(a:msg, 'Identifier')
endfunction
function! zig#util#EchoInfo(msg)
call s:echo(a:msg, 'Debug')
endfunction
" Get all lines in the buffer as a a list.
function! zig#util#GetLines()
let buf = getline(1, '$')
if &encoding != 'utf-8'
let buf = map(buf, 'iconv(v:val, &encoding, "utf-8")')
endif
if &l:fileformat == 'dos'
" XXX: line2byte() depend on 'fileformat' option.
" so if fileformat is 'dos', 'buf' must include '\r'.
let buf = map(buf, 'v:val."\r"')
endif
return buf
endfunction
" Make a named temporary directory which starts with "prefix".
"
" Unfortunately Vim's tempname() is not portable enough across various systems;
" see: https://github.com/mattn/vim-go/pull/3#discussion_r138084911
function! zig#util#tempdir(prefix) abort
" See :help tempfile
if zig#util#IsWin()
let l:dirs = [$TMP, $TEMP, 'c:\tmp', 'c:\temp']
else
let l:dirs = [$TMPDIR, '/tmp', './', $HOME]
endif
let l:dir = ''
for l:d in dirs
if !empty(l:d) && filewritable(l:d) == 2
let l:dir = l:d
break
endif
endfor
if l:dir == ''
call zig#util#EchoError('Unable to find directory to store temporary directory in')
return
endif
" Not great randomness, but "good enough" for our purpose here.
let l:rnd = sha256(printf('%s%s', localtime(), fnamemodify(bufname(''), ":p")))
let l:tmp = printf("%s/%s%s", l:dir, a:prefix, l:rnd)
call mkdir(l:tmp, 'p', 0700)
return l:tmp
endfunction
" Report if the user enabled a debug flag in g:zig_debug.
function! zig#util#HasDebug(flag)
return index(zig#config#Debug(), a:flag) >= 0
endfunction
" vim: sw=2 ts=2 et
endif

233
build
View File

@@ -3,41 +3,48 @@
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"
DIRS_ALL="syntax indent compiler autoload ftplugin after"
# 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"
DIRS_RM="$DIRS_JAVASCRIPT"
read -r -a DIRS_RM <<<"$DIRS_ALL"
OUTPUT=""
output() {
OUTPUT="$OUTPUT$1"
printf -- "$1"
echo -n "$1"
}
download() {
for pack in $1; do
path="$(printf "$pack" | cut -d ':' -f 2)"
dir="tmp/$(printf "$path" | cut -d '/' -f 2)"
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/$path/tar.gz/master | tar -zx -C "$dir" --strip 1 && printf '.') &
(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() {
printf "\n"
echo
cat config.vim >> tmp/polyglot.vim
for pack in $1; do
name="$(printf "$pack" | cut -d ':' -f 1)"
path="$(printf "$pack" | cut -d ':' -f 2)"
dir="tmp/$(printf "$path" | cut -d '/' -f 2)"
directories="DIRS$(printf "$pack" | cut -d ':' -f 3)"
subtree="$(printf "$pack" | cut -d ':' -f 4)"
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=""
@@ -52,21 +59,29 @@ extract() {
fi
done
output "${subdirs##, })\n"
# 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
if (echo "julia coffee-script elixir fish git plantuml scala swift" | fgrep -q "$name"); then
echo "Skipping ftdetect installation of $name"
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
for f in ${dir}/ftdetect/*; do
(
echo "augroup filetypedetect";
echo '" '"$pack";
cat "${f}";
echo "augroup END";
echo
) >> tmp/polyglot.vim;
[ -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
@@ -74,51 +89,82 @@ extract() {
mv tmp/polyglot.vim ftdetect/
for pack in $1; do
name="$(printf "$pack" | cut -d ':' -f 1)"
path="$(printf "$pack" | cut -d ':' -f 2)"
dir="tmp/$(printf "$path" | cut -d '/' -f 2)"
subtree="$(printf "$pack" | cut -d ':' -f 4)"
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
printf "Possible error (plugin directory exists): $path\n"
echo "Possible error (plugin directory exists): $path" >&2
fi
done
}
copy_dir() {
for file in $(find "$1/$2" -name '*.vim' -o -name '*.vital'); do
file_path="$(dirname "${file##$1/}")"
mkdir -p "$file_path"
touch "$file_path/$(basename "$file")"
# Use comma instead of / to handle cases like c/c++
sed -e "s,%%PACK%%,$3," -e "/%%CONTENT%%/{r $file" -e "d;}" plugin_guard.vim.template >> $file_path/$(basename "$file")
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() {
OLD_README="$(cat README.md)"
ed README.md <<- EOF
/Language packs
+2kb
/##
'b,-2c
$(printf -- "$OUTPUT" | sort)
.
w
q
EOF
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="
apiblueprint:sheerun/apiblueprint.vim
applescript:vim-scripts/applescript.vim
asciidoc:asciidoc/vim-asciidoc
yaml:stephpy/vim-yaml
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
@@ -128,74 +174,99 @@ PACKS="
cjsx:mtscout6/vim-cjsx
clojure:guns/vim-clojure-static
cmake:pboettch/vim-cmake-syntax
coffee-script:kchmck/vim-coffee-script
coffee-script:kchmck/vim-coffee-script:_NOAFTER
cql:elubow/cql-vim
cryptol:victoredwardocallaghan/cryptol.vim
crystal:rhysd/vim-crystal
cql:elubow/cql-vim
csv:chrisbra/csv.vim
cucumber:tpope/vim-cucumber
cue:mgrabovsky/vim-cuesheet
dart:dart-lang/dart-vim-plugin
dockerfile:docker/docker::/contrib/syntax/vim/
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
fish:dag/vim-fish
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
glsl:tikhomirov/vim-glsl
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:PotatoesMaster/i3-vim-syntax
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
json:elzr/vim-json
jinja:lepture/vim-jinja
json5:GutenYe/json5.vim
json:elzr/vim-json
jst:briancollins/vim-jst
jsx:mxw/vim-jsx:_ALL
jsx:MaxMEllon/vim-jsx-pretty:_ALL
julia:JuliaEditorSupport/julia-vim
kotlin:udalov/kotlin-vim
latex:LaTeX-Box-Team/LaTeX-Box
less:groenewege/vim-less
liquid:tpope/vim-liquid
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:rsmenon/vim-mathematica
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:jrk/vim-ocaml
ocaml:rgrinberg/vim-ocaml
octave:vim-scripts/octave.vim--
opencl:petRUShka/vim-opencl
perl:vim-perl/vim-perl
pgsql:exu/pgsql.vim
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:voxpupuli/vim-puppet
puppet:rodjek/vim-puppet
purescript:purescript-contrib/purescript-vim
python:vim-python/python-syntax
python-compiler:aliev/vim-compiler-python
python-ident:Vimjas/vim-python-pep8-indent
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
r-lang:vim-scripts/R.vim:_BASIC
racket:wlangstroth/vim-racket
raml:IN3D/vim-raml
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
@@ -203,36 +274,46 @@ PACKS="
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:kurayama/systemd-vim-syntax
systemd:wgwoods/vim-systemd-syntax
terraform:hashivim/vim-terraform
textile:timcharper/textile.vim
thrift:solarnz/thrift.vim
tmux:keith/tmux.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:leafgarland/typescript-vim
typescript:HerringtonDarkholme/yats.vim
vala:arrufat/vala.vim
vbnet:vim-scripts/vbnet.vim
vcl:smerrill/vcl-vim-plugin
vifm:vifm/vifm.vim
vue:posva/vim-vue
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
rm -rf "${DIRS_RM[@]}"
mkdir tmp
printf "Downloading packs..."
download "$PACKS"
extract "$PACKS"
download "$(sed '/^#/d' <<<"$PACKS")"
extract "$(sed '/^#/d' <<<"$PACKS")"
update_readme
rm -rf tmp

View File

@@ -12,8 +12,10 @@ endif
runtime compiler/rustc.vim
let current_compiler = "cargo"
" vint: -ProhibitAbbreviationOption
let s:save_cpo = &cpo
set cpo&vim
" vint: +ProhibitAbbreviationOption
if exists(':CompilerSet') != 2
command -nargs=* CompilerSet setlocal <args>
@@ -25,6 +27,12 @@ else
CompilerSet makeprg=cargo\ $*
endif
augroup RustCargoQuickFixHooks
autocmd!
autocmd QuickFixCmdPre make call cargo#quickfix#CmdPre()
autocmd QuickFixCmdPost make call cargo#quickfix#CmdPost()
augroup END
" Ignore general cargo progress messages
CompilerSet errorformat+=
\%-G%\\s%#Downloading%.%#,
@@ -33,9 +41,13 @@ CompilerSet errorformat+=
\%-G%\\s%#error:\ Could\ not\ compile\ %.%#,
\%-G%\\s%#To\ learn\ more\\,%.%#,
\%-Gnote:\ Run\ with\ \`RUST_BACKTRACE=%.%#,
\%.%#panicked\ at\ \\'%m\\'\\,\ %f:%l
\%.%#panicked\ at\ \\'%m\\'\\,\ %f:%l:%c
" vint: -ProhibitAbbreviationOption
let &cpo = s:save_cpo
unlet s:save_cpo
" vint: +ProhibitAbbreviationOption
" vim: set et sw=4 sts=4 ts=8:
endif

15
compiler/credo.vim Normal file
View File

@@ -0,0 +1,15 @@
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'elixir') == -1
if exists('current_compiler')
finish
endif
let current_compiler = 'credo'
if exists(":CompilerSet") != 2
command -nargs=* CompilerSet setlocal <args>
endif
CompilerSet errorformat=%f:%l:%c:\ %t:\ %m,%f:%l:\ %t:\ %m
CompilerSet makeprg=mix\ credo\ suggest\ --format=flycheck
endif

View File

@@ -30,8 +30,8 @@ CompilerSet errorformat=
\%W%f:%l:\ warning:\ %m,
\%E%f:%l:in\ %*[^:]:\ %m,
\%E%f:%l:\ %m,
\%-C%\tfrom\ %f:%l:in\ %.%#,
\%-Z%\tfrom\ %f:%l,
\%-C%\t%\\d%#:%#\ %#from\ %f:%l:in\ %.%#,
\%-Z%\t%\\d%#:%#\ %#from\ %f:%l,
\%-Z%p^,
\%-G%.%#

View File

@@ -11,6 +11,10 @@ if exists("g:current_compiler")
endif
let g:current_compiler = "go"
" don't spam the user when Vim is started in Vi compatibility mode
let s:cpo_save = &cpo
set cpo&vim
if exists(":CompilerSet") != 2
command -nargs=* CompilerSet setlocal <args>
endif
@@ -32,14 +36,17 @@ endif
CompilerSet errorformat =%-G#\ %.%# " Ignore lines beginning with '#' ('# command-line-arguments' line sometimes appears?)
CompilerSet errorformat+=%-G%.%#panic:\ %m " Ignore lines containing 'panic: message'
CompilerSet errorformat+=%Ecan\'t\ load\ package:\ %m " Start of multiline error string is 'can\'t load package'
CompilerSet errorformat+=%A%f:%l:%c:\ %m " Start of multiline unspecified string is 'filename:linenumber:columnnumber:'
CompilerSet errorformat+=%A%f:%l:\ %m " Start of multiline unspecified string is 'filename:linenumber:'
CompilerSet errorformat+=%A%\\%%(%[%^:]%\\+:\ %\\)%\\?%f:%l:%c:\ %m " Start of multiline unspecified string is 'filename:linenumber:columnnumber:'
CompilerSet errorformat+=%A%\\%%(%[%^:]%\\+:\ %\\)%\\?%f:%l:\ %m " Start of multiline unspecified string is 'filename:linenumber:'
CompilerSet errorformat+=%C%*\\s%m " Continuation of multiline error message is indented
CompilerSet errorformat+=%-G%.%# " All lines not matching any of the above patterns are ignored
let &cpo = s:save_cpo
unlet s:save_cpo
" restore Vi compatibility settings
let &cpo = s:cpo_save
unlet s:cpo_save
" vim: sw=2 ts=2 et
endif

28
compiler/gradle.vim Normal file
View File

@@ -0,0 +1,28 @@
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'gradle') == -1
" Vim Compiler File
" Compiler: gradle
if exists("current_compiler")
finish
endif
let current_compiler = "gradle"
if exists(":CompilerSet") != 2 " older Vim always used :setlocal
command -nargs=* CompilerSet setlocal <args>
endif
CompilerSet makeprg=gradle
CompilerSet errorformat=
\%E[ant:scalac]\ %f:%l:\ error:\ %m,
\%W[ant:scalac]\ %f:%l:\ warning:\ %m,
\%E%.%#:compile%\\w%#Java%f:%l:\ error:\ %m,%-Z%p^,%-C%.%#,
\%W%.%#:compile%\\w%#Java%f:%l:\ warning:\ %m,%-Z%p^,%-C%.%#,
\%E%f:%l:\ error:\ %m,%-Z%p^,%-C%.%#,
\%W%f:%l:\ warning:\ %m,%-Z%p^,%-C%.%#,
\%E%f:\ %\\d%\\+:\ %m\ @\ line\ %l\\,\ column\ %c.,%-C%.%#,%Z%p^,
\%E%>%f:\ %\\d%\\+:\ %m,%C\ @\ line\ %l\\,\ column\ %c.,%-C%.%#,%Z%p^,
\%-G%.%#
endif

28
compiler/gradlew.vim Normal file
View File

@@ -0,0 +1,28 @@
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'gradle') == -1
" Vim Compiler File
" Compiler: gradlew
if exists("current_compiler")
finish
endif
let current_compiler = "gradlew"
if exists(":CompilerSet") != 2 " older Vim always used :setlocal
command -nargs=* CompilerSet setlocal <args>
endif
CompilerSet makeprg=./gradlew
CompilerSet errorformat=
\%E[ant:scalac]\ %f:%l:\ error:\ %m,
\%W[ant:scalac]\ %f:%l:\ warning:\ %m,
\%E%.%#:compile%\\w%#Java%f:%l:\ error:\ %m,%-Z%p^,%-C%.%#,
\%W%.%#:compile%\\w%#Java%f:%l:\ warning:\ %m,%-Z%p^,%-C%.%#,
\%E%f:%l:\ error:\ %m,%-Z%p^,%-C%.%#,
\%W%f:%l:\ warning:\ %m,%-Z%p^,%-C%.%#,
\%E%f:\ %\\d%\\+:\ %m\ @\ line\ %l\\,\ column\ %c.,%-C%.%#,%Z%p^,
\%E%>%f:\ %\\d%\\+:\ %m,%C\ @\ line\ %l\\,\ column\ %c.,%-C%.%#,%Z%p^,
\%-G%.%#
endif

23
compiler/lilypond.vim Normal file
View File

@@ -0,0 +1,23 @@
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'lilypond') == -1
" LilyPond compiler file
" Language: LilyPond
" Maintainer: Heikki Junes <hjunes@cc.hut.fi>
" Last Change: 2004 Mar 01
"
" Installed As: vim/compiler/lilypond.vim
"
" Only load this indent file when no other was loaded.
if exists("current_compiler")
finish
endif
let current_compiler = "lilypond"
" default make
setlocal makeprg=lilypond\ $*
" errorformat for lily (with columns) and gcc
" (how to see multiple-line error messages?)
setlocal errorformat=%f:%l:%c:\ %m,%f:%l:\ %m,In\ file\ included\ from\ %f:%l:,\^I\^Ifrom\ %f:%l%m
"
endif

20
compiler/mix.vim Normal file
View File

@@ -0,0 +1,20 @@
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'elixir') == -1
if exists('current_compiler')
finish
endif
let current_compiler = 'mix'
if exists(":CompilerSet") != 2
command -nargs=* CompilerSet setlocal <args>
endif
CompilerSet makeprg=mix\ compile
CompilerSet errorformat=
\%Wwarning:\ %m,
\%C%f:%l,%Z,
\%E==\ Compilation\ error\ in\ file\ %f\ ==,
\%C**\ (%\\w%\\+)\ %f:%l:\ %m,%Z
endif

View File

@@ -13,7 +13,7 @@ endif
let s:cpo_save = &cpo
set cpo-=C
CompilerSet makeprg=nim\ c\ --verbosity:0\ $*\ %:p
CompilerSet makeprg=nim\ c\ --verbosity:0\ --listfullpaths\ $*\ %:p
CompilerSet errorformat=
\%-GHint:\ %m,
@@ -23,5 +23,7 @@ CompilerSet errorformat=
let &cpo = s:cpo_save
unlet s:cpo_save
let g:syntastic_nim_checkers = ['nim']
endif

15
compiler/nix-build.vim Normal file
View File

@@ -0,0 +1,15 @@
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'nix') == -1
if exists('current_compiler')
finish
endif
let current_compiler = 'nix-build'
if exists(":CompilerSet") != 2
command -nargs=* CompilerSet setlocal <args>
endif
CompilerSet errorformat=error:\ %m\ at\ %f:%l:%c,builder\ for\ \'%m\'\ failed\ with\ exit\ code\ %n,fixed-output\ derivation\ produced\ path\ \'%s\'\ with\ %m
CompilerSet makeprg=nix-build
endif

59
compiler/ocaml.vim Normal file
View File

@@ -0,0 +1,59 @@
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'ocaml') == -1
" Vim Compiler File
" Compiler: ocaml
" Maintainer: Markus Mottl <markus.mottl@gmail.com>
" URL: http://www.ocaml.info/vim/compiler/ocaml.vim
" Last Change:
" 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,
" ocamake and whatnot. So which one to use?
"
" This error format was moved from ftplugin/ocaml.vim to this file,
" because ftplugin is the wrong file to set an error format
" and the error format itself is annoying because it joins many lines in this
" error case:
"
" Error: The implementation foo.ml does not match the interface foo.cmi:
" Modules do not match case.
"
" So having it here makes people opt-in
if exists("current_compiler")
finish
endif
let current_compiler = "ocaml"
let s:cpo_save = &cpo
set cpo&vim
CompilerSet errorformat =
\%EFile\ \"%f\"\\,\ line\ %l\\,\ characters\ %c-%*\\d:,
\%EFile\ \"%f\"\\,\ line\ %l\\,\ characters\ %c-%*\\d\ %.%#,
\%EFile\ \"%f\"\\,\ line\ %l\\,\ character\ %c:%m,
\%+EReference\ to\ unbound\ regexp\ name\ %m,
\%Eocamlyacc:\ e\ -\ line\ %l\ of\ \"%f\"\\,\ %m,
\%Wocamlyacc:\ w\ -\ %m,
\%-Zmake%.%#,
\%C%m,
\%D%*\\a[%*\\d]:\ Entering\ directory\ `%f',
\%X%*\\a[%*\\d]:\ Leaving\ directory\ `%f',
\%D%*\\a:\ Entering\ directory\ `%f',
\%X%*\\a:\ Leaving\ directory\ `%f',
\%D%*\\a[%*\\d]:\ Entering\ directory\ '%f',
\%X%*\\a[%*\\d]:\ Leaving\ directory\ '%f',
\%D%*\\a:\ Entering\ directory\ '%f',
\%X%*\\a:\ Leaving\ directory\ '%f',
\%DEntering\ directory\ '%f',
\%XLeaving\ directory\ '%f',
\%DMaking\ %*\\a\ in\ %f
let &cpo = s:cpo_save
unlet s:cpo_save
endif

View File

@@ -22,12 +22,12 @@ CompilerSet makeprg=rake
CompilerSet errorformat=
\%D(in\ %f),
\%\\s%#from\ %f:%l:%m,
\%\\s%#from\ %f:%l:,
\%\\s%##\ %f:%l:%m%\\&%.%#%\\D:%\\d%#:%.%#,
\%\\s%##\ %f:%l%\\&%.%#%\\D:%\\d%#,
\%\\s%#[%f:%l:\ %#%m%\\&%.%#%\\D:%\\d%#:%.%#,
\%\\s%#%f:%l:\ %#%m%\\&%.%#%\\D:%\\d%#:%.%#,
\%\\s%#%\\d%#:%#\ %#from\ %f:%l:%m,
\%\\s%#%\\d%#:%#\ %#from\ %f:%l:,
\%\\s%##\ %f:%l:%m%\\&%.%#%\\D:%\\d%\\+:%.%#,
\%\\s%##\ %f:%l%\\&%.%#%\\D:%\\d%\\+,
\%\\s%#[%f:%l:\ %#%m%\\&%.%#%\\D:%\\d%\\+:%.%#,
\%\\s%#%f:%l:\ %#%m%\\&%.%#%\\D:%\\d%\\+:%.%#,
\%\\s%#%f:%l:,
\%m\ [%f:%l]:,
\%+Erake\ aborted!,

View File

@@ -25,7 +25,8 @@ CompilerSet errorformat=
\%E%.%#:in\ `load':\ %f:%l:%m,
\%E%f:%l:in\ `%*[^']':\ %m,
\%-Z\ \ \ \ \ %\\+\#\ %f:%l:%.%#,
\%E\ \ %\\d%\\+)%.%#,
\%E\ \ \ \ \ Failure/Error:\ %m,
\%E\ \ \ \ \ Failure/Error:,
\%C\ \ \ \ \ %m,
\%C%\\s%#,
\%-G%.%#

View File

@@ -6,7 +6,6 @@ if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'ruby') == -1
" Maintainer: Tim Pope <vimNOSPAM@tpope.org>
" URL: https://github.com/vim-ruby/vim-ruby
" Release Coordinator: Doug Kearns <dougkearns@gmail.com>
" ----------------------------------------------------------------------------
if exists("current_compiler")
finish
@@ -23,21 +22,21 @@ set cpo-=C
" default settings runs script normally
" add '-c' switch to run syntax check only:
"
" CompilerSet makeprg=ruby\ -wc\ $*
" CompilerSet makeprg=ruby\ -c
"
" or add '-c' at :make command line:
"
" :make -c %<CR>
"
CompilerSet makeprg=ruby\ -w\ $*
CompilerSet makeprg=ruby
CompilerSet errorformat=
\%+E%f:%l:\ parse\ error,
\%W%f:%l:\ warning:\ %m,
\%E%f:%l:in\ %*[^:]:\ %m,
\%E%f:%l:\ %m,
\%-C%\tfrom\ %f:%l:in\ %.%#,
\%-Z%\tfrom\ %f:%l,
\%-C%\t%\\d%#:%#\ %#from\ %f:%l:in\ %.%#,
\%-Z%\t%\\d%#:%#\ %#from\ %f:%l,
\%-Z%p^,
\%-G%.%#

View File

@@ -11,30 +11,27 @@ if exists("current_compiler")
endif
let current_compiler = "rustc"
let s:cpo_save = &cpo
" vint: -ProhibitAbbreviationOption
let s:save_cpo = &cpo
set cpo&vim
" vint: +ProhibitAbbreviationOption
if exists(":CompilerSet") != 2
command -nargs=* CompilerSet setlocal <args>
endif
if exists("g:rustc_makeprg_no_percent") && g:rustc_makeprg_no_percent != 0
if get(g:, 'rustc_makeprg_no_percent', 0)
CompilerSet makeprg=rustc
else
if has('patch-7.4.191')
CompilerSet makeprg=rustc\ \%:S
else
CompilerSet makeprg=rustc\ \%
endif
endif
" Old errorformat (before nightly 2016/08/10)
CompilerSet errorformat=
\%f:%l:%c:\ %t%*[^:]:\ %m,
\%f:%l:%c:\ %*\\d:%*\\d\ %t%*[^:]:\ %m,
\%-G%f:%l\ %s,
\%-G%*[\ ]^,
\%-G%*[\ ]^%*[~],
\%-G%*[\ ]...
" New errorformat (after nightly 2016/08/10)
CompilerSet errorformat+=
CompilerSet errorformat=
\%-G,
\%-Gerror:\ aborting\ %.%#,
\%-Gerror:\ Could\ not\ compile\ %.%#,
@@ -42,9 +39,23 @@ CompilerSet errorformat+=
\%Eerror[E%n]:\ %m,
\%Wwarning:\ %m,
\%Inote:\ %m,
\%C\ %#-->\ %f:%l:%c
\%C\ %#-->\ %f:%l:%c,
\%E\ \ left:%m,%C\ right:%m\ %f:%l:%c,%Z
let &cpo = s:cpo_save
unlet s:cpo_save
" Old errorformat (before nightly 2016/08/10)
CompilerSet errorformat+=
\%f:%l:%c:\ %t%*[^:]:\ %m,
\%f:%l:%c:\ %*\\d:%*\\d\ %t%*[^:]:\ %m,
\%-G%f:%l\ %s,
\%-G%*[\ ]^,
\%-G%*[\ ]^%*[~],
\%-G%*[\ ]...
" vint: -ProhibitAbbreviationOption
let &cpo = s:save_cpo
unlet s:save_cpo
" vint: +ProhibitAbbreviationOption
" vim: set et sw=4 sts=4 ts=8:
endif

View File

@@ -22,8 +22,8 @@ set cpo-=C
CompilerSet makeprg=sbt\ -Dsbt.log.noformat=true\ compile
CompilerSet errorformat=
\%E\ %#[error]\ %f:%l:\ %m,%C\ %#[error]\ %p^,%-C%.%#,%Z,
\%W\ %#[warn]\ %f:%l:\ %m,%C\ %#[warn]\ %p^,%-C%.%#,%Z,
\%E\ %#[error]\ %f:%l:%c:\ %m,%C\ %#[error]\ %p^,%-C%.%#,%Z,
\%W\ %#[warn]\ %f:%l:%c:\ %m,%C\ %#[warn]\ %p^,%-C%.%#,%Z,
\%-G%.%#
let &cpo = s:cpo_save

View File

@@ -1,34 +1,25 @@
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'typescript') == -1
if exists("current_compiler")
if exists('current_compiler')
finish
endif
let current_compiler = "typescript"
if !exists("g:typescript_compiler_binary")
let g:typescript_compiler_binary = "tsc"
let current_compiler='typescript'
if !exists('g:typescript_compiler_binary')
let g:typescript_compiler_binary = 'tsc'
endif
if !exists("g:typescript_compiler_options")
let g:typescript_compiler_options = ""
if !exists('g:typescript_compiler_options')
if exists('g:syntastic_typescript_tsc_args')
let g:typescript_compiler_options = g:syntastic_typescript_tsc_args
else
let g:typescript_compiler_options = ''
endif
endif
if exists(":CompilerSet") != 2
command! -nargs=* CompilerSet setlocal <args>
endif
let s:cpo_save = &cpo
set cpo-=C
execute 'CompilerSet makeprg='
\ . escape(g:typescript_compiler_binary, ' ')
\ . '\ '
\ . escape(g:typescript_compiler_options, ' ')
\ . '\ $*\ %'
let &l:makeprg = g:typescript_compiler_binary . ' ' . g:typescript_compiler_options . ' $* %'
CompilerSet errorformat=%+A\ %#%f\ %#(%l\\\,%c):\ %m,%C%m
let &cpo = s:cpo_save
unlet s:cpo_save
endif

View File

@@ -3,6 +3,14 @@ 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
@@ -36,8 +44,9 @@ augroup filetypedetect
" elixir
au BufRead,BufNewFile *.ex,*.exs call s:setf('elixir')
au BufRead,BufNewFile *.eex call s:setf('eelixir')
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
@@ -59,7 +68,7 @@ augroup filetypedetect
autocmd BufNewFile,BufRead .gitsendemail.* set ft=gitsendemail
" plantuml
autocmd BufRead,BufNewFile *.pu,*.uml,*.plantuml setfiletype plantuml | set filetype=plantuml
autocmd BufRead,BufNewFile *.pu,*.uml,*.plantuml,*.puml setfiletype plantuml | set filetype=plantuml
" scala
au BufRead,BufNewFile *.scala,*.sc set filetype=scala
@@ -67,5 +76,7 @@ augroup filetypedetect
" swift
autocmd BufNewFile,BufRead *.swift set filetype=swift
augroup END
"jinja
autocmd BufNewFile,BufRead *.jinja2,*.j2,*.jinja,*.nunjucks,*.nunjs,*.njk set ft=jinja
augroup END

View File

@@ -5,35 +5,39 @@ syntax region jsFlowArgumentDef contained start=/:/
syntax region jsFlowArray contained matchgroup=jsFlowNoise start=/\[/ end=/\]/ contains=@jsFlowCluster,jsComment fold
syntax region jsFlowObject contained matchgroup=jsFlowNoise start=/{/ end=/}/ contains=@jsFlowCluster,jsComment fold
syntax region jsFlowExactObject contained matchgroup=jsFlowNoise start=/{|/ end=/|}/ contains=@jsFlowCluster,jsComment fold
syntax region jsFlowParens contained matchgroup=jsFlowNoise start=/(/ end=/)/ contains=@jsFlowCluster keepend fold
syntax region jsFlowParens contained matchgroup=jsFlowNoise start=/(/ end=/)/ contains=@jsFlowCluster nextgroup=jsFlowArrow skipwhite keepend extend fold
syntax match jsFlowNoise contained /[:;,<>]/
syntax keyword jsFlowType contained boolean number string null void any mixed JSON array Function object array bool class
syntax keyword jsFlowTypeof contained typeof skipempty skipempty nextgroup=jsFlowTypeCustom,jsFlowType
syntax match jsFlowTypeCustom contained /[0-9a-zA-Z_.]*/ skipwhite skipempty nextgroup=jsFlowGroup
syntax region jsFlowGroup contained matchgroup=jsFlowNoise start=/</ end=/>/ contains=@jsFlowCluster
syntax region jsFlowArrowArguments contained matchgroup=jsFlowNoise start=/(/ end=/)\%(\s*=>\)\@=/ oneline skipwhite skipempty nextgroup=jsFlowArrow contains=@jsFlowCluster
syntax keyword jsFlowTypeof contained typeof skipempty skipwhite nextgroup=jsFlowTypeCustom,jsFlowType
syntax match jsFlowTypeCustom contained /[0-9a-zA-Z_.]*/ skipwhite skipempty nextgroup=jsFlowGeneric
syntax region jsFlowGeneric matchgroup=jsFlowNoise start=/\k\@<=</ end=/>/ contains=@jsFlowCluster containedin=@jsExpression,jsFlowDeclareBlock
syntax region jsFlowGeneric contained matchgroup=jsFlowNoise start=/</ end=/>(\@=/ oneline contains=@jsFlowCluster containedin=@jsExpression,jsFlowDeclareBlock
syntax region jsFlowObjectGeneric contained matchgroup=jsFlowNoise start=/\k\@<=</ end=/>/ contains=@jsFlowCluster nextgroup=jsFuncArgs
syntax match jsFlowArrow contained /=>/ skipwhite skipempty nextgroup=jsFlowType,jsFlowTypeCustom,jsFlowParens
syntax match jsFlowObjectKey contained /[0-9a-zA-Z_$?]*\(\s*:\)\@=/ contains=jsFunctionKey,jsFlowMaybe skipwhite skipempty nextgroup=jsObjectValue containedin=jsObject
syntax match jsFlowOrOperator contained /|/ skipwhite skipempty nextgroup=@jsFlowCluster
syntax keyword jsFlowImportType contained type skipwhite skipempty nextgroup=jsModuleAsterisk,jsModuleKeyword,jsModuleGroup
syntax keyword jsFlowImportType contained type typeof skipwhite skipempty nextgroup=jsModuleAsterisk,jsModuleKeyword,jsModuleGroup
syntax match jsFlowWildcard contained /*/
syntax match jsFlowReturn contained /:\s*/ contains=jsFlowNoise skipwhite skipempty nextgroup=@jsFlowReturnCluster,jsFlowArrow,jsFlowReturnParens
syntax region jsFlowReturnObject contained matchgroup=jsFlowNoise start=/{/ end=/}/ contains=@jsFlowCluster skipwhite skipempty nextgroup=jsFuncBlock,jsFlowReturnOrOp fold
syntax region jsFlowReturnObject contained matchgroup=jsFlowNoise start=/{/ end=/}/ contains=@jsFlowCluster skipwhite skipempty nextgroup=jsFuncBlock,jsFlowReturnOrOp extend fold
syntax region jsFlowReturnArray contained matchgroup=jsFlowNoise start=/\[/ end=/\]/ contains=@jsFlowCluster skipwhite skipempty nextgroup=jsFuncBlock,jsFlowReturnOrOp fold
syntax region jsFlowReturnParens contained matchgroup=jsFlowNoise start=/(/ end=/)/ contains=@jsFlowCluster skipwhite skipempty nextgroup=jsFuncBlock,jsFlowReturnOrOp,jsFlowReturnArrow fold
syntax match jsFlowReturnArrow contained /=>/ skipwhite skipempty nextgroup=@jsFlowReturnCluster
syntax match jsFlowReturnKeyword contained /\k\+/ contains=jsFlowType,jsFlowTypeCustom skipwhite skipempty nextgroup=jsFlowReturnGroup,jsFuncBlock,jsFlowReturnOrOp
syntax match jsFlowReturnMaybe contained /?/ skipwhite skipempty nextgroup=jsFlowReturnKeyword,jsFlowReturnObject
syntax match jsFlowReturnKeyword contained /\k\+/ contains=jsFlowType,jsFlowTypeCustom skipwhite skipempty nextgroup=jsFlowReturnGroup,jsFuncBlock,jsFlowReturnOrOp,jsFlowReturnArray
syntax match jsFlowReturnMaybe contained /?/ skipwhite skipempty nextgroup=jsFlowReturnKeyword,jsFlowReturnObject,jsFlowReturnParens
syntax region jsFlowReturnGroup contained matchgroup=jsFlowNoise start=/</ end=/>/ contains=@jsFlowCluster skipwhite skipempty nextgroup=jsFuncBlock,jsFlowReturnOrOp
syntax match jsFlowReturnOrOp contained /\s*|\s*/ skipwhite skipempty nextgroup=@jsFlowReturnCluster
syntax match jsFlowWildcardReturn contained /*/ skipwhite skipempty nextgroup=jsFuncBlock
syntax keyword jsFlowTypeofReturn contained typeof skipempty skipwhite nextgroup=@jsFlowReturnCluster
syntax region jsFlowFunctionGroup contained matchgroup=jsFlowNoise start=/</ end=/>/ contains=@jsFlowCluster skipwhite skipempty nextgroup=jsFuncArgs
syntax region jsFlowClassGroup contained matchgroup=jsFlowNoise start=/</ end=/>/ contains=@jsFlowCluster skipwhite skipempty nextgroup=jsClassBlock
syntax region jsFlowClassFunctionGroup contained matchgroup=jsFlowNoise start=/</ end=/>/ contains=@jsFlowCluster skipwhite skipempty nextgroup=jsFuncArgs
syntax match jsFlowObjectFuncName contained /\<\K\k*<\@=/ skipwhite skipempty nextgroup=jsFlowObjectGeneric containedin=jsObject
syntax region jsFlowTypeStatement start=/type\%(\s\+\k\)\@=/ end=/=\@=/ contains=jsFlowTypeOperator oneline skipwhite skipempty nextgroup=jsFlowTypeValue keepend
syntax region jsFlowTypeValue contained matchgroup=jsFlowNoise start=/=/ end=/[\n;]/ contains=@jsFlowCluster,jsFlowGroup,jsFlowMaybe
syntax region jsFlowTypeStatement start=/\(opaque\s\+\)\?type\%(\s\+\k\)\@=/ end=/=\@=/ contains=jsFlowTypeOperator oneline skipwhite skipempty nextgroup=jsFlowTypeValue keepend
syntax region jsFlowTypeValue contained matchgroup=jsFlowNoise start=/=/ end=/\%(;\|\n\%(\s*|\)\@!\)/ contains=@jsFlowCluster,jsFlowGeneric,jsFlowMaybe
syntax match jsFlowTypeOperator contained /=/ containedin=jsFlowTypeValue
syntax match jsFlowTypeOperator contained /=/
syntax keyword jsFlowTypeKeyword contained type
@@ -42,20 +46,17 @@ syntax keyword jsFlowDeclare declare skipwhite skipempty nextgr
syntax match jsFlowClassProperty contained /\<[0-9a-zA-Z_$]*\>:\@=/ skipwhite skipempty nextgroup=jsFlowClassDef containedin=jsClassBlock
syntax region jsFlowClassDef contained start=/:/ end=/\%(\s*[,=;)\n]\)\@=/ contains=@jsFlowCluster skipwhite skipempty nextgroup=jsClassValue
syntax region jsFlowModule contained start=/module/ end=/{\@=/ skipempty skipempty nextgroup=jsFlowDeclareBlock contains=jsString
syntax region jsFlowInterface contained start=/interface/ end=/{\@=/ skipempty skipempty nextgroup=jsFlowInterfaceBlock contains=@jsFlowCluster
syntax region jsFlowModule contained start=/module/ end=/\%({\|:\)\@=/ skipempty skipwhite nextgroup=jsFlowDeclareBlock contains=jsString
syntax region jsFlowInterface contained start=/interface/ end=/{\@=/ skipempty skipwhite nextgroup=jsFlowInterfaceBlock contains=@jsFlowCluster
syntax region jsFlowDeclareBlock contained matchgroup=jsFlowNoise start=/{/ end=/}/ contains=jsFlowDeclare,jsFlowNoise fold
" NOTE: It appears the nextgroup was causing a ton of breakages... testing it
" witout a nextgroup, but keeping this arround for reference incase something breaks
" syntax match jsFlowMaybe contained /?/ nextgroup=jsFlowType,jsFlowTypeCustom,jsFlowParens,jsFlowArrowArguments,jsFlowObject,jsFlowReturnObject extend keepend
syntax match jsFlowMaybe contained /?/
syntax region jsFlowInterfaceBlock contained matchgroup=jsFlowNoise start=/{/ end=/}/ contains=jsObjectKey,jsObjectKeyString,jsObjectKeyComputed,jsObjectSeparator,jsObjectFuncName,jsObjectMethodType,jsGenerator,jsComment,jsObjectStringKey,jsSpreadExpression,jsFlowNoise keepend fold
syntax region jsFlowInterfaceBlock contained matchgroup=jsFlowNoise start=/{/ end=/}/ contains=jsObjectKey,jsObjectKeyString,jsObjectKeyComputed,jsObjectSeparator,jsObjectFuncName,jsFlowObjectFuncName,jsObjectMethodType,jsGenerator,jsComment,jsObjectStringKey,jsSpreadExpression,jsFlowNoise,jsFlowParens,jsFlowGeneric keepend fold
syntax region jsFlowParenAnnotation contained start=/:/ end=/[,=)]\@=/ containedin=jsParen contains=@jsFlowCluster
syntax cluster jsFlowReturnCluster contains=jsFlowNoise,jsFlowReturnObject,jsFlowReturnArray,jsFlowReturnKeyword,jsFlowReturnGroup,jsFlowReturnMaybe,jsFlowReturnOrOp,jsFlowWildcardReturn,jsFlowReturnArrow
syntax cluster jsFlowCluster contains=jsFlowArray,jsFlowObject,jsFlowExactObject,jsFlowNoise,jsFlowTypeof,jsFlowType,jsFlowGroup,jsFlowArrowArguments,jsFlowMaybe,jsFlowParens,jsFlowOrOperator,jsFlowWildcard
syntax cluster jsFlowReturnCluster contains=jsFlowNoise,jsFlowReturnObject,jsFlowReturnArray,jsFlowReturnKeyword,jsFlowReturnGroup,jsFlowReturnMaybe,jsFlowReturnOrOp,jsFlowWildcardReturn,jsFlowReturnArrow,jsFlowTypeofReturn
syntax cluster jsFlowCluster contains=jsFlowArray,jsFlowObject,jsFlowExactObject,jsFlowNoise,jsFlowTypeof,jsFlowType,jsFlowGeneric,jsFlowMaybe,jsFlowParens,jsFlowOrOperator,jsFlowWildcard
if version >= 508 || !exists("did_javascript_syn_inits")
if version < 508
@@ -70,20 +71,22 @@ if version >= 508 || !exists("did_javascript_syn_inits")
HiLink jsFlowType Type
HiLink jsFlowTypeCustom PreProc
HiLink jsFlowTypeof PreProc
HiLink jsFlowTypeofReturn PreProc
HiLink jsFlowArray PreProc
HiLink jsFlowObject PreProc
HiLink jsFlowExactObject PreProc
HiLink jsFlowParens PreProc
HiLink jsFlowGroup PreProc
HiLink jsFlowGeneric PreProc
HiLink jsFlowObjectGeneric jsFlowGeneric
HiLink jsFlowReturn PreProc
HiLink jsFlowParenAnnotation PreProc
HiLink jsFlowReturnObject jsFlowReturn
HiLink jsFlowReturnArray jsFlowArray
HiLink jsFlowReturnParens jsFlowParens
HiLink jsFlowReturnGroup jsFlowGroup
HiLink jsFlowReturnGroup jsFlowGeneric
HiLink jsFlowFunctionGroup PreProc
HiLink jsFlowClassGroup PreProc
HiLink jsFlowArrowArguments PreProc
HiLink jsFlowClassFunctionGroup PreProc
HiLink jsFlowArrow PreProc
HiLink jsFlowReturnArrow PreProc
HiLink jsFlowTypeStatement PreProc
@@ -103,6 +106,7 @@ if version >= 508 || !exists("did_javascript_syn_inits")
HiLink jsFlowWildcardReturn PreProc
HiLink jsFlowImportType PreProc
HiLink jsFlowTypeValue PreProc
HiLink jsFlowObjectFuncName jsObjectFuncName
delcommand HiLink
endif

View File

@@ -8,11 +8,11 @@ syntax match jsDocTags contained "@\(alias\|api\|augments\|borrows\|cla
" tags containing type and param
syntax match jsDocTags contained "@\(arg\|argument\|cfg\|param\|property\|prop\|typedef\)\>" skipwhite nextgroup=jsDocType
" tags containing type but no param
syntax match jsDocTags contained "@\(callback\|define\|enum\|external\|implements\|this\|type\|return\|returns\)\>" skipwhite nextgroup=jsDocTypeNoParam
syntax match jsDocTags contained "@\(callback\|define\|enum\|external\|implements\|this\|type\|return\|returns\|yields\)\>" skipwhite nextgroup=jsDocTypeNoParam
" tags containing references
syntax match jsDocTags contained "@\(lends\|see\|tutorial\)\>" skipwhite nextgroup=jsDocSeeTag
" other tags (no extra syntax)
syntax match jsDocTags contained "@\(abstract\|access\|accessor\|async\|author\|classdesc\|constant\|const\|constructor\|copyright\|deprecated\|desc\|description\|dict\|event\|example\|file\|file[oO]verview\|final\|function\|global\|ignore\|inheritDoc\|inner\|instance\|interface\|license\|localdoc\|method\|mixin\|nosideeffects\|override\|overview\|preserve\|private\|protected\|public\|readonly\|since\|static\|struct\|todo\|summary\|undocumented\|virtual\)\>"
syntax match jsDocTags contained "@\(abstract\|access\|accessor\|async\|author\|classdesc\|constant\|const\|constructor\|copyright\|deprecated\|desc\|description\|dict\|event\|example\|file\|file[oO]verview\|final\|function\|global\|ignore\|inherit[dD]oc\|inner\|instance\|interface\|license\|localdoc\|method\|mixin\|nosideeffects\|override\|overview\|preserve\|private\|protected\|public\|readonly\|since\|static\|struct\|todo\|summary\|undocumented\|virtual\)\>"
syntax region jsDocType contained matchgroup=jsDocTypeBrackets start="{" end="}" contains=jsDocTypeRecord oneline skipwhite nextgroup=jsDocParam
syntax match jsDocType contained "\%(#\|\"\|\w\|\.\|:\|\/\)\+" skipwhite nextgroup=jsDocParam

File diff suppressed because it is too large Load Diff

37
ftplugin/Dockerfile.vim Normal file
View File

@@ -0,0 +1,37 @@
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'dockerfile') == -1
" Define comment string
setlocal commentstring=#\ %s
" Enable automatic comment insertion
setlocal formatoptions+=cro
function! DockerfileReplaceInstruction(original, replacement)
let syn = synIDtrans(synID(line("."), col(".") - 1, 0))
if syn != hlID("Comment") && syn != hlID("Constant") && strlen(getline(".")) == 0
let word = a:replacement
else
let word = a:original
endif
let g:UnduBuffer = a:original
return word
endfunction
inoreabbr <silent> <buffer> from <C-R>=DockerfileReplaceInstruction("from", "FROM")<CR>
inoreabbr <silent> <buffer> maintainer <C-R>=DockerfileReplaceInstruction("maintainer", "MAINTAINER")<CR>
inoreabbr <silent> <buffer> run <C-R>=DockerfileReplaceInstruction("run", "RUN")<CR>
inoreabbr <silent> <buffer> cmd <C-R>=DockerfileReplaceInstruction("cmd", "CMD")<CR>
inoreabbr <silent> <buffer> label <C-R>=DockerfileReplaceInstruction("label", "LABEL")<CR>
inoreabbr <silent> <buffer> expose <C-R>=DockerfileReplaceInstruction("expose", "EXPOSE")<CR>
inoreabbr <silent> <buffer> env <C-R>=DockerfileReplaceInstruction("env", "ENV")<CR>
inoreabbr <silent> <buffer> add <C-R>=DockerfileReplaceInstruction("add", "ADD")<CR>
inoreabbr <silent> <buffer> copy <C-R>=DockerfileReplaceInstruction("copy", "COPY")<CR>
inoreabbr <silent> <buffer> entrypoint <C-R>=DockerfileReplaceInstruction("entrypoint", "ENTRYPOINT")<CR>
inoreabbr <silent> <buffer> volume <C-R>=DockerfileReplaceInstruction("volume", "VOLUME")<CR>
inoreabbr <silent> <buffer> user <C-R>=DockerfileReplaceInstruction("user", "USER")<CR>
inoreabbr <silent> <buffer> workdir <C-R>=DockerfileReplaceInstruction("workdir", "WORKDIR")<CR>
inoreabbr <silent> <buffer> arg <C-R>=DockerfileReplaceInstruction("arg", "ARG")<CR>
inoreabbr <silent> <buffer> onbuild <C-R>=DockerfileReplaceInstruction("onbuild", "ONBUILD")<CR>
inoreabbr <silent> <buffer> stopsignal <C-R>=DockerfileReplaceInstruction("stopsignal", "STOPSIGNAL")<CR>
endif

View File

@@ -4,6 +4,7 @@ if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'ansible') == -1
if exists('+regexpengine') && ('&regexpengine' == 0)
setlocal regexpengine=1
endif
set isfname+=@-@
set path+=./../templates,./../files,templates,files
endif

View File

@@ -1,9 +0,0 @@
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'haskell') == -1
if exists("g:loaded_haskellvim_cabal")
finish
endif
let g:loaded_haskellvim_cabal = 1
endif

View File

@@ -51,6 +51,7 @@ command! -buffer -nargs=? CrystalSpecSwitch call crystal_lang#switch_spec_file(<
command! -buffer -nargs=? CrystalSpecRunAll call crystal_lang#run_all_spec(<f-args>)
command! -buffer -nargs=? CrystalSpecRunCurrent call crystal_lang#run_current_spec(<f-args>)
command! -buffer -nargs=* -bar CrystalFormat call crystal_lang#format(<q-args>, 0)
command! -buffer -nargs=* CrystalExpand echo crystal_lang#expand(expand('%'), getpos('.'), <q-args>).output
nnoremap <buffer><Plug>(crystal-jump-to-definition) :<C-u>CrystalDef<CR>
nnoremap <buffer><Plug>(crystal-show-context) :<C-u>CrystalContext<CR>

38
ftplugin/csv.vim Normal file
View File

@@ -0,0 +1,38 @@
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'csv') == -1
" Filetype plugin for editing CSV files. "{{{1
" Author: Christian Brabandt <cb@256bit.org>
" Version: 0.31
" Script: http://www.vim.org/scripts/script.php?script_id=2830
" License: VIM License
" Last Change: Thu, 15 Jan 2015 21:05:10 +0100
" Documentation: see :help ft-csv.txt
" GetLatestVimScripts: 2830 30 :AutoInstall: csv.vim
"
" Some ideas are taken from the wiki http://vim.wikia.com/wiki/VimTip667
" though, implementation differs.
" Plugin folklore "{{{1
if v:version < 700 || exists('b:did_ftplugin')
finish
endif
let b:did_ftplugin = 1
let s:cpo_save = &cpo
set cpo&vim
" Initialize Plugin "{{{2
" useful for configuring how many lines to analyze,
" set if you notice a slowdown
let b:csv_start = get(g:, 'csv_start', 1)
let b:csv_end = get(g:, 'csv_end', line('$'))
let b:csv_result = ''
call csv#Init(b:csv_start, b:csv_end)
let &cpo = s:cpo_save
unlet s:cpo_save
" Vim Modeline " {{{2
" vim: set foldmethod=marker et sw=0 sts=-1 ts=4:
endif

Some files were not shown because too many files have changed in this diff Show More