mirror of
https://github.com/haskell/haskell-language-server.git
synced 2024-08-17 04:20:37 +03:00
The plugin was implemented by calling "load" which circumvents all of HLSs caching mechanisms for interface files and linkables. Instead we should work like the other typechecking functions which get all the stuff we need using HLS rules and setup the HscEnv with all the state in the right places. The key part to this is setting up all the HPT modules with linkables if they are depenedencies of the module we are trying to run a function from. - ban load functions from GHC driver - Enable CI for hls-eval-plugin and fix a bug due to clearing of mi_globals
246 lines
6.5 KiB
YAML
246 lines
6.5 KiB
YAML
# HLint configuration file
|
|
# https://github.com/ndmitchell/hlint
|
|
##########################
|
|
|
|
# To run HLint do:
|
|
# $ hlint --git -j4
|
|
|
|
# Warnings currently triggered by our code
|
|
- ignore: {name: "Use <$>"}
|
|
- ignore: {name: "Use :"}
|
|
- ignore: {name: "Redundant do"}
|
|
- ignore: {name: "Avoid lambda"}
|
|
- ignore: {name: "Use newtype instead of data"}
|
|
- ignore: {name: "Use unless"}
|
|
- ignore: {name: "Move brackets to avoid $"}
|
|
- ignore: {name: "Eta reduce"}
|
|
- ignore: {name: "Parse error"}
|
|
- ignore: {name: "Reduce duplication"}
|
|
- ignore: {name: "Use ++"}
|
|
- ignore: {name: "Use $>"}
|
|
- ignore: {name: "Use section"}
|
|
- ignore: {name: "Use record patterns"}
|
|
- ignore: {name: "Use camelCase"}
|
|
- ignore: {name: "Use uncurry"}
|
|
- ignore: {name: "Avoid lambda using `infix`"}
|
|
- ignore: {name: "Replace case with fromMaybe"}
|
|
|
|
# Gives at least one suggestion we don't like.
|
|
- ignore: {name: "Use <=<"}
|
|
- ignore: {name: "Use zipFrom"}
|
|
- ignore: {name: "Use zipWithFrom"}
|
|
|
|
# We are using the "redundant" return/pure to assign a name. We do not want to
|
|
# delete it. In particular, this is not an improvement:
|
|
# Found:
|
|
# do options <- somethingComplicated
|
|
# pure options
|
|
# Perhaps:
|
|
# do somethingComplicated
|
|
- ignore: {name: "Redundant return"}
|
|
- ignore: {name: "Redundant pure"}
|
|
|
|
# Off by default hints we like
|
|
- warn: {name: Use module export list}
|
|
|
|
# Condemn nub and friends
|
|
- warn: {lhs: nub (sort x), rhs: Data.List.Extra.nubSort x}
|
|
- warn: {lhs: nub, rhs: Data.List.Extra.nubOrd}
|
|
- warn: {lhs: nubBy, rhs: Data.List.Extra.nubOrdBy}
|
|
- warn: {lhs: Data.List.Extra.nubOn, rhs: Data.List.Extra.nubOrdOn}
|
|
|
|
- functions:
|
|
# Things that are unsafe in Haskell base library
|
|
- name: unsafePerformIO
|
|
within:
|
|
- Development.IDE.Core.Shake
|
|
- Development.IDE.GHC.Util
|
|
- Development.IDE.Core.FileStore
|
|
- Development.IDE.Plugin.CodeAction.Util
|
|
- Development.IDE.Graph.Internal.Database
|
|
- Development.IDE.Graph.Internal.Paths
|
|
- Development.IDE.Graph.Internal.Profile
|
|
- Development.IDE.Graph.Internal.Types
|
|
- Ide.Types
|
|
- Test.Hls
|
|
- Test.Hls.Command
|
|
- Wingman.Debug
|
|
- Wingman.Types
|
|
- AutoTupleSpec
|
|
- name: unsafeInterleaveIO
|
|
within:
|
|
- Development.IDE.LSP.LanguageServer
|
|
- {name: unsafeDupablePerformIO, within: []}
|
|
- name: unsafeCoerce
|
|
within:
|
|
- Ide.Plugin.Eval.Code
|
|
- Development.IDE.Core.Compile
|
|
- Development.IDE.Types.Shake
|
|
- Wingman.Judgements.SYB
|
|
- Ide.Plugin.Properties
|
|
|
|
# Things that are a bit dangerous in the GHC API
|
|
- name: nameModule
|
|
within:
|
|
- Development.IDE.GHC.CoreFile
|
|
- Ide.Plugin.CallHierarchy.Internal
|
|
- Ide.Plugin.Rename
|
|
- Compat.HieBin
|
|
|
|
# Partial functions
|
|
|
|
# We need to check fucntions which
|
|
# are typically exported multiple ways under both names,
|
|
# see https://github.com/ndmitchell/hlint/issues/1389
|
|
- name: [Prelude.head, Data.List.head]
|
|
within:
|
|
- Main
|
|
- Experiments
|
|
- Development.Benchmark.Rules
|
|
- Development.IDE.Plugin.CodeAction
|
|
- Development.IDE.Plugin.Completions
|
|
- Development.IDE.Plugin.CodeAction.ExactPrint
|
|
- Development.IDE.Spans.Documentation
|
|
- Development.IDE.Session
|
|
- Ide.Plugin.CallHierarchy.Internal
|
|
- Ide.Plugin.Eval.Code
|
|
- Ide.Plugin.Eval.Util
|
|
- Ide.Plugin.Floskell
|
|
- Ide.Plugin.ModuleName
|
|
- Ide.Plugin.Rename
|
|
- Ide.Plugin.Class.ExactPrint
|
|
- TExpectedActual
|
|
- TRigidType
|
|
- TRigidType2
|
|
- RightToLeftFixities
|
|
- Typeclass
|
|
- Wingman.Judgements
|
|
- Wingman.Machinery
|
|
- Wingman.Tactics
|
|
|
|
- name: [Prelude.tail, Data.List.tail]
|
|
within:
|
|
- Main
|
|
- Development.Benchmark.Rules
|
|
- Development.IDE.Plugin.CodeAction
|
|
- Development.IDE.Plugin.CodeAction.ExactPrint
|
|
- Development.IDE.Session
|
|
- UnificationSpec
|
|
|
|
- name: [Prelude.last, Data.List.last]
|
|
within:
|
|
- Main
|
|
- Development.IDE.Plugin.CodeAction
|
|
- Development.IDE.Plugin.CodeAction.ExactPrint
|
|
- Development.IDE.Spans.Common
|
|
- Development.IDE.Graph.Internal.Types
|
|
- Ide.PluginUtils
|
|
- Ide.Plugin.Eval.Parse.Comments
|
|
- Ide.Plugin.Eval.CodeLens
|
|
|
|
- name: [Prelude.init, Data.List.init]
|
|
within:
|
|
- Main
|
|
- Development.IDE.Spans.Common
|
|
- Ide.PluginUtils
|
|
- Wingman.Metaprogramming.Parser
|
|
- Development.Benchmark.Rules
|
|
- ErrorGivenPartialSignature
|
|
|
|
- name: Data.List.foldl1'
|
|
within: []
|
|
|
|
- name: Data.List.foldr1'
|
|
within: []
|
|
|
|
- name: ["Prelude.!!", "Data.List.!!"]
|
|
within:
|
|
- Main
|
|
- Experiments
|
|
- FunctionalCodeAction
|
|
- Development.IDE.Plugin.CodeAction
|
|
- Development.IDE.Plugin.Completions.Logic
|
|
- Development.IDE.Spans.Documentation
|
|
- TErrorGivenPartialSignature
|
|
- Wingman.CaseSplit
|
|
- Wingman.Simplify
|
|
|
|
- name: Data.Text.head
|
|
within:
|
|
- Development.IDE.Plugin.CodeAction
|
|
- Development.IDE.Plugin.Completions.Logic
|
|
|
|
- name: Data.Foldable.foldl1
|
|
within: []
|
|
|
|
- name: Data.Foldable.foldr1
|
|
within:
|
|
- Wingman.Tactics
|
|
|
|
- name: Data.Maybe.fromJust
|
|
within:
|
|
- Experiments
|
|
- Main
|
|
- MultipleImports
|
|
- Progress
|
|
- Utils
|
|
- Development.IDE.Core.Compile
|
|
- Development.IDE.Core.Rules
|
|
- Development.IDE.Core.Shake
|
|
- Development.IDE.Plugin.Completions
|
|
- Development.IDE.Plugin.CodeAction.ExactPrint
|
|
- Development.IDE.Plugin.CodeAction
|
|
- Development.IDE.Test
|
|
- Development.IDE.Graph.Internal.Profile
|
|
- Development.IDE.Graph.Internal.Rules
|
|
- Ide.Plugin.Class
|
|
|
|
- name: "Data.Map.!"
|
|
within:
|
|
- Wingman.LanguageServer
|
|
|
|
- name: "Data.IntMap.!"
|
|
within: []
|
|
|
|
- name: "Data.Vector.!"
|
|
within: []
|
|
|
|
- name: "GHC.Arr.!"
|
|
within: []
|
|
|
|
# We do not want to use functions from the
|
|
# GHC driver. Instead use hls rules to construct
|
|
# an appropriate GHC session
|
|
- name: "load"
|
|
within: []
|
|
- name: "load'"
|
|
within: []
|
|
- name: "loadWithCache"
|
|
within: []
|
|
|
|
# Tracing functions
|
|
# We ban an explicit list rather than the
|
|
# Debug.Trace, because that module also
|
|
# includes the eventlog tracing functions,
|
|
# which are legitimate to use.
|
|
- name:
|
|
- Debug.Trace.trace
|
|
- Debug.Trace.traceId
|
|
- Debug.Trace.traceShow
|
|
- Debug.Trace.traceShowId
|
|
- Debug.Trace.traceStack
|
|
- Debug.Trace.traceIO
|
|
- Debug.Trace.traceM
|
|
- Debug.Trace.traceShowM
|
|
- Debug.Trace.putTraceMsg
|
|
within:
|
|
- Development.IDE.Core.Compile
|
|
- Development.IDE.Graph.Internal.Database
|
|
- Development.IDE.GHC.Util
|
|
- Development.IDE.Plugin.CodeAction.Util
|
|
- Wingman.Debug
|
|
|
|
# We really do not want novel usages of restricted functions, and mere
|
|
# Warning is not enough to prevent those consistently; you need a build failure.
|
|
- error: {name: Avoid restricted function}
|