" Author: Eric Van Dewoestine
"
" Description: {{{
" see http://eclim.org/vim/java/correct.html
"
" License:
"
" Copyright (C) 2005 - 2013 Eric Van Dewoestine
"
" This program is free software: you can redistribute it and/or modify
" it under the terms of the GNU General Public License as published by
" the Free Software Foundation, either version 3 of the License, or
" (at your option) any later version.
"
" This program is distributed in the hope that it will be useful,
" but WITHOUT ANY WARRANTY; without even the implied warranty of
" MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
" GNU General Public License for more details.
"
" You should have received a copy of the GNU General Public License
" along with this program. If not, see .
"
" }}}
" define Correction group based on Normal.
hi link Correction Normal
hi Correction gui=underline,bold term=underline,bold cterm=underline,bold
" Script Varables {{{
let s:command_correct =
\ '-command java_correct -p "" -f "" ' .
\ '-l -o -e '
let s:command_correct_apply = s:command_correct . ' -a '
" }}}
" Correct() {{{
function! eclim#java#correct#Correct()
if !eclim#project#util#IsCurrentFileInProject()
return
endif
call eclim#lang#SilentUpdate()
let project = eclim#project#util#GetCurrentProjectName()
let file = eclim#project#util#GetProjectRelativeFilePath()
let command = s:command_correct
let command = substitute(command, '', project, '')
let command = substitute(command, '', file, '')
let command = substitute(command, '', line('.'), '')
let command = substitute(command, '', eclim#util#GetOffset(), '')
let command = substitute(command, '', eclim#util#GetEncoding(), '')
let window_name = file . "_correct"
let filename = expand('%:p')
call eclim#util#TempWindowClear(window_name)
let result = eclim#Execute(command)
" error executing the command.
if type(result) != g:DICT_TYPE && type(result) != g:STRING_TYPE
return
" no error on the current line
elseif type(result) == g:STRING_TYPE
call eclim#util#Echo(result)
return
" no correction proposals found.
elseif len(result.corrections) == 0
call eclim#util#EchoInfo('No Suggestions')
return
endif
let content = []
call add(content, result.message)
for correction in result.corrections
call add(content,
\ correction.index . '.' . result.offset . ': ' . correction.description)
for line in split(correction.preview, '\n')
call add(content, line != '' ? ("\t" . line) : line)
endfor
endfor
call eclim#util#TempWindow(window_name, content)
let b:filename = filename
augroup temp_window
autocmd! BufWinLeave
call eclim#util#GoToBufferWindowRegister(filename)
augroup END
setlocal ft=java
"exec "syntax match Normal /" . escape(getline(1), '^$/\') . "/"
syntax match Correction /^[0-9]\+\.[0-9]\+:.*/
nnoremap
\ :call eclim#java#correct#CorrectApply()
redraw | echo ""
endfunction " }}}
" CorrectApply() {{{
function! eclim#java#correct#CorrectApply()
let line = getline('.')
if line =~ '^[0-9]\+\.[0-9]\+:'
let winnr = bufwinnr('%')
let name = substitute(expand('%:p'), '_correct$', '', '')
let file_winnr = bufwinnr(bufnr('^' . b:filename))
if file_winnr != -1
let filename = b:filename
exec file_winnr . "winc w"
call eclim#lang#SilentUpdate()
let index = substitute(line, '^\([0-9]\+\)\..*', '\1', '')
let project = eclim#project#util#GetCurrentProjectName()
let file = eclim#project#util#GetProjectRelativeFilePath()
let command = s:command_correct_apply
let command = substitute(command, '', project, '')
let command = substitute(command, '', file, '')
let command = substitute(command, '', line('.'), '')
let command = substitute(command, '', eclim#util#GetOffset(), '')
let command = substitute(command, '', eclim#util#GetEncoding(), '')
let command = substitute(command, '', index, '')
call eclim#lang#Refactor(command)
call eclim#lang#UpdateSrcFile('java', 1)
exec winnr . "winc w"
close
else
call eclim#util#EchoError(name . ' no longer found in an open window.')
endif
endif
endfunction " }}}
" vim:ft=vim:fdm=marker