Repository: idris-hackers/idris-vim
Branch: master
Commit: 091ed6b26774
Files: 11
Total size: 30.1 KB
Directory structure:
gitextract_9cxatkb6/
├── README.md
├── after/
│ ├── ftplugin/
│ │ └── idris.vim
│ └── syntax/
│ └── idris.vim
├── doc/
│ └── idris-vim.txt
├── ftdetect/
│ ├── idris.vim
│ └── lidris.vim
├── ftplugin/
│ └── idris.vim
├── indent/
│ └── idris.vim
├── syntax/
│ ├── idris.vim
│ └── lidris.vim
└── syntax_checkers/
└── idris/
└── idris.vim
================================================
FILE CONTENTS
================================================
================================================
FILE: README.md
================================================
Idris mode for vim
==================
This is an [Idris][] mode for vim which features syntax highlighting, indentation
and optional syntax checking via [Syntastic][]. If you need a REPL I recommend using
[Vimshell][].

## Installation
I recommend using [Pathogen][] for installation. Simply clone
this repo into your `~/.vim/bundle` directory and you are ready to go.
cd ~/.vim/bundle
git clone https://github.com/idris-hackers/idris-vim.git
### Manual Installation
Copy content into your `~/.vim` directory.
Be sure that the following lines are in your
`.vimrc`
syntax on
filetype on
filetype plugin indent on
## Features
Apart from syntax highlighting, indentation, and unicode character concealing,
idris-vim offers some neat interactive editing features. For more information on
how to use it, read this blog article by Edwin Brady on [Interactive Idris editing with vim][].
## Interactive Editing Commands
[Idris][] mode for vim offers interactive editing capabilities, the following
commands are supported.
`<LocalLeader>r` reload file
`<LocalLeader>t` show type
`<LocalLeader>d` Create an initial clause for a type declaration.
`<LocalLeader>b` Same as \d but for an initial typeclass method impl.
`<LocalLeader>md` Same as \d but for a proof clause
`<LocalLeader>c` case split
`<LocalLeader>mc` make case
`<LocalLeader>w` add with clause
`<LocalLeader>e` evaluate expression
`<LocalLeader>l` make lemma
`<LocalLeader>m` add missing clause
`<LocalLeader>f` refine item
`<LocalLeader>o` obvious proof search
`<LocalLeader>p` proof search
`<LocalLeader>i` open idris response window
`<LocalLeader>h` show documentation
## Configuration
### Indentation
To configure indentation in `idris-vim` you can use the following variables:
* `let g:idris_indent_if = 3`
if bool
>>>then ...
>>>else ...
* `let g:idris_indent_case = 5`
case xs of
>>>>>[] => ...
>>>>>(y::ys) => ...
* `let g:idris_indent_let = 4`
let x = 0 in
>>>>x
* `let g:idris_indent_where = 6`
where f : Int -> Int
>>>>>>f x = x
* `let g:idris_indent_do = 3`
do x <- a
>>>y <- b
* `let g:idris_indent_rewrite = 8`
rewrite prf in expr
>>>>>>>>x
### Concealing
Concealing with unicode characters is off by default, but `let g:idris_conceal = 1` turns it on.
### Tab Characters
If you simply must use tab characters, and would prefer that the ftplugin not set expandtab add `let g:idris_allow_tabchar = 1`.
[Idris]: http://www.idris-lang.org
[Syntastic]: https://github.com/scrooloose/syntastic
[Vimshell]: https://github.com/Shougo/vimshell.vim
[Pathogen]: https://github.com/tpope/vim-pathogen
[Interactive Idris editing with vim]: http://edwinb.wordpress.com/2013/10/28/interactive-idris-editing-with-vim/
================================================
FILE: after/ftplugin/idris.vim
================================================
setlocal iskeyword+='
================================================
FILE: after/syntax/idris.vim
================================================
" 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
================================================
FILE: doc/idris-vim.txt
================================================
*idris-vim.txt* Last change 2014 April 24
===============================================================================
===============================================================================
@@@@ @@@@@@@@ @@@@@@@@ @@@@ @@@@@@ @@ @@ @@@@ @@ @@
@@ @@ @@ @@ @@ @@ @@ @@ @@ @@ @@ @@@ @@@
@@ @@ @@ @@ @@ @@ @@ @@ @@ @@ @@@@ @@@@
@@ @@ @@ @@@@@@@@ @@ @@@@@@ @@@@@@@ @@ @@ @@ @@ @@@ @@
@@ @@ @@ @@ @@ @@ @@ @@ @@ @@ @@ @@
@@ @@ @@ @@ @@ @@ @@ @@ @@ @@ @@ @@ @@
@@@@ @@@@@@@@ @@ @@ @@@@ @@@@@@ @@@ @@@@ @@ @@
===============================================================================
CONTENTS *idris-vim-contents*
1. Features: |idris-vim-features|
2. Requirements: |idris-vim-requirements|
3. Functions: |idris-vim-functions|
4. Troubleshooting |idris-vim-troubleshooting|
5. Examples: |idris-vim-examples|
6. Information: |idris-vim-information|
===============================================================================
FEATURES *idris-vim-features*
* Syntax Highlighting
* Indentation
* Unicode Concealing
* Syntax Checking (via Syntastic(https://github.com/scrooloose/syntastic))
* Interactive Editing via the REPL
===============================================================================
REQUIREMENTS *idris-vim-requirements*
* Idris (http://www.idris-lang.org/)
OPTIONAL:
* Syntastic(https://github.com/scrooloose/syntastic) for syntax checking
* Vimshell(https://github.com/Shougo/vimshell.vim) for a REPL
===============================================================================
FUNCTIONS *idris-vim-functions*
All of the functions in idris-vim are essentially just calls back to the REPL,
so documentation for each of them is also available there.
IdrisDocumentation *IdrisDocumentation*
Shows internal documentation of the primitive under the cursor.
Mapped to '<LocalLeader>_h' by default.
IdrisResponseWin *IdrisResponseWin*
This opens an idris response window in a new pane.
Mapped to '<LocalLeader>_i' by default.
IdrisShowType *IdrisShowType*
This shows the type of the name under the cursor (or, if the cursor happens
to be over a metavariable, a bit more information about its context).
Mapped to '<LocalLeader>_t' by default.
IdrisReload *IdrisReload*
This reloads the file and type-checks the file in the current buffer.
Mapped to '<LocalLeader>_r' by default.
IdrisEval *IdrisEval*
This prompts for an expression and then evaluates it in the REPL, then
returns the result.
Mapped to '<LocalLeader>_e' by default.
IdrisCaseSplit *IdrisCaseSplit*
When the cursor is over a variable in a pattern match clause or case
expression, this splits the variable into all well-typed patterns.
Mapped to '<LocalLeader>_c' by default
IdrisAddClause *IdrisAddClause*
When the cursor is at a type declaration this creates a new clause for that
signature.
By default mapped to '<LocalLeader>_d' for an ordinary top-level definition,
'<LocalLeader>_b' for a typeclass instance definition, and
'<LocalLeader>_md' to add a pattern-matching proof clause.
IdrisAddMissing: *IdrisAddMissing*
When the cursor is over a function, this adds all clauses necessary to make
that function cover all inputs. This also eliminates clauses which would
lead to unification errors from appearing.
Mapped to '<LocalLeader>_m' by default
IdrisRefine: *IdrisRefine*
Refines the item the cursor is over (applies the name and fills in any
arguments which can be filled in via unification)
Mapped to '<LocalLeader>_f' by default
IdrisProofSearch: *IdrisProofSearch*
This attempts to find a value for the metavariable it was called on by
looking at the rest of the code. It can also be called with hints, which
are functions that can apply to help solve for the metavariable.
Mapped to '<LocalLeader>_o' without hints and '<LocalLeader>p' with hints by
default
IdrisMakeWith: *IdrisMakeWith*
When the cursor is over a pattern clause and this is called, it creates a
new with clause.
Mapped to '<LocalLeader>_w' by default
IdrisMakeLemma: *IdrisMakeLemma*
When the cursor is over a metavariable and this is called, it creates a new
top-level definition to solve the metavariable.
Mapped to '<LocalLeader>_l' by default
===============================================================================
TROUBLESHOOTING *idris-vim-troubleshooting*
If this isn't working for you, make sure that:
* There is an Idris REPL running
* For syntax checking, you have syntastic installed
* The plugins mappings exists and don't conflict with anything else installed
(You can use ':map' to check. There should be mappings similar to
'\h * :call IdrisShowDoc()'.)
* Vim recognizes you're in an idris file (you can use ':verb set ft' to check)
If none of this works, check to issue tracker on github and if nothing is
there create an issue with a detailed description of the problem.
===============================================================================
EXAMPLES *idris-vim-examples*
Some excellent tutorials/examples for interactive editing using the above
functions can be found at:
http://edwinb.wordpress.com/2013/10/28/interactive-idris-editing-with-vim/
and
http://www.scribd.com/doc/214031954/60/Interactive-Editing-in-Vim
===============================================================================
INFORMATION *idris-vim-information*
Author: edwinb
Repo: https://github.com/idris-hackers/idris-vim
Documentation by japesinator
===============================================================================
===============================================================================
" vim:ft=help:et:ts=2:sw=2:sts=2:norl:
================================================
FILE: ftdetect/idris.vim
================================================
au BufNewFile,BufRead *.idr setf idris
au BufNewFile,BufRead idris-response setf idris
================================================
FILE: ftdetect/lidris.vim
================================================
au BufNewFile,BufRead *.lidr setf lidris
================================================
FILE: ftplugin/idris.vim
================================================
if bufname('%') == "idris-response"
finish
endif
if exists("b:did_ftplugin")
finish
endif
setlocal shiftwidth=2
setlocal tabstop=2
if !exists("g:idris_allow_tabchar") || g:idris_allow_tabchar == 0
setlocal expandtab
endif
setlocal comments=s1:{-,mb:-,ex:-},:\|\|\|,:--
setlocal commentstring=--%s
setlocal iskeyword+=?
setlocal wildignore+=*.ibc
let idris_response = 0
let b:did_ftplugin = 1
" Text near cursor position that needs to be passed to a command.
" Refinment of `expand(<cword>)` to accomodate differences between
" a (n)vim word and what Idris requires.
function! s:currentQueryObject()
let word = expand("<cword>")
if word =~ '^?'
" Cut off '?' that introduces a hole identifier.
let word = strpart(word, 1)
endif
return word
endfunction
function! s:IdrisCommand(...)
let idriscmd = shellescape(join(a:000))
return system("idris --client " . idriscmd)
endfunction
function! IdrisDocFold(lineNum)
let line = getline(a:lineNum)
if line =~ "^\s*|||"
return "1"
endif
return "0"
endfunction
function! IdrisFold(lineNum)
return IdrisDocFold(a:lineNum)
endfunction
setlocal foldmethod=expr
setlocal foldexpr=IdrisFold(v:lnum)
function! IdrisResponseWin()
if (!bufexists("idris-response"))
botright 10split
badd idris-response
b idris-response
let g:idris_respwin = "active"
set buftype=nofile
wincmd k
elseif (bufexists("idris-response") && g:idris_respwin == "hidden")
botright 10split
b idris-response
let g:idris_respwin = "active"
wincmd k
endif
endfunction
function! IdrisHideResponseWin()
let g:idris_respwin = "hidden"
endfunction
function! IdrisShowResponseWin()
let g:idris_respwin = "active"
endfunction
function! IWrite(str)
if (bufexists("idris-response"))
let save_cursor = getcurpos()
b idris-response
%delete
let resp = split(a:str, '\n')
call append(1, resp)
b #
call setpos('.', save_cursor)
else
echo a:str
endif
endfunction
function! IdrisReload(q)
w
let file = expand("%:p")
let tc = s:IdrisCommand(":l", file)
if (! (tc is ""))
call IWrite(tc)
else
if (a:q==0)
echo "Successfully reloaded " . file
call IWrite("")
endif
endif
return tc
endfunction
function! IdrisReloadToLine(cline)
return IdrisReload(1)
"w
"let file = expand("%:p")
"let tc = s:IdrisCommand(":lto", a:cline, file)
"if (! (tc is ""))
" call IWrite(tc)
"endif
"return tc
endfunction
function! IdrisShowType()
w
let word = s:currentQueryObject()
let cline = line(".")
let tc = IdrisReloadToLine(cline)
if (! (tc is ""))
echo tc
else
let ty = s:IdrisCommand(":t", word)
call IWrite(ty)
endif
return tc
endfunction
function! IdrisShowDoc()
w
let word = expand("<cword>")
let ty = s:IdrisCommand(":doc", word)
call IWrite(ty)
endfunction
function! IdrisProofSearch(hint)
let view = winsaveview()
w
let cline = line(".")
let word = s:currentQueryObject()
let tc = IdrisReload(1)
if (a:hint==0)
let hints = ""
else
let hints = input ("Hints: ")
endif
if (tc is "")
let result = s:IdrisCommand(":ps!", cline, word, hints)
if (! (result is ""))
call IWrite(result)
else
e
call winrestview(view)
endif
endif
endfunction
function! IdrisMakeLemma()
let view = winsaveview()
w
let cline = line(".")
let word = s:currentQueryObject()
let tc = IdrisReload(1)
if (tc is "")
let result = s:IdrisCommand(":ml!", cline, word)
if (! (result is ""))
call IWrite(result)
else
e
call winrestview(view)
call search(word, "b")
endif
endif
endfunction
function! IdrisRefine()
let view = winsaveview()
w
let cline = line(".")
let word = expand("<cword>")
let tc = IdrisReload(1)
let name = input ("Name: ")
if (tc is "")
let result = s:IdrisCommand(":ref!", cline, word, name)
if (! (result is ""))
call IWrite(result)
else
e
call winrestview(view)
endif
endif
endfunction
function! IdrisAddMissing()
let view = winsaveview()
w
let cline = line(".")
let word = expand("<cword>")
let tc = IdrisReload(1)
if (tc is "")
let result = s:IdrisCommand(":am!", cline, word)
if (! (result is ""))
call IWrite(result)
else
e
call winrestview(view)
endif
endif
endfunction
function! IdrisCaseSplit()
let view = winsaveview()
let cline = line(".")
let word = expand("<cword>")
let tc = IdrisReloadToLine(cline)
if (tc is "")
let result = s:IdrisCommand(":cs!", cline, word)
if (! (result is ""))
call IWrite(result)
else
e
call winrestview(view)
endif
endif
endfunction
function! IdrisMakeWith()
let view = winsaveview()
w
let cline = line(".")
let word = s:currentQueryObject()
let tc = IdrisReload(1)
if (tc is "")
let result = s:IdrisCommand(":mw!", cline, word)
if (! (result is ""))
call IWrite(result)
else
e
call winrestview(view)
call search("_")
endif
endif
endfunction
function! IdrisMakeCase()
let view = winsaveview()
w
let cline = line(".")
let word = s:currentQueryObject()
let tc = IdrisReload(1)
if (tc is "")
let result = s:IdrisCommand(":mc!", cline, word)
if (! (result is ""))
call IWrite(result)
else
e
call winrestview(view)
call search("_")
endif
endif
endfunction
function! IdrisAddClause(proof)
let view = winsaveview()
w
let cline = line(".")
let word = expand("<cword>")
let tc = IdrisReloadToLine(cline)
if (tc is "")
if (a:proof==0)
let fn = ":ac!"
else
let fn = ":apc!"
endif
let result = s:IdrisCommand(fn, cline, word)
if (! (result is ""))
call IWrite(result)
else
e
call winrestview(view)
call search(word)
endif
endif
endfunction
function! IdrisEval()
w
let tc = IdrisReload(1)
if (tc is "")
let expr = input ("Expression: ")
let result = s:IdrisCommand(expr)
call IWrite(" = " . result)
endif
endfunction
nnoremap <buffer> <silent> <LocalLeader>t :call IdrisShowType()<ENTER>
nnoremap <buffer> <silent> <LocalLeader>r :call IdrisReload(0)<ENTER>
nnoremap <buffer> <silent> <LocalLeader>c :call IdrisCaseSplit()<ENTER>
nnoremap <buffer> <silent> <LocalLeader>d 0:call search(":")<ENTER>b:call IdrisAddClause(0)<ENTER>w
nnoremap <buffer> <silent> <LocalLeader>b 0:call IdrisAddClause(0)<ENTER>
nnoremap <buffer> <silent> <LocalLeader>m :call IdrisAddMissing()<ENTER>
nnoremap <buffer> <silent> <LocalLeader>md 0:call search(":")<ENTER>b:call IdrisAddClause(1)<ENTER>w
nnoremap <buffer> <silent> <LocalLeader>f :call IdrisRefine()<ENTER>
nnoremap <buffer> <silent> <LocalLeader>o :call IdrisProofSearch(0)<ENTER>
nnoremap <buffer> <silent> <LocalLeader>p :call IdrisProofSearch(1)<ENTER>
nnoremap <buffer> <silent> <LocalLeader>l :call IdrisMakeLemma()<ENTER>
nnoremap <buffer> <silent> <LocalLeader>e :call IdrisEval()<ENTER>
nnoremap <buffer> <silent> <LocalLeader>w 0:call IdrisMakeWith()<ENTER>
nnoremap <buffer> <silent> <LocalLeader>mc :call IdrisMakeCase()<ENTER>
nnoremap <buffer> <silent> <LocalLeader>i 0:call IdrisResponseWin()<ENTER>
nnoremap <buffer> <silent> <LocalLeader>h :call IdrisShowDoc()<ENTER>
menu Idris.Reload <LocalLeader>r
menu Idris.Show\ Type <LocalLeader>t
menu Idris.Evaluate <LocalLeader>e
menu Idris.-SEP0- :
menu Idris.Add\ Clause <LocalLeader>d
menu Idris.Add\ with <LocalLeader>w
menu Idris.Case\ Split <LocalLeader>c
menu Idris.Add\ missing\ cases <LocalLeader>m
menu Idris.Proof\ Search <LocalLeader>o
menu Idris.Proof\ Search\ with\ hints <LocalLeader>p
au BufHidden idris-response call IdrisHideResponseWin()
au BufEnter idris-response call IdrisShowResponseWin()
================================================
FILE: indent/idris.vim
================================================
" indentation for idris (idris-lang.org)
"
" Based on haskell indentation by motemen <motemen@gmail.com>
"
" author: raichoo (raichoo@googlemail.com)
"
" Modify g:idris_indent_if and g:idris_indent_case to
" change indentation for `if'(default 3) and `case'(default 5).
" Example (in .vimrc):
" > let g:idris_indent_if = 2
if exists('b:did_indent')
finish
endif
let b:did_indent = 1
if !exists('g:idris_indent_if')
" if bool
" >>>then ...
" >>>else ...
let g:idris_indent_if = 3
endif
if !exists('g:idris_indent_case')
" case xs of
" >>>>>[] => ...
" >>>>>(y::ys) => ...
let g:idris_indent_case = 5
endif
if !exists('g:idris_indent_let')
" let x : Nat = O in
" >>>>x
let g:idris_indent_let = 4
endif
if !exists('g:idris_indent_rewrite')
" rewrite prf in expr
" >>>>>>>>x
let g:idris_indent_rewrite = 8
endif
if !exists('g:idris_indent_where')
" where f : Nat -> Nat
" >>>>>>f x = x
let g:idris_indent_where = 6
endif
if !exists('g:idris_indent_do')
" do x <- a
" >>>y <- b
let g:idris_indent_do = 3
endif
setlocal indentexpr=GetIdrisIndent()
setlocal indentkeys=!^F,o,O,}
function! GetIdrisIndent()
let prevline = getline(v:lnum - 1)
if prevline =~ '\s\+(\s*.\+\s\+:\s\+.\+\s*)\s\+->\s*$'
return match(prevline, '(')
elseif prevline =~ '\s\+{\s*.\+\s\+:\s\+.\+\s*}\s\+->\s*$'
return match(prevline, '{')
endif
if prevline =~ '[!#$%&*+./<>?@\\^|~-]\s*$'
let s = match(prevline, '[:=]')
if s > 0
return s + 2
else
return match(prevline, '\S')
endif
endif
if prevline =~ '[{([][^})\]]\+$'
return match(prevline, '[{([]')
endif
if prevline =~ '\<let\>\s\+.\+\<in\>\s*$'
return match(prevline, '\<let\>') + g:idris_indent_let
endif
if prevline =~ '\<rewrite\>\s\+.\+\<in\>\s*$'
return match(prevline, '\<rewrite\>') + g:idris_indent_rewrite
endif
if prevline !~ '\<else\>'
let s = match(prevline, '\<if\>.*\&.*\zs\<then\>')
if s > 0
return s
endif
let s = match(prevline, '\<if\>')
if s > 0
return s + g:idris_indent_if
endif
endif
if prevline =~ '\(\<where\>\|\<do\>\|=\|[{([]\)\s*$'
return match(prevline, '\S') + &shiftwidth
endif
if prevline =~ '\<where\>\s\+\S\+.*$'
return match(prevline, '\<where\>') + g:idris_indent_where
endif
if prevline =~ '\<do\>\s\+\S\+.*$'
return match(prevline, '\<do\>') + g:idris_indent_do
endif
if prevline =~ '^\s*\<\(co\)\?data\>\s\+[^=]\+\s\+=\s\+\S\+.*$'
return match(prevline, '=')
endif
if prevline =~ '\<with\>\s\+([^)]*)\s*$'
return match(prevline, '\S') + &shiftwidth
endif
if prevline =~ '\<case\>\s\+.\+\<of\>\s*$'
return match(prevline, '\<case\>') + g:idris_indent_case
endif
if prevline =~ '^\s*\(\<namespace\>\|\<\(co\)\?data\>\)\s\+\S\+\s*$'
return match(prevline, '\(\<namespace\>\|\<\(co\)\?data\>\)') + &shiftwidth
endif
if prevline =~ '^\s*\(\<using\>\|\<parameters\>\)\s*([^(]*)\s*$'
return match(prevline, '\(\<using\>\|\<parameters\>\)') + &shiftwidth
endif
if prevline =~ '^\s*\<mutual\>\s*$'
return match(prevline, '\<mutual\>') + &shiftwidth
endif
let line = getline(v:lnum)
if (line =~ '^\s*}\s*' && prevline !~ '^\s*;')
return match(prevline, '\S') - &shiftwidth
endif
return match(prevline, '\S')
endfunction
================================================
FILE: syntax/idris.vim
================================================
" syntax highlighting for idris (idris-lang.org)
"
" Heavily modified version of the haskell syntax
" highlighter to support idris.
"
" author: raichoo (raichoo@googlemail.com)
if exists("b:current_syntax")
finish
endif
syn match idrisTypeDecl "[a-zA-Z][a-zA-z0-9_']*\s\+:\s\+"
\ contains=idrisIdentifier,idrisOperators
syn region idrisParens matchgroup=idrisDelimiter start="(" end=")" contains=TOP,idrisTypeDecl
syn region idrisBrackets matchgroup=idrisDelimiter start="\[" end="]" contains=TOP,idrisTypeDecl
syn region idrisBlock matchgroup=idrisDelimiter start="{" end="}" contains=TOP,idrisTypeDecl
syn keyword idrisModule module namespace
syn keyword idrisImport import
syn keyword idrisRefl refl
syn keyword idrisDeprecated class instance
syn keyword idrisStructure codata data record dsl interface implementation
syn keyword idrisWhere where
syn keyword idrisVisibility public abstract private export
syn keyword idrisBlock parameters mutual postulate using
syn keyword idrisTotality total partial covering
syn keyword idrisImplicit implicit
syn keyword idrisAnnotation auto impossible static constructor
syn keyword idrisStatement do case of rewrite with proof
syn keyword idrisLet let in
syn match idrisSyntax "\(pattern \+\|term \+\)\?syntax"
syn keyword idrisConditional if then else
syn match idrisTactic contained "\<\(intros\?\|rewrite\|exact\|refine\|trivial\|let\|focus\|try\|compute\|solve\|attack\|reflect\|fill\|applyTactic\)\>"
syn match idrisNumber "\<[0-9]\+\>\|\<0[xX][0-9a-fA-F]\+\>\|\<0[oO][0-7]\+\>"
syn match idrisFloat "\<[0-9]\+\.[0-9]\+\([eE][-+]\=[0-9]\+\)\=\>"
syn match idrisDelimiter "[,;]"
syn keyword idrisInfix prefix infix infixl infixr
syn match idrisOperators "\([-!#$%&\*\+./<=>\?@\\^|~:]\|\<_\>\)"
syn match idrisType "\<[A-Z][a-zA-Z0-9_']*\>"
syn keyword idrisTodo TODO FIXME XXX HACK contained
syn match idrisLineComment "---*\([^-!#$%&\*\+./<=>\?@\\^|~].*\)\?$" contains=idrisTodo,@Spell
syn match idrisDocComment "|||\([^-!#$%&\*\+./<=>\?@\\^|~].*\)\?$" contains=idrisTodo,@Spell
syn match idrisMetaVar "?[a-z][A-Za-z0-9_']*"
syn match idrisLink "%\(lib\|link\|include\)"
syn match idrisDirective "%\(access\|assert_total\|default\|elim\|error_reverse\|hide\|name\|reflection\|error_handlers\|language\|flag\|dynamic\|provide\|inline\|used\|no_implicit\|hint\|extern\|unqualified\|error_handler\)"
syn keyword idrisDSL lambda variable index_first index_next
syn match idrisChar "'[^'\\]'\|'\\.'\|'\\u[0-9a-fA-F]\{4}'"
syn match idrisBacktick "`[A-Za-z][A-Za-z0-9_']*`"
syn region idrisString start=+"+ skip=+\\\\\|\\"+ end=+"+ contains=@Spell
syn region idrisBlockComment start="{-" end="-}" contains=idrisBlockComment,idrisTodo,@Spell
syn region idrisProofBlock start="\(default\s\+\)\?\(proof\|tactics\) *{" end="}" contains=idrisTactic
syn match idrisIdentifier "[a-zA-Z][a-zA-z0-9_']*" contained
highlight def link idrisDeprecated Error
highlight def link idrisIdentifier Identifier
highlight def link idrisImport Structure
highlight def link idrisModule Structure
highlight def link idrisStructure Structure
highlight def link idrisStatement Statement
highlight def link idrisDSL Statement
highlight def link idrisBlock Statement
highlight def link idrisAnnotation Statement
highlight def link idrisWhere Structure
highlight def link idrisLet Structure
highlight def link idrisTotality Statement
highlight def link idrisImplicit Statement
highlight def link idrisSyntax Statement
highlight def link idrisVisibility Statement
highlight def link idrisConditional Conditional
highlight def link idrisProofBlock Macro
highlight def link idrisRefl Macro
highlight def link idrisTactic Identifier
highlight def link idrisLink Statement
highlight def link idrisDirective Statement
highlight def link idrisNumber Number
highlight def link idrisFloat Float
highlight def link idrisDelimiter Delimiter
highlight def link idrisInfix PreProc
highlight def link idrisOperators Operator
highlight def link idrisType Include
highlight def link idrisDocComment Comment
highlight def link idrisLineComment Comment
highlight def link idrisBlockComment Comment
highlight def link idrisTodo Todo
highlight def link idrisMetaVar Macro
highlight def link idrisString String
highlight def link idrisChar String
highlight def link idrisBacktick Operator
let b:current_syntax = "idris"
================================================
FILE: syntax/lidris.vim
================================================
" Vim syntax file
" Language: Literate Idris
" Maintainer: Idris Hackers (https://github.com/idris-hackers/idris-vim)
" Last Change: 2014 Mar 4
" Version: 0.1
"
" This is just a minimal adaption of the Literate Haskell syntax file.
" Read Idris highlighting.
if version < 600
syntax include @idrisTop <sfile>:p:h/idris.vim
else
syntax include @idrisTop syntax/idris.vim
endif
" Recognize blocks of Bird tracks, highlight as Idris.
syntax region lidrisBirdTrackBlock start="^>" end="\%(^[^>]\)\@=" contains=@idrisTop,lidrisBirdTrack
syntax match lidrisBirdTrack "^>" contained
hi def link lidrisBirdTrack Comment
let b:current_syntax = "lidris"
================================================
FILE: syntax_checkers/idris/idris.vim
================================================
"============================================================================
"File: idris.vim
"Description: Syntax checking plugin for syntastic.vim
"Maintainer: raichoo <raichoo at googlemail dot com>
"License: This program is free software. It comes without any warranty,
" to the extent permitted by applicable law. You can redistribute
" it and/or modify it under the terms of the Do What The Fuck You
" Want To Public License, Version 2, as published by Sam Hocevar.
" See http://sam.zoy.org/wtfpl/COPYING for more details.
"
"============================================================================
if exists("g:loaded_syntastic_idris_idris_checker")
finish
endif
let g:loaded_syntastic_idris_idris_checker=1
function! SyntaxCheckers_idris_idris_IsAvailable()
return executable("idris")
endfunction
if !exists("g:syntastic_idris_options")
let g:syntastic_idris_options = " "
endif
function! SyntaxCheckers_idris_idris_GetLocList() dict
let makeprg = self.makeprgBuild({
\ 'exe': 'idris',
\ 'args': "--client ':l". g:syntastic_idris_options,
\ 'post_args': "'",
\ 'filetype': 'idris',
\ 'subchecker': 'idris' })
let errorformat =
\ '"%f" (line %l\, column %c\):,' .
\ 'user error (%f\:%l\:%m\),' .
\ '%E%f:%l:%c: error: %m,' .
\ '%E%f:%l:%c-%*[0-9]: error: %m,' .
\ '%W%f:%l:%c: warning: %m,' .
\ '%W%f:%l:%c-%*[0-9]: warning: %m,' .
\ '%E%f:%l:%c:%m,' .
\ '%E%f:%l:%c-%*[0-9]:%m,' .
\ '%C%m,' .
\ '%m'
return SyntasticMake({
\ 'makeprg': makeprg,
\ 'errorformat': errorformat,
\ 'postprocess': ['compressWhitespace'] })
endfunction
call g:SyntasticRegistry.CreateAndRegisterChecker({
\ 'filetype': 'idris',
\ 'name': 'idris'})
gitextract_9cxatkb6/
├── README.md
├── after/
│ ├── ftplugin/
│ │ └── idris.vim
│ └── syntax/
│ └── idris.vim
├── doc/
│ └── idris-vim.txt
├── ftdetect/
│ ├── idris.vim
│ └── lidris.vim
├── ftplugin/
│ └── idris.vim
├── indent/
│ └── idris.vim
├── syntax/
│ ├── idris.vim
│ └── lidris.vim
└── syntax_checkers/
└── idris/
└── idris.vim
Condensed preview — 11 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (33K chars).
[
{
"path": "README.md",
"chars": 2913,
"preview": "Idris mode for vim\n==================\n\nThis is an [Idris][] mode for vim which features syntax highlighting, indentation"
},
{
"path": "after/ftplugin/idris.vim",
"chars": 22,
"preview": "setlocal iskeyword+='\n"
},
{
"path": "after/syntax/idris.vim",
"chars": 2658,
"preview": "\" This script allows for unicode concealing of certain characters\n\" For instance -> goes to →\n\"\n\" It needs vim >= 7.3, s"
},
{
"path": "doc/idris-vim.txt",
"chars": 7029,
"preview": "*idris-vim.txt* Last change 2014 April 24\n============================================================================"
},
{
"path": "ftdetect/idris.vim",
"chars": 87,
"preview": "au BufNewFile,BufRead *.idr setf idris\nau BufNewFile,BufRead idris-response setf idris\n"
},
{
"path": "ftdetect/lidris.vim",
"chars": 41,
"preview": "au BufNewFile,BufRead *.lidr setf lidris\n"
},
{
"path": "ftplugin/idris.vim",
"chars": 7833,
"preview": "if bufname('%') == \"idris-response\"\n finish\nendif\n\nif exists(\"b:did_ftplugin\")\n finish\nendif\n\nsetlocal shiftwidth=2\nse"
},
{
"path": "indent/idris.vim",
"chars": 3341,
"preview": "\" indentation for idris (idris-lang.org)\n\"\n\" Based on haskell indentation by motemen <motemen@gmail.com>\n\"\n\" author: rai"
},
{
"path": "syntax/idris.vim",
"chars": 4322,
"preview": "\" syntax highlighting for idris (idris-lang.org)\n\"\n\" Heavily modified version of the haskell syntax\n\" highlighter to sup"
},
{
"path": "syntax/lidris.vim",
"chars": 667,
"preview": "\" Vim syntax file\n\" Language: Literate Idris\n\" Maintainer: Idris Hackers (https://github.com/idris-hackers/idris-vim"
},
{
"path": "syntax_checkers/idris/idris.vim",
"chars": 1881,
"preview": "\"============================================================================\n\"File: idris.vim\n\"Description: Synt"
}
]
About this extraction
This page contains the full source code of the idris-hackers/idris-vim GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 11 files (30.1 KB), approximately 9.1k tokens. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.
Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.