Skip to content
This repository was archived by the owner on Apr 1, 2025. It is now read-only.

Commit 67bcc3c

Browse files
committed
Use state to cache line and counting algorithms
1 parent 4f4e215 commit 67bcc3c

11 files changed

Lines changed: 169 additions & 20 deletions

File tree

semantic-codeql/src/Language/CodeQL/Tags.hs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ import AST.Token
1616
import AST.Traversable1
1717
import Control.Effect.Reader
1818
import Control.Effect.Writer
19+
import Control.Effect.State
1920
import Data.Foldable (for_)
2021
import qualified Language.CodeQL.AST as CodeQL
2122
import Proto.Semantic as P
@@ -26,12 +27,14 @@ import qualified Tags.Tagging.Precise as Tags
2627
class ToTags t where
2728
tags ::
2829
( Has (Reader Source) sig m,
30+
Has (State Tags.LineIndices) sig m,
2931
Has (Writer Tags.Tags) sig m
3032
) =>
3133
t Loc ->
3234
m ()
3335
default tags ::
3436
( Has (Reader Source) sig m,
37+
Has (State Tags.LineIndices) sig m,
3538
Has (Writer Tags.Tags) sig m,
3639
Traversable1 ToTags t
3740
) =>
@@ -47,6 +50,7 @@ instance (ToTags l, ToTags r) => ToTags (l :+: r) where
4750

4851
gtags ::
4952
( Has (Reader Source) sig m,
53+
Has (State Tags.LineIndices) sig m,
5054
Has (Writer Tags.Tags) sig m,
5155
Traversable1 ToTags t
5256
) =>

semantic-go/src/Language/Go/Tags.hs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ import AST.Token
1616
import AST.Traversable1
1717
import Control.Effect.Reader
1818
import Control.Effect.Writer
19+
import Control.Effect.State
1920
import qualified Language.Go.AST as Go
2021
import Proto.Semantic as P
2122
import Source.Loc
@@ -25,12 +26,14 @@ import qualified Tags.Tagging.Precise as Tags
2526
class ToTags t where
2627
tags ::
2728
( Has (Reader Source) sig m,
29+
Has (State Tags.LineIndices) sig m,
2830
Has (Writer Tags.Tags) sig m
2931
) =>
3032
t Loc ->
3133
m ()
3234
default tags ::
3335
( Has (Reader Source) sig m,
36+
Has (State Tags.LineIndices) sig m,
3437
Has (Writer Tags.Tags) sig m,
3538
Traversable1 ToTags t
3639
) =>
@@ -78,6 +81,7 @@ instance ToTags (Token sym n) where tags _ = pure ()
7881

7982
gtags ::
8083
( Has (Reader Source) sig m,
84+
Has (State Tags.LineIndices) sig m,
8185
Has (Writer Tags.Tags) sig m,
8286
Traversable1 ToTags t
8387
) =>

semantic-java/src/Language/Java/Tags.hs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ import AST.Token
1616
import AST.Traversable1
1717
import Control.Effect.Reader
1818
import Control.Effect.Writer
19+
import Control.Effect.State
1920
import Data.Foldable
2021
import qualified Language.Java.AST as Java
2122
import Proto.Semantic as P
@@ -27,12 +28,14 @@ import qualified Tags.Tagging.Precise as Tags
2728
class ToTags t where
2829
tags ::
2930
( Has (Reader Source) sig m,
31+
Has (State Tags.LineIndices) sig m,
3032
Has (Writer Tags.Tags) sig m
3133
) =>
3234
t Loc ->
3335
m ()
3436
default tags ::
3537
( Has (Reader Source) sig m,
38+
Has (State Tags.LineIndices) sig m,
3639
Has (Writer Tags.Tags) sig m,
3740
Traversable1 ToTags t
3841
) =>
@@ -108,6 +111,7 @@ instance ToTags Java.InterfaceTypeList where
108111

109112
gtags ::
110113
( Has (Reader Source) sig m,
114+
Has (State Tags.LineIndices) sig m,
111115
Has (Writer Tags.Tags) sig m,
112116
Traversable1 ToTags t
113117
) =>

semantic-php/src/Language/PHP/Tags.hs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ import AST.Token
1717
import AST.Traversable1
1818
import Control.Effect.Reader
1919
import Control.Effect.Writer
20+
import Control.Effect.State
2021
import qualified Language.PHP.AST as PHP
2122
import Proto.Semantic as P
2223
import Source.Loc
@@ -26,12 +27,14 @@ import qualified Tags.Tagging.Precise as Tags
2627
class ToTags t where
2728
tags ::
2829
( Has (Reader Source) sig m,
30+
Has (State Tags.LineIndices) sig m,
2931
Has (Writer Tags.Tags) sig m
3032
) =>
3133
t Loc ->
3234
m ()
3335
default tags ::
3436
( Has (Reader Source) sig m,
37+
Has (State Tags.LineIndices) sig m,
3538
Has (Writer Tags.Tags) sig m,
3639
Traversable1 ToTags t
3740
) =>
@@ -47,6 +50,7 @@ instance (ToTags l, ToTags r) => ToTags (l :+: r) where
4750

4851
gtags ::
4952
( Has (Reader Source) sig m,
53+
Has (State Tags.LineIndices) sig m,
5054
Has (Writer Tags.Tags) sig m,
5155
Traversable1 ToTags t
5256
) =>

semantic-python/src/Language/Python/Tags.hs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ import AST.Token
1717
import AST.Traversable1
1818
import Control.Effect.Reader
1919
import Control.Effect.Writer
20+
import Control.Effect.State
2021
import Data.Foldable
2122
import Data.Text as Text
2223
import qualified Language.Python.AST as Py
@@ -29,12 +30,14 @@ import qualified Tags.Tagging.Precise as Tags
2930
class ToTags t where
3031
tags ::
3132
( Has (Reader Source) sig m,
33+
Has (State Tags.LineIndices) sig m,
3234
Has (Writer Tags.Tags) sig m
3335
) =>
3436
t Loc ->
3537
m ()
3638
default tags ::
3739
( Has (Reader Source) sig m,
40+
Has (State Tags.LineIndices) sig m,
3841
Has (Writer Tags.Tags) sig m,
3942
Traversable1 ToTags t
4043
) =>
@@ -50,6 +53,7 @@ instance ToTags (Token sym n) where tags _ = pure ()
5053

5154
keywordFunctionCall ::
5255
( Has (Reader Source) sig m,
56+
Has (State Tags.LineIndices) sig m,
5357
Has (Writer Tags.Tags) sig m,
5458
Traversable1 ToTags t
5559
) =>
@@ -129,6 +133,7 @@ instance ToTags Py.Call where
129133

130134
gtags ::
131135
( Has (Reader Source) sig m,
136+
Has (State Tags.LineIndices) sig m,
132137
Has (Writer Tags.Tags) sig m,
133138
Traversable1 ToTags t
134139
) =>

semantic-ruby/src/Language/Ruby/Tags.hs

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,13 +34,15 @@ import qualified Tags.Tagging.Precise as Tags
3434
class ToTags t where
3535
tags ::
3636
( Has (Reader Source) sig m,
37+
Has (State Tags.LineIndices) sig m,
3738
Has (Writer Tags.Tags) sig m,
3839
Has (State [Text]) sig m
3940
) =>
4041
t Loc ->
4142
m ()
4243
default tags ::
4344
( Has (Reader Source) sig m,
45+
Has (State Tags.LineIndices) sig m,
4446
Has (Writer Tags.Tags) sig m,
4547
Has (State [Text]) sig m,
4648
Traversable1 ToTags t
@@ -72,7 +74,7 @@ nameBlacklist =
7274
"lambda"
7375
]
7476

75-
yieldTag :: (Has (Reader Source) sig m, Has (Writer Tags.Tags) sig m) => Text -> P.SyntaxType -> P.NodeType -> Loc -> Range -> m ()
77+
yieldTag :: (Has (Reader Source) sig m, Has (State Tags.LineIndices) sig m, Has (Writer Tags.Tags) sig m) => Text -> P.SyntaxType -> P.NodeType -> Loc -> Range -> m ()
7678
yieldTag name P.CALL _ _ _ | name `elem` nameBlacklist = pure ()
7779
yieldTag name kind ty loc srcLineRange = Tags.yield name kind ty loc srcLineRange
7880

@@ -137,6 +139,7 @@ instance ToTags Rb.Module where
137139
yieldMethodNameTag ::
138140
( Has (State [Text]) sig m,
139141
Has (Reader Source) sig m,
142+
Has (State Tags.LineIndices) sig m,
140143
Has (Writer Tags.Tags) sig m,
141144
Traversable1 ToTags t
142145
) =>
@@ -330,6 +333,7 @@ instance ToTags Rb.Undef where
330333

331334
introduceLocals ::
332335
( Has (Reader Source) sig m,
336+
Has (State Tags.LineIndices) sig m,
333337
Has (Writer Tags.Tags) sig m,
334338
Has (State [Text]) sig m
335339
) =>
@@ -391,6 +395,7 @@ instance ToTags Rb.OperatorAssignment where
391395

392396
gtags ::
393397
( Has (Reader Source) sig m,
398+
Has (State Tags.LineIndices) sig m,
394399
Has (Writer Tags.Tags) sig m,
395400
Has (State [Text]) sig m,
396401
Traversable1 ToTags t

semantic-tags/src/Tags/Tag.hs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,19 @@
1+
{-# LANGUAGE GeneralisedNewtypeDeriving #-}
12
module Tags.Tag (Tag (..), UTF16CodeUnitSpan(..), OneIndexedSpan(..)) where
23

34
import Data.Text (Text)
45
import qualified Proto.Semantic as P
56
import Source.Loc
7+
import Control.DeepSeq
68

79
-- | A 0-indxed Span where the column offset units are utf-16 code units (2
810
-- bytes), suitable for the LSP (Language Server Protocol) specification.
911
newtype UTF16CodeUnitSpan = UTF16CodeUnitSpan { unUTF16CodeUnitSpan :: Span }
10-
deriving (Eq, Show)
12+
deriving (Eq, Show, NFData)
1113

1214
-- A 1-indexed Span where the units are bytes.
1315
newtype OneIndexedSpan = OneIndexedSpan { unOneIndexedSpan :: Span }
14-
deriving (Eq, Show)
16+
deriving (Eq, Show, NFData)
1517

1618
data Tag
1719
= Tag

0 commit comments

Comments
 (0)