Safe Haskell | None |
---|---|
Language | Haskell98 |
WARNING: This module represents the evolving second version of the HLint API. It will be deleted in favour of Language.Haskell.HLint3 in the next major version.
This module provides a way to apply HLint hints. As an example of approximating the hlint
experience:
(flags, classify, hint) <-autoSettings
Right m <-parseModuleEx
flags "MyFile.hs" Nothing print $applyHints
classify hint [m]
- applyHints :: [Classify] -> Hint -> [(Module SrcSpanInfo, [Comment])] -> [Idea]
- data Idea = Idea {
- ideaModule :: String
- ideaDecl :: String
- ideaSeverity :: Severity
- ideaHint :: String
- ideaSpan :: SrcSpan
- ideaFrom :: String
- ideaTo :: Maybe String
- ideaNote :: [Note]
- ideaRefactoring :: [Refactoring SrcSpan]
- data Severity
- data Note
- data Classify = Classify {}
- getHLintDataDir :: IO FilePath
- autoSettings :: IO (ParseFlags, [Classify], Hint)
- autoSettings' :: FilePath -> IO (ParseFlags, [Classify], Hint)
- findSettings :: FilePath -> FilePath -> Maybe String -> IO ([String], [Module SrcSpanInfo])
- readSettings :: Module SrcSpanInfo -> ([Classify], [HintRule])
- data Hint = Hint {
- hintModules :: [(Scope, Module SrcSpanInfo)] -> [Idea]
- hintModule :: Scope -> Module SrcSpanInfo -> [Idea]
- hintDecl :: Scope -> Module SrcSpanInfo -> Decl SrcSpanInfo -> [Idea]
- hintComment :: Comment -> [Idea]
- builtinHints :: [(String, Hint)]
- data HintRule = HintRule {}
- hintRules :: [HintRule] -> Hint
- data Scope
- scopeCreate :: Module SrcSpanInfo -> Scope
- scopeMatch :: (Scope, QName SrcSpanInfo) -> (Scope, QName SrcSpanInfo) -> Bool
- scopeMove :: (Scope, QName SrcSpanInfo) -> Scope -> QName SrcSpanInfo
- parseModuleEx :: ParseFlags -> FilePath -> Maybe String -> IO (Either ParseError (Module SrcSpanInfo, [Comment]))
- defaultParseFlags :: ParseFlags
- data ParseError = ParseError {}
- data ParseFlags = ParseFlags {}
- data CppFlags
- type Encoding = TextEncoding
- defaultEncoding :: Encoding
- readEncoding :: String -> IO Encoding
- useEncoding :: Handle -> Encoding -> IO ()
Documentation
applyHints :: [Classify] -> Hint -> [(Module SrcSpanInfo, [Comment])] -> [Idea] Source
Idea data type
An idea suggest by a Hint
.
Idea | |
|
How severe an issue is.
A note describing the impact of the replacement.
IncreasesLaziness | The replacement is increases laziness, for example replacing |
DecreasesLaziness | The replacement is decreases laziness, for example replacing |
RemovesError String | The replacement removes errors, for example replacing |
ValidInstance String String | The replacement assumes standard type class lemmas, a hint with the note |
Note String | An arbitrary note. |
Settings
How to classify an Idea
. If any matching field is ""
then it matches everything.
Classify | |
|
getHLintDataDir :: IO FilePath Source
Get the Cabal configured data directory of HLint
autoSettings :: IO (ParseFlags, [Classify], Hint) Source
The function produces a tuple containg ParseFlags
(for parseModuleEx
), and Classify
and Hint
for applyHints
.
It approximates the normal HLint configuration steps, roughly:
- Use
findSettings
to find and load the HLint settings files. - Use
readSettings
to interpret the settings files, producingHintRule
values (LHS ==> RHS
replacements) andClassify
values to assignSeverity
ratings to hints. - Use
builtinHints
andhintRules
to generate aHint
value. - Take all fixities from the
findSettings
modules and put them in theParseFlags
.
autoSettings' :: FilePath -> IO (ParseFlags, [Classify], Hint) Source
findSettings :: FilePath -> FilePath -> Maybe String -> IO ([String], [Module SrcSpanInfo]) Source
Given the data directory (where the hlint
data files reside, see getHLintDataDir
),
and a filename to read, and optionally that file's contents, produce a pair containing:
- Builtin hints to use, e.g.
List
, which should be resolved usingbuiltinHints
. - A list of modules containing hints, suitable for processing with
readSettings
.
Any parse failures will result in an exception.
readSettings :: Module SrcSpanInfo -> ([Classify], [HintRule]) Source
Hints
Functions to generate hints, combined using the Monoid
instance.
Hint | |
|
builtinHints :: [(String, Hint)] Source
A list of builtin hints, currently including entries such as "List"
and "Bracket"
.
A LHS ==> RHS
style hint rule.
HintRule | |
|
Scopes
Data type representing the modules in scope within a module.
Created with scopeCreate
and queried with scopeMatch
and scopeMove
.
Note that the mempty
Scope
is not equivalent to scopeCreate
on an empty module,
due to the implicit import of Prelude
.
scopeCreate :: Module SrcSpanInfo -> Scope Source
Create a Scope
value from a module, based on the modules imports.
scopeMatch :: (Scope, QName SrcSpanInfo) -> (Scope, QName SrcSpanInfo) -> Bool Source
Given a two names in scopes, could they possibly refer to the same thing. This property is reflexive.
scopeMove :: (Scope, QName SrcSpanInfo) -> Scope -> QName SrcSpanInfo Source
Given a name in a scope, and a new scope, create a name for the new scope that will refer to the same thing. If the resulting name is ambiguous, it picks a plausible candidate.
Haskell-src-exts
parseModuleEx :: ParseFlags -> FilePath -> Maybe String -> IO (Either ParseError (Module SrcSpanInfo, [Comment])) Source
Parse a Haskell module. Applies the C pre processor, and uses best-guess fixity resolution if there are ambiguities.
The filename -
is treated as stdin
. Requires some flags (often defaultParseFlags
), the filename, and optionally the contents of that file.
defaultParseFlags :: ParseFlags Source
Default value for ParseFlags
.
data ParseError Source
A parse error from parseModuleEx
.
ParseError | |
|
What C pre processor should be used.
NoCpp | No pre processing is done. |
CppSimple | Lines prefixed with |
Cpphs CpphsOptions | The |
File encodings
type Encoding = TextEncoding Source
An Encoding
represents how characters are stored in a file. Created with
defaultEncoding
or readEncoding
and used with useEncoding
.
defaultEncoding :: Encoding Source
The system default encoding.
readEncoding :: String -> IO Encoding Source
Create an encoding from a string, or throw an error if the encoding is not known.
Accepts many encodings including locale
, utf-8
and all those supported by the
GHC mkTextEncoding
function.