mirror of
https://github.com/joshuaclayton/unused.git
synced 2024-09-11 04:45:28 +03:00
Initial Haskell support for allowed tokens
This is based off of tags generated by Hasktags: https://hackage.haskell.org/package/hasktags
This commit is contained in:
parent
bcbc1b6462
commit
3851c98d59
@ -3,7 +3,7 @@ module Unused.LikelihoodCalculator
|
|||||||
) where
|
) where
|
||||||
|
|
||||||
import Unused.Types
|
import Unused.Types
|
||||||
import Unused.ResponseFilter (railsSingleOkay, elixirSingleOkay)
|
import Unused.ResponseFilter (railsSingleOkay, elixirSingleOkay, haskellSingleOkay)
|
||||||
|
|
||||||
calculateLikelihood :: TermResults -> TermResults
|
calculateLikelihood :: TermResults -> TermResults
|
||||||
calculateLikelihood r =
|
calculateLikelihood r =
|
||||||
@ -14,6 +14,7 @@ calculateLikelihood r =
|
|||||||
newLikelihood
|
newLikelihood
|
||||||
| railsSingleOkay r = (Low, "a class, module, or migration that often occurs in only one file")
|
| railsSingleOkay r = (Low, "a class, module, or migration that often occurs in only one file")
|
||||||
| elixirSingleOkay r = (Low, "a class, module, or migration that often occurs in only one file")
|
| elixirSingleOkay r = (Low, "a class, module, or migration that often occurs in only one file")
|
||||||
|
| haskellSingleOkay r = (Low, "a module, function, or special case that often occurs in only one file")
|
||||||
| singleNonTestUsage r && testsExist r = (High, "only the definition and corresponding tests exist")
|
| singleNonTestUsage r && testsExist r = (High, "only the definition and corresponding tests exist")
|
||||||
| doubleNonTestUsage r && testsExist r = (Medium, "only the definition and one other use, along with tests, exists")
|
| doubleNonTestUsage r && testsExist r = (Medium, "only the definition and one other use, along with tests, exists")
|
||||||
| totalScore < 2 = (High, "used once")
|
| totalScore < 2 = (High, "used once")
|
||||||
|
@ -6,6 +6,7 @@ module Unused.ResponseFilter
|
|||||||
, isClassOrModule
|
, isClassOrModule
|
||||||
, railsSingleOkay
|
, railsSingleOkay
|
||||||
, elixirSingleOkay
|
, elixirSingleOkay
|
||||||
|
, haskellSingleOkay
|
||||||
, updateMatches
|
, updateMatches
|
||||||
) where
|
) where
|
||||||
|
|
||||||
@ -57,6 +58,14 @@ elixirSingleOkay r =
|
|||||||
allowedTerms = ["Mixfile", "__using__"]
|
allowedTerms = ["Mixfile", "__using__"]
|
||||||
paths = tmPath <$> trMatches r
|
paths = tmPath <$> trMatches r
|
||||||
|
|
||||||
|
haskellSingleOkay :: TermResults -> Bool
|
||||||
|
haskellSingleOkay r =
|
||||||
|
isAllowedTerm r allowedTerms || cabalFile
|
||||||
|
where
|
||||||
|
allowedTerms = ["instance"]
|
||||||
|
cabalFile = any (matchRegex "^*.cabal$") paths
|
||||||
|
paths = tmPath <$> trMatches r
|
||||||
|
|
||||||
updateMatches :: ([TermMatch] -> [TermMatch]) -> TermMatchSet -> TermMatchSet
|
updateMatches :: ([TermMatch] -> [TermMatch]) -> TermMatchSet -> TermMatchSet
|
||||||
updateMatches fm =
|
updateMatches fm =
|
||||||
Map.map (updateMatchesWith $ fm . trMatches)
|
Map.map (updateMatchesWith $ fm . trMatches)
|
||||||
|
@ -102,3 +102,16 @@ spec = parallel $ do
|
|||||||
let result = resultsFromMatches [appToken, testToken]
|
let result = resultsFromMatches [appToken, testToken]
|
||||||
|
|
||||||
elixirSingleOkay result `shouldBe` True
|
elixirSingleOkay result `shouldBe` True
|
||||||
|
|
||||||
|
describe "haskellSingleOkay" $ do
|
||||||
|
it "allows instance" $ do
|
||||||
|
let match = TermMatch "instance" "src/Lib/Types.hs" 1
|
||||||
|
let result = resultsFromMatches [match]
|
||||||
|
|
||||||
|
haskellSingleOkay result `shouldBe` True
|
||||||
|
|
||||||
|
it "allows items in the *.cabal file" $ do
|
||||||
|
let match = TermMatch "Lib.SomethingSpec" "lib.cabal" 1
|
||||||
|
let result = resultsFromMatches [match]
|
||||||
|
|
||||||
|
haskellSingleOkay result `shouldBe` True
|
||||||
|
Loading…
Reference in New Issue
Block a user