From cbed907038cb0591691538dd7dd1bedcb0b42807 Mon Sep 17 00:00:00 2001 From: khibino Date: Wed, 19 Oct 2011 19:09:36 +0900 Subject: [PATCH] Simply passing GHC options to ghc-mod check command. --- Check.hs | 2 +- GHCMod.hs | 6 +++++- Types.hs | 1 + elisp/ghc-flymake.el | 14 +++++++------- 4 files changed, 14 insertions(+), 9 deletions(-) diff --git a/Check.hs b/Check.hs index 9f1db92..e34e034 100644 --- a/Check.hs +++ b/Check.hs @@ -24,5 +24,5 @@ check opt fileName = withGHC $ checkIt `gcatch` handleErrMsg setTargetFile file load LoadAllTargets liftIO readLog - options = ["-Wall","-fno-warn-unused-do-bind"] + options = ["-Wall","-fno-warn-unused-do-bind"] ++ ghcOpts opt ++ map ("-i" ++) (checkIncludes opt) diff --git a/GHCMod.hs b/GHCMod.hs index fb97bc0..9576be7 100644 --- a/GHCMod.hs +++ b/GHCMod.hs @@ -26,7 +26,7 @@ usage = "ghc-mod version 0.6.2\n" ++ "\t ghc-mod list [-l]\n" ++ "\t ghc-mod lang [-l]\n" ++ "\t ghc-mod browse [-l] [-o] [ ...]\n" - ++ "\t ghc-mod check [-i inc] \n" + ++ "\t ghc-mod check [-g GHC options] [-i inc] \n" ++ "\t ghc-mod type \n" ++ "\t ghc-mod info \n" ++ "\t ghc-mod lint [-h opt] \n" @@ -39,6 +39,7 @@ defaultOptions :: Options defaultOptions = Options { convert = toPlain , hlintOpts = [] + , ghcOpts = [] , checkIncludes = [] , operators = False , packageConfs = [] @@ -52,6 +53,9 @@ argspec = [ Option "l" ["tolisp"] , Option "h" ["hlintOpt"] (ReqArg (\h opts -> opts { hlintOpts = h : hlintOpts opts }) "hlintOpt") "hint to be ignored" + , Option "g" ["ghcOpt"] + (ReqArg (\g opts -> opts { ghcOpts = g : ghcOpts opts }) "ghcOpt") + "extra GHC options" , Option "o" ["operators"] (NoArg (\opts -> opts { operators = True })) "print operators, too" diff --git a/Types.hs b/Types.hs index 4de4736..deff8e2 100644 --- a/Types.hs +++ b/Types.hs @@ -13,6 +13,7 @@ import GHC.Paths (libdir) data Options = Options { convert :: [String] -> String , hlintOpts :: [String] + , ghcOpts :: [String] , checkIncludes :: [String] , operators :: Bool , packageConfs :: [FilePath] diff --git a/elisp/ghc-flymake.el b/elisp/ghc-flymake.el index fd9c7f4..fb6cbf4 100644 --- a/elisp/ghc-flymake.el +++ b/elisp/ghc-flymake.el @@ -13,6 +13,7 @@ ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (defvar ghc-hlint-options nil "*Hlint options") +(defvar ghc-ghc-options nil "*GHC options") ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; @@ -45,18 +46,17 @@ (let ((after-save-hook nil)) (save-buffer)) (let ((file (file-name-nondirectory (buffer-file-name)))) - (list ghc-module-command (ghc-flymake-command file ghc-hlint-options)))) + (list ghc-module-command (ghc-flymake-command file)))) (defvar ghc-flymake-command nil) ;; nil: check, t: lint -(defun ghc-flymake-command (file opts) +(defun ghc-flymake-command (file) (if ghc-flymake-command - (let ((hopts (ghc-mapconcat (lambda (x) (list "-h" x)) opts))) + (let ((hopts (ghc-mapconcat (lambda (x) (list "-h" x)) ghc-hlint-options))) `(,@hopts "lint" ,file)) - (if (null ghc-flymake-check-includes) - (list "check" file) - (let ((includes (ghc-mapconcat (lambda (x) (list "-i" x)) ghc-flymake-check-includes))) - `("check" ,@includes ,file))))) + (let ((gopts (ghc-mapconcat (lambda (x) (list "-g" x)) ghc-ghc-options)) + (includes (ghc-mapconcat (lambda (x) (list "-i" x)) ghc-flymake-check-includes))) + `(,@gopts "check" ,@includes ,file)))) (defun ghc-flymake-toggle-command () (interactive)