mirror of
https://github.com/koalaman/shellcheck
synced 2025-07-06 21:11:35 -07:00
This change makes PositionedComment and ParseNote contain end columns. It additionally modifies the JSON formatter to show the end column in an "endColumn" property. No modifications to the messages shown by any other formatter have been made. Currently, all checks set the end column to the start column. It should now be possible however to start setting the end column in the parser. Additional work is needed to set the end column during AST analysis.
59 lines
1.8 KiB
Haskell
59 lines
1.8 KiB
Haskell
{-
|
|
Copyright 2012-2015 Vidar Holen
|
|
|
|
This file is part of ShellCheck.
|
|
http://www.vidarholen.net/contents/shellcheck
|
|
|
|
ShellCheck 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.
|
|
|
|
ShellCheck 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 <http://www.gnu.org/licenses/>.
|
|
-}
|
|
module ShellCheck.Formatter.JSON (format) where
|
|
|
|
import ShellCheck.Interface
|
|
import ShellCheck.Formatter.Format
|
|
|
|
import Data.IORef
|
|
import GHC.Exts
|
|
import System.IO
|
|
import Text.JSON
|
|
|
|
format = do
|
|
ref <- newIORef []
|
|
return Formatter {
|
|
header = return (),
|
|
onResult = collectResult ref,
|
|
onFailure = outputError,
|
|
footer = finish ref
|
|
}
|
|
|
|
instance JSON (PositionedComment) where
|
|
showJSON comment@(PositionedComment start end (Comment level code string)) = makeObj [
|
|
("file", showJSON $ posFile start),
|
|
("line", showJSON $ posLine start),
|
|
("column", showJSON $ posColumn start),
|
|
("endColumn", showJSON $ posColumn end),
|
|
("level", showJSON $ severityText comment),
|
|
("code", showJSON code),
|
|
("message", showJSON string)
|
|
]
|
|
|
|
readJSON = undefined
|
|
|
|
outputError file msg = hPutStrLn stderr $ file ++ ": " ++ msg
|
|
collectResult ref result _ =
|
|
modifyIORef ref (\x -> crComments result ++ x)
|
|
|
|
finish ref = do
|
|
list <- readIORef ref
|
|
putStrLn $ encodeStrict list
|
|
|