Skip to content

Commit

Permalink
Initial version
Browse files Browse the repository at this point in the history
  • Loading branch information
bluk committed Nov 7, 2018
1 parent fcd5040 commit d70dc27
Show file tree
Hide file tree
Showing 22 changed files with 1,653 additions and 25 deletions.
10 changes: 10 additions & 0 deletions .vintrc.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
cmdargs:
# Checking more strictly
severity: style_problem

policies:
# Disable a violation
ProhibitUnnecessaryDoubleQuote:
enabled: false
ProhibitImplicitScopeVariable:
enabled: false
40 changes: 40 additions & 0 deletions NOTICE
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
This software includes some portions from Swift.org.

Copyright (c) 2014 - 2017 Apple Inc. and the Swift project authors
Licensed under Apache License v2.0 with Runtime Library Exception

See https://swift.org/LICENSE.txt for license information
See https://swift.org/CONTRIBUTORS.txt for the list of Swift project
authors

-----

This software includes some portions from vim-go.

Copyright (c) 2015, Fatih Arslan
All rights reserved.

Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:

* Redistributions of source code must retain the above copyright notice, this
list of conditions and the following disclaimer.

* Redistributions in binary form must reproduce the above copyright notice,
this list of conditions and the following disclaimer in the documentation
and/or other materials provided with the distribution.

* Neither the name of vim-go nor the names of its
contributors may be used to endorse or promote products derived from
this software without specific prior written permission.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
94 changes: 92 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,85 @@
# ⌨️ vim-swift
# ⌨️ swifty-vim

A [Swift][swift] plugin for [vim][vim].
A [Vim][vim] plugin for [Swift][swift] which provides
file detection, syntax highlighting, support for compiling and
running tests, and optional support for formatting and linting tools.

It is inspired by [vim-go][vim-go] and [rust.vim][rust_vim].

## Requirements

* Vim 8.0.0902 or greater
* [Swift Toolchain][swift_toolchain_install] or Xcode
* (Optional) [SwiftFormat][swiftformat]
* (Optional) [SwiftLint][swiftlint]

## Installation

Use one of the following package managers:

* [Vim 8 packages][vim8pack]:
* `git clone https://github.com/bluk/swifty-vim ~/.vim/pack/plugins/start/swifty-vim`
* [Pathogen][pathogen]:
* `git clone --depth=1 https://github.com/bluk/swifty-vim.git ~/.vim/bundle/swifty-vim`
* [vim-plug][vim-plug]:
* Add `Plug 'bluk/swifty-vim'` to `~/.vimrc`
* `:PlugInstall` or `$ vim +PlugInstall +qall`
* [dein.vim][dein.vim]:
* Add `call dein#add('bluk/swifty-vim')` to `~/.vimrc`
* `:call dein#install()`
* [Vundle][vundle]:
* Add `Plugin 'bluk/swifty-vim'` to `~/.vimrc`
* `:PluginInstall` or `$ vim +PluginInstall +qall`

## Features

There are configuration options to customize the behavior of the key mappings
and commands.

### Swift Package Manager Support

Key mappings and commands such as:

* `:SwiftPMBuild` to build the current package source or tests.
* `:SwiftPMTest` to run the package tests.
* `:SwiftPMTestFunctionOnly` to run the current test under the cursor.

### SwiftFormat Support

Key mapping and command:

* `:SwiftFormat` to format the current file.

### SwiftLint Support

Key mapping and command:

* `:SwiftLint` to lint the current file.

## Sample vimrc Configuration

Add the following to your `vimrc`:

```vim
" Build the current Swift package. If in a 'Tests' directory, also build the tests.
autocmd FileType swift nmap <leader>b <Plug>(swift-spm-build)
" Run the current Swift package tests.
autocmd FileType swift nmap <leader>t <Plug>(swift-spm-test)
" Run the test under the current cursor.
autocmd FileType swift nmap <leader>ft <Plug>(swift-spm-test-function-only)
" Run SwiftFormat on save.
let g:swift_swiftformat_autosave = 1
" Run SwiftLint on save.
let g:swift_swiftlint_autosave = 1
```

## Documentation / Help

Help can be found in the included [documentation][doc_dir].

Run `:help swifty-vim` in Vim. Helptags (`:Helptags`) may need to be generated for navigation. See your
plugin manager or the helptags documentation (`:help helptags`) for more information.

## License

Expand All @@ -9,3 +88,14 @@ A [Swift][swift] plugin for [vim][vim].
[license]: LICENSE
[swift]: https://swift.org
[vim]: https://www.vim.org
[vim-go]: https://github.com/fatih/vim-go
[rust_vim]: https://github.com/rust-lang/rust.vim/
[swift_toolchain_install]: https://swift.org/getting-started/
[swiftformat]: https://github.com/nicklockwood/SwiftFormat
[swiftlint]: https://github.com/realm/SwiftLint
[vim8pack]: http://vimhelp.appspot.com/repeat.txt.html#packages
[pathogen]: https://github.com/tpope/vim-pathogen
[vim-plug]: https://github.com/junegunn/vim-plug
[dein.vim]: https://github.com/Shougo/dein.vim
[vundle]: https://github.com/gmarik/vundle
[doc_dir]: doc/
68 changes: 68 additions & 0 deletions autoload/swift/echo.vim
Original file line number Diff line number Diff line change
@@ -0,0 +1,68 @@
" Vim autoload file
" Language: Swift
" Maintainer: Bryant Luk <[email protected]>
" Description: Utility functions to echo messages.

" Source code modified from original file:
" https://github.com/fatih/vim-go/blob/8b21b2dc67ea7c666fa3a8052c6062ae217ec0d9/autoload/go/util.vim
"
" Copyright (c) 2015, Fatih Arslan
" All rights reserved.
"
" Redistribution and use in source and binary forms, with or without
" modification, are permitted provided that the following conditions are met:
"
" * Redistributions of source code must retain the above copyright notice, this
" list of conditions and the following disclaimer.
"
" * Redistributions in binary form must reproduce the above copyright notice,
" this list of conditions and the following disclaimer in the documentation
" and/or other materials provided with the distribution.
"
" * Neither the name of vim-go nor the names of its
" contributors may be used to endorse or promote products derived from
" this software without specific prior written permission.
"
" THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
" DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
" SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
" CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
" OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
" OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
"
" 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) abort
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 "swifty-vim: " . line
endfor
echohl None
endfunction

function! swift#echo#EchoSuccess(msg) abort
call s:echo(a:msg, 'None')
endfunction
function! swift#echo#EchoError(msg) abort
call s:echo(a:msg, 'ErrorMsg')
endfunction
function! swift#echo#EchoWarning(msg) abort
call s:echo(a:msg, 'WarningMsg')
endfunction

" vim: sw=2 ts=2 et
Loading

0 comments on commit d70dc27

Please sign in to comment.