Jelajahi Sumber

Update phplint vim script.

Emmanuel Bouthenot 14 tahun lalu
induk
melakukan
d294bb990b
1 mengubah file dengan 81 tambahan dan 60 penghapusan
  1. 81 60
      .vim/plugin/phplint.vim

+ 81 - 60
.vim/plugin/phplint.vim

@@ -1,72 +1,93 @@
+"
+" Script downloaded from https://github.com/Jonty/phplint.vim
+"
+
 " Check we actually have PHP installed, otherwise you'll never be able to save
-if exists("loadedPHPLint") || !executable('php')
+if !exists("loadedPHPLint") && executable('php')
+    let loadedPHPLint = 1
+else
     finish
 endif
 
-let loadedPHPLint = 1
 
-autocmd BufWriteCmd * execute('call LintPHPFile()')
+" To disable auto-lint, add "let noAutoLint = 1" to your .vimrc
+if !exists("noAutoLint")
+    autocmd BufWriteCmd *.php execute('call AutoLintPHPFile()')
+endif
+
+function AutoLintPHPFile()
+    if LintPHPFile()
+        " We have to handle the write op ourselves, as we overrode it
+        noautocmd w
+    endif
+endf
+
+
+" Allow manual linting with :Phplint
+command! PHPLint call LintPHPFile()
 
 function LintPHPFile()
-    if &filetype == 'php'
-        let thisFile = expand("%")
-
-        " If the file isn't writable don't do anything, as it'll freak vim out
-        if filewritable(thisFile)
-            let testFile = tempname()
-
-            " This resets the view to the top, so we need to restore it
-            let view = winsaveview()
-            let bufferContents = getbufline(bufnr("%"), 1, "$")
-            exe writefile(bufferContents, testFile)
-            call winrestview(view)
-
-            " Check the test file got written, this might fail if the disk is 
-            " full and prevent you from saving. Which would be bad.
-            if filereadable(testFile)
-                let phpLint = system('php -l ' . testFile)
-                let phpLint = substitute(phpLint, testFile, thisFile, "g")
-                call delete(testFile)
-
-                let errLine = matchstr(phpLint, 'No syntax errors')
-                if strlen(errLine) > 0
-                    cclose
-                    redraw " Avoids the annoying 'Press ENTER to BLAH' message
-                else
-                    let lintLines = split(phpLint, "\n")
-
-                    let errorLines = []
-                    for line in lintLines
-                        let pos = matchstr(line, 'on line')
-                        if strlen(pos) > 0 && stridx(line, 'PHP') != 0 " Some versions dupe the error
-                            call add(errorLines, line)
-                        endif
-                    endfor
-
-                    let cFile = tempname()
-                    exe writefile(errorLines, cFile)
-
-                    let oldCpoptions = &cpoptions
-                    let oldErrorformat = &errorformat
-
-                    set cpoptions-=F
-                    set errorformat=%m\ in\ %f\ on\ line\ %l
-
-                    exe "cfile " . cFile
-                    "copen 5
-                    botright cwindow 5
-                    call delete(cFile)
-
-                    let &cpoptions = oldCpoptions
-                    let &errorformat = oldErrorformat
-
-                    return
-                endif
-            endif
+    if &filetype != 'php'
+        return 1
+    endif
+
+    let thisFile = expand("%")
+
+    " If the file isn't writable don't do anything, as it'll freak vim out
+    if filewritable(thisFile)
+        let testFile = tempname()
+
+        " This resets the view to the top, so we need to restore it
+        let view = winsaveview()
+        let bufferContents = getbufline(bufnr("%"), 1, "$")
+        exe writefile(bufferContents, testFile)
+        call winrestview(view)
 
+        " Check the test file got written, this might fail if the disk is 
+        " full and prevent you from saving. Which would be bad.
+        if filereadable(testFile)
+            let phpLint = system('php -l ' . testFile)
+            let phpLint = substitute(phpLint, testFile, thisFile, "g")
+            call delete(testFile)
+
+            let errLine = matchstr(phpLint, 'No syntax errors')
+            if strlen(errLine) > 0
+                cclose
+                redraw " Avoids the annoying 'Press ENTER to BLAH' message
+                return 1
+
+            else
+                let lintLines = split(phpLint, "\n")
+
+                let errorLines = []
+                for line in lintLines
+                    let pos = matchstr(line, 'on line')
+                    if strlen(pos) > 0 && stridx(line, 'PHP') != 0 " Some versions dupe the error
+                        call add(errorLines, line)
+                    endif
+                endfor
+
+                let cFile = tempname()
+                exe writefile(errorLines, cFile)
+
+                let oldCpoptions = &cpoptions
+                let oldErrorformat = &errorformat
+
+                set cpoptions-=F
+                set errorformat=%m\ in\ %f\ on\ line\ %l
+
+                exe "cfile " . cFile
+                copen 5
+                call delete(cFile)
+
+                let &cpoptions = oldCpoptions
+                let &errorformat = oldErrorformat
+
+                return 0
+
+            endif
         endif
     endif
 
-    " We have to handle the write op ourselves, as we overrode it
-    noautocmd w
+    return 1
 endf