1
1
mirror of https://github.com/github/semantic.git synced 2024-12-23 23:11:50 +03:00

Merge branch 'master' into codegen-cleanup

This commit is contained in:
Ayman Nadeem 2020-06-08 10:57:49 -04:00
commit 41d8ebb3de
13 changed files with 241 additions and 175 deletions

View File

@ -32,7 +32,12 @@ jobs:
name: Cache Cabal artifacts
with:
path: dist-cache
key: ${{ runner.os }}-${{ matrix.ghc }}-${{ matrix.cabal }}-cabal-cache
key: ${{ runner.os }}-${{ matrix.ghc }}-${{ matrix.cabal }}-cabal-cache-${{ hashFiles('**/*.cabal') }}
restore-keys: |
${{ runner.os }}-${{ matrix.ghc }}-${{ matrix.cabal }}-cabal-cache-
${{ runner.os }}-${{ matrix.ghc }}-${{ matrix.cabal }}-
${{ runner.os }}-${{ matrix.ghc }}-
${{ runner.os }}-
- name: Get cabal-cache
run: |
@ -45,8 +50,7 @@ jobs:
cabal v2-configure --project-file=cabal.project.ci --disable-optimization --enable-benchmarks --enable-tests --write-ghc-environment-files=always -j2
- name: Restore from cache
if: steps.cache-cabal.outputs.cache-hit == 'true'
run: ./cabal-cache sync-from-archive --threads=2 --archive-uri=dist-cache
run: ./cabal-cache sync-from-archive --threads=2 --archive-uri=dist-cache || true
- name: Build & test
run: |

View File

@ -1,5 +1,5 @@
# Put protoc and twirp tooling in its own image
FROM haskell:8.8.3 as haskell
FROM haskell:8.8.1 as haskell
RUN cabal v2-update && \
cabal v2-install proto-lens-protoc
RUN which proto-lens-protoc
@ -17,12 +17,12 @@ RUN go get github.com/golang/protobuf/proto && \
COPY --from=haskell /root/.cabal/bin/proto-lens-protoc /usr/local/bin/proto-lens-protoc
# Bit of a hack so that proto-lens-protoc actually runs
COPY --from=haskell /opt/ghc/8.8.3/lib/ghc-8.8.3/* /opt/ghc/8.8.3/lib/ghc-8.8.3/
COPY --from=haskell /opt/ghc/8.8.1/lib/ghc-8.8.1/* /opt/ghc/8.8.1/lib/ghc-8.8.1/
ENTRYPOINT ["/protobuf/bin/protoc", "-I/protobuf", "--plugin=protoc-gen-haskell=/usr/local/bin/proto-lens-protoc"]
# Build semantic
FROM haskell:8.8.3 as build
FROM haskell:8.8.1 as build
WORKDIR /build
# Build all of semantic

View File

@ -128,6 +128,7 @@ message Symbol {
string line = 3;
Span span = 4;
Docstring docs = 5;
NodeType node_type = 6;
}
message Docstring {
@ -152,19 +153,20 @@ message StackGraphFile {
repeated ParseError errors = 5;
}
enum NodeType {
ROOT_SCOPE = 0;
JUMP_TO_SCOPE = 1;
EXPORTED_SCOPE = 2;
DEFINITION = 3;
REFERENCE = 4;
}
message StackGraphNode {
int64 id = 1;
string name = 2;
string line = 3;
string kind = 4;
Span span = 5;
enum NodeType {
ROOT_SCOPE = 0;
JUMP_TO_SCOPE = 1;
EXPORTED_SCOPE = 2;
DEFINITION = 3;
REFERENCE = 4;
}
NodeType node_type = 6;
}

View File

@ -10,6 +10,7 @@ module AST.TestHelpers
import Control.Applicative
import Control.Monad
import Data.Attoparsec.ByteString.Char8
import Data.Attoparsec.ByteString.Char8 as Attoparsec
import Data.ByteString (ByteString, readFile)
import Data.ByteString.Char8 (pack, unpack)
import Data.Either
@ -76,7 +77,7 @@ exampleParser = do
code <- manyTill anyChar outputSepParser
_out <- manyTill anyChar (choice [endOfInput, char '=' $> ()])
pure (CorpusExample name (pack code))
where outputSepParser = choice [string "\n---\n", string "\r\n---\r\n"]
where outputSepParser = (Attoparsec.take 3) *> (Attoparsec.char '-') *> endOfLine
exampleNameParser :: Parser String
exampleNameParser = do

View File

@ -17,7 +17,7 @@ main
>>= defaultMain . tests
where
parse = parseByteString @Rust.SourceFile @() tree_sitter_rust
excludeMacrosCorpus l = liftM (filter (f "expressions") ) $ liftM (filter (f "macros") ) l
excludeMacrosCorpus l = liftM (filter (f "expressions") ) l
where f p bn = p /= (Path.toString . Path.takeBaseName) bn
tests :: [TestTree] -> TestTree

View File

@ -2,14 +2,12 @@ module Data.Abstract.Path
( dropRelativePrefix
, joinPaths
, stripQuotes
, joinUntypedPaths
) where
import Data.Text (Text)
import qualified Data.Text as T
import System.FilePath.Posix
import qualified System.Path as Path
import System.Path.PartClass (FileDir)
import System.Path.PartClass (FileDir(..))
-- | Join two paths a and b. Handles walking up relative directories in b. e.g.
--
@ -17,23 +15,30 @@ import System.Path.PartClass (FileDir)
-- joinPaths "a/b" "./c" == "a/b/c"
--
-- Walking beyond the beginning of a just stops when you get to the root of a.
joinUntypedPaths :: FilePath -> FilePath -> FilePath
joinUntypedPaths a b = let bs = splitPath (normalise b)
n = length (filter (== "../") bs)
in normalise $ walkup n a </> joinPath (drop n bs)
where
walkup 0 str = str
walkup n str = walkup (pred n) (takeDirectory str)
-- | Join two paths a and b. Handles walking up relative directories in b. e.g.
--
-- joinPaths "a/b" "../c" == "a/c"
-- joinPaths "a/b" "./c" == "a/b/c"
--
-- Walking beyond the beginning of a just stops when you get to the root of a.
-- TODO: Rewrite it with pathtype
joinPaths :: FileDir fd => Path.AbsRelDir -> Path.Rel fd -> Path.AbsRel fd
joinPaths x y= Path.path $ joinUntypedPaths (Path.toString x) (Path.toString y)
joinPaths = runJP $ switchFileDir (JP joinFilePaths) (JP joinDirPaths) (JP joinFDPaths)
newtype JP fd = JP {runJP :: Path.AbsRelDir -> Path.Rel fd -> Path.AbsRel fd }
joinDirPaths :: Path.AbsRelDir -> Path.RelDir -> Path.AbsRelDir
joinDirPaths x y = result isAbs
where
(isAbs, rels, _) = Path.splitPath (Path.normalise $ x Path.</> y)
(_, fRel) = foldr go (0, Path.currentDir) rels
go :: Path.RelDir -> (Integer, Path.RelDir) -> (Integer, Path.RelDir)
go rel (i, r)
| rel == Path.rel ".." = (i + 1, r)
| i == 0 = (0, rel Path.</> r)
| otherwise = (i - 1, r)
result True = Path.toAbsRel $ Path.rootDir Path.</> fRel
result False = Path.toAbsRel $ fRel
joinFilePaths :: Path.AbsRelDir -> Path.RelFile -> Path.AbsRelFile
joinFilePaths x y = let (d, f) = Path.splitFileName y in joinDirPaths x d Path.</> f
joinFDPaths :: Path.AbsRelDir -> Path.RelFileDir -> Path.AbsRelFileDir
joinFDPaths x = Path.toFileDir . joinDirPaths x . Path.dirFromFileDir
stripQuotes :: Text -> Text

View File

@ -9,13 +9,11 @@ module Proto.Semantic (
DiffTreeVertex'DiffTerm(..), _DiffTreeVertex'Deleted,
_DiffTreeVertex'Inserted, _DiffTreeVertex'Replaced,
_DiffTreeVertex'Merged, Docstring(), File(), InsertedTerm(),
MergedTerm(), ParseError(), ParseTreeFileGraph(),
ParseTreeGraphResponse(), ParseTreeRequest(),
ParseTreeSymbolResponse(), PingRequest(), PingResponse(),
Position(), ReplacedTerm(), Span(), StackGraphFile(),
StackGraphNode(), StackGraphNode'NodeType(..),
StackGraphNode'NodeType(),
StackGraphNode'NodeType'UnrecognizedValue, StackGraphPath(),
MergedTerm(), NodeType(..), NodeType(), NodeType'UnrecognizedValue,
ParseError(), ParseTreeFileGraph(), ParseTreeGraphResponse(),
ParseTreeRequest(), ParseTreeSymbolResponse(), PingRequest(),
PingResponse(), Position(), ReplacedTerm(), Span(),
StackGraphFile(), StackGraphNode(), StackGraphPath(),
StackGraphRequest(), StackGraphResponse(), Symbol(), TermEdge(),
TermVertex()
) where
@ -2301,6 +2299,86 @@ instance Control.DeepSeq.NFData MergedTerm where
(Control.DeepSeq.deepseq
(_MergedTerm'beforeSpan x__)
(Control.DeepSeq.deepseq (_MergedTerm'afterSpan x__) ())))
newtype NodeType'UnrecognizedValue
= NodeType'UnrecognizedValue Data.Int.Int32
deriving (Prelude.Eq, Prelude.Ord, Prelude.Show)
data NodeType
= ROOT_SCOPE |
JUMP_TO_SCOPE |
EXPORTED_SCOPE |
DEFINITION |
REFERENCE |
NodeType'Unrecognized !NodeType'UnrecognizedValue
deriving (Prelude.Show, Prelude.Eq, Prelude.Ord)
instance Data.ProtoLens.MessageEnum NodeType where
maybeToEnum 0 = Prelude.Just ROOT_SCOPE
maybeToEnum 1 = Prelude.Just JUMP_TO_SCOPE
maybeToEnum 2 = Prelude.Just EXPORTED_SCOPE
maybeToEnum 3 = Prelude.Just DEFINITION
maybeToEnum 4 = Prelude.Just REFERENCE
maybeToEnum k
= Prelude.Just
(NodeType'Unrecognized
(NodeType'UnrecognizedValue (Prelude.fromIntegral k)))
showEnum ROOT_SCOPE = "ROOT_SCOPE"
showEnum JUMP_TO_SCOPE = "JUMP_TO_SCOPE"
showEnum EXPORTED_SCOPE = "EXPORTED_SCOPE"
showEnum DEFINITION = "DEFINITION"
showEnum REFERENCE = "REFERENCE"
showEnum (NodeType'Unrecognized (NodeType'UnrecognizedValue k))
= Prelude.show k
readEnum k
| (Prelude.==) k "ROOT_SCOPE" = Prelude.Just ROOT_SCOPE
| (Prelude.==) k "JUMP_TO_SCOPE" = Prelude.Just JUMP_TO_SCOPE
| (Prelude.==) k "EXPORTED_SCOPE" = Prelude.Just EXPORTED_SCOPE
| (Prelude.==) k "DEFINITION" = Prelude.Just DEFINITION
| (Prelude.==) k "REFERENCE" = Prelude.Just REFERENCE
| Prelude.otherwise
= (Prelude.>>=) (Text.Read.readMaybe k) Data.ProtoLens.maybeToEnum
instance Prelude.Bounded NodeType where
minBound = ROOT_SCOPE
maxBound = REFERENCE
instance Prelude.Enum NodeType where
toEnum k__
= Prelude.maybe
(Prelude.error
((Prelude.++)
"toEnum: unknown value for enum NodeType: " (Prelude.show k__)))
Prelude.id
(Data.ProtoLens.maybeToEnum k__)
fromEnum ROOT_SCOPE = 0
fromEnum JUMP_TO_SCOPE = 1
fromEnum EXPORTED_SCOPE = 2
fromEnum DEFINITION = 3
fromEnum REFERENCE = 4
fromEnum (NodeType'Unrecognized (NodeType'UnrecognizedValue k))
= Prelude.fromIntegral k
succ REFERENCE
= Prelude.error
"NodeType.succ: bad argument REFERENCE. This value would be out of bounds."
succ ROOT_SCOPE = JUMP_TO_SCOPE
succ JUMP_TO_SCOPE = EXPORTED_SCOPE
succ EXPORTED_SCOPE = DEFINITION
succ DEFINITION = REFERENCE
succ (NodeType'Unrecognized _)
= Prelude.error "NodeType.succ: bad argument: unrecognized value"
pred ROOT_SCOPE
= Prelude.error
"NodeType.pred: bad argument ROOT_SCOPE. This value would be out of bounds."
pred JUMP_TO_SCOPE = ROOT_SCOPE
pred EXPORTED_SCOPE = JUMP_TO_SCOPE
pred DEFINITION = EXPORTED_SCOPE
pred REFERENCE = DEFINITION
pred (NodeType'Unrecognized _)
= Prelude.error "NodeType.pred: bad argument: unrecognized value"
enumFrom = Data.ProtoLens.Message.Enum.messageEnumFrom
enumFromTo = Data.ProtoLens.Message.Enum.messageEnumFromTo
enumFromThen = Data.ProtoLens.Message.Enum.messageEnumFromThen
enumFromThenTo = Data.ProtoLens.Message.Enum.messageEnumFromThenTo
instance Data.ProtoLens.FieldDefault NodeType where
fieldDefault = ROOT_SCOPE
instance Control.DeepSeq.NFData NodeType where
rnf x__ = Prelude.seq x__ ()
{- | Fields :
* 'Proto.Semantic_Fields.error' @:: Lens' ParseError Data.Text.Text@ -}
@ -4503,14 +4581,14 @@ instance Control.DeepSeq.NFData StackGraphFile where
* 'Proto.Semantic_Fields.kind' @:: Lens' StackGraphNode Data.Text.Text@
* 'Proto.Semantic_Fields.span' @:: Lens' StackGraphNode Span@
* 'Proto.Semantic_Fields.maybe'span' @:: Lens' StackGraphNode (Prelude.Maybe Span)@
* 'Proto.Semantic_Fields.nodeType' @:: Lens' StackGraphNode StackGraphNode'NodeType@ -}
* 'Proto.Semantic_Fields.nodeType' @:: Lens' StackGraphNode NodeType@ -}
data StackGraphNode
= StackGraphNode'_constructor {_StackGraphNode'id :: !Data.Int.Int64,
_StackGraphNode'name :: !Data.Text.Text,
_StackGraphNode'line :: !Data.Text.Text,
_StackGraphNode'kind :: !Data.Text.Text,
_StackGraphNode'span :: !(Prelude.Maybe Span),
_StackGraphNode'nodeType :: !StackGraphNode'NodeType,
_StackGraphNode'nodeType :: !NodeType,
_StackGraphNode'_unknownFields :: !Data.ProtoLens.FieldSet}
deriving (Prelude.Eq, Prelude.Ord)
instance Prelude.Show StackGraphNode where
@ -4560,7 +4638,7 @@ instance Data.ProtoLens.Field.HasField StackGraphNode "maybe'span" (Prelude.Mayb
_StackGraphNode'span
(\ x__ y__ -> x__ {_StackGraphNode'span = y__}))
Prelude.id
instance Data.ProtoLens.Field.HasField StackGraphNode "nodeType" StackGraphNode'NodeType where
instance Data.ProtoLens.Field.HasField StackGraphNode "nodeType" NodeType where
fieldOf _
= (Prelude..)
(Lens.Family2.Unchecked.lens
@ -4615,7 +4693,7 @@ instance Data.ProtoLens.Message StackGraphNode where
= Data.ProtoLens.FieldDescriptor
"node_type"
(Data.ProtoLens.ScalarField Data.ProtoLens.EnumField ::
Data.ProtoLens.FieldTypeDescriptor StackGraphNode'NodeType)
Data.ProtoLens.FieldTypeDescriptor NodeType)
(Data.ProtoLens.PlainField
Data.ProtoLens.Optional
(Data.ProtoLens.Field.field @"nodeType")) ::
@ -4841,96 +4919,6 @@ instance Control.DeepSeq.NFData StackGraphNode where
(Control.DeepSeq.deepseq
(_StackGraphNode'span x__)
(Control.DeepSeq.deepseq (_StackGraphNode'nodeType x__) ()))))))
newtype StackGraphNode'NodeType'UnrecognizedValue
= StackGraphNode'NodeType'UnrecognizedValue Data.Int.Int32
deriving (Prelude.Eq, Prelude.Ord, Prelude.Show)
data StackGraphNode'NodeType
= StackGraphNode'ROOT_SCOPE |
StackGraphNode'JUMP_TO_SCOPE |
StackGraphNode'EXPORTED_SCOPE |
StackGraphNode'DEFINITION |
StackGraphNode'REFERENCE |
StackGraphNode'NodeType'Unrecognized !StackGraphNode'NodeType'UnrecognizedValue
deriving (Prelude.Show, Prelude.Eq, Prelude.Ord)
instance Data.ProtoLens.MessageEnum StackGraphNode'NodeType where
maybeToEnum 0 = Prelude.Just StackGraphNode'ROOT_SCOPE
maybeToEnum 1 = Prelude.Just StackGraphNode'JUMP_TO_SCOPE
maybeToEnum 2 = Prelude.Just StackGraphNode'EXPORTED_SCOPE
maybeToEnum 3 = Prelude.Just StackGraphNode'DEFINITION
maybeToEnum 4 = Prelude.Just StackGraphNode'REFERENCE
maybeToEnum k
= Prelude.Just
(StackGraphNode'NodeType'Unrecognized
(StackGraphNode'NodeType'UnrecognizedValue
(Prelude.fromIntegral k)))
showEnum StackGraphNode'ROOT_SCOPE = "ROOT_SCOPE"
showEnum StackGraphNode'JUMP_TO_SCOPE = "JUMP_TO_SCOPE"
showEnum StackGraphNode'EXPORTED_SCOPE = "EXPORTED_SCOPE"
showEnum StackGraphNode'DEFINITION = "DEFINITION"
showEnum StackGraphNode'REFERENCE = "REFERENCE"
showEnum
(StackGraphNode'NodeType'Unrecognized (StackGraphNode'NodeType'UnrecognizedValue k))
= Prelude.show k
readEnum k
| (Prelude.==) k "ROOT_SCOPE"
= Prelude.Just StackGraphNode'ROOT_SCOPE
| (Prelude.==) k "JUMP_TO_SCOPE"
= Prelude.Just StackGraphNode'JUMP_TO_SCOPE
| (Prelude.==) k "EXPORTED_SCOPE"
= Prelude.Just StackGraphNode'EXPORTED_SCOPE
| (Prelude.==) k "DEFINITION"
= Prelude.Just StackGraphNode'DEFINITION
| (Prelude.==) k "REFERENCE"
= Prelude.Just StackGraphNode'REFERENCE
| Prelude.otherwise
= (Prelude.>>=) (Text.Read.readMaybe k) Data.ProtoLens.maybeToEnum
instance Prelude.Bounded StackGraphNode'NodeType where
minBound = StackGraphNode'ROOT_SCOPE
maxBound = StackGraphNode'REFERENCE
instance Prelude.Enum StackGraphNode'NodeType where
toEnum k__
= Prelude.maybe
(Prelude.error
((Prelude.++)
"toEnum: unknown value for enum NodeType: " (Prelude.show k__)))
Prelude.id
(Data.ProtoLens.maybeToEnum k__)
fromEnum StackGraphNode'ROOT_SCOPE = 0
fromEnum StackGraphNode'JUMP_TO_SCOPE = 1
fromEnum StackGraphNode'EXPORTED_SCOPE = 2
fromEnum StackGraphNode'DEFINITION = 3
fromEnum StackGraphNode'REFERENCE = 4
fromEnum
(StackGraphNode'NodeType'Unrecognized (StackGraphNode'NodeType'UnrecognizedValue k))
= Prelude.fromIntegral k
succ StackGraphNode'REFERENCE
= Prelude.error
"StackGraphNode'NodeType.succ: bad argument StackGraphNode'REFERENCE. This value would be out of bounds."
succ StackGraphNode'ROOT_SCOPE = StackGraphNode'JUMP_TO_SCOPE
succ StackGraphNode'JUMP_TO_SCOPE = StackGraphNode'EXPORTED_SCOPE
succ StackGraphNode'EXPORTED_SCOPE = StackGraphNode'DEFINITION
succ StackGraphNode'DEFINITION = StackGraphNode'REFERENCE
succ (StackGraphNode'NodeType'Unrecognized _)
= Prelude.error
"StackGraphNode'NodeType.succ: bad argument: unrecognized value"
pred StackGraphNode'ROOT_SCOPE
= Prelude.error
"StackGraphNode'NodeType.pred: bad argument StackGraphNode'ROOT_SCOPE. This value would be out of bounds."
pred StackGraphNode'JUMP_TO_SCOPE = StackGraphNode'ROOT_SCOPE
pred StackGraphNode'EXPORTED_SCOPE = StackGraphNode'JUMP_TO_SCOPE
pred StackGraphNode'DEFINITION = StackGraphNode'EXPORTED_SCOPE
pred StackGraphNode'REFERENCE = StackGraphNode'DEFINITION
pred (StackGraphNode'NodeType'Unrecognized _)
= Prelude.error
"StackGraphNode'NodeType.pred: bad argument: unrecognized value"
enumFrom = Data.ProtoLens.Message.Enum.messageEnumFrom
enumFromTo = Data.ProtoLens.Message.Enum.messageEnumFromTo
enumFromThen = Data.ProtoLens.Message.Enum.messageEnumFromThen
enumFromThenTo = Data.ProtoLens.Message.Enum.messageEnumFromThenTo
instance Data.ProtoLens.FieldDefault StackGraphNode'NodeType where
fieldDefault = StackGraphNode'ROOT_SCOPE
instance Control.DeepSeq.NFData StackGraphNode'NodeType where
rnf x__ = Prelude.seq x__ ()
{- | Fields :
* 'Proto.Semantic_Fields.startingSymbolStack' @:: Lens' StackGraphPath [Data.Text.Text]@
@ -5697,13 +5685,15 @@ instance Control.DeepSeq.NFData StackGraphResponse where
* 'Proto.Semantic_Fields.span' @:: Lens' Symbol Span@
* 'Proto.Semantic_Fields.maybe'span' @:: Lens' Symbol (Prelude.Maybe Span)@
* 'Proto.Semantic_Fields.docs' @:: Lens' Symbol Docstring@
* 'Proto.Semantic_Fields.maybe'docs' @:: Lens' Symbol (Prelude.Maybe Docstring)@ -}
* 'Proto.Semantic_Fields.maybe'docs' @:: Lens' Symbol (Prelude.Maybe Docstring)@
* 'Proto.Semantic_Fields.nodeType' @:: Lens' Symbol NodeType@ -}
data Symbol
= Symbol'_constructor {_Symbol'symbol :: !Data.Text.Text,
_Symbol'kind :: !Data.Text.Text,
_Symbol'line :: !Data.Text.Text,
_Symbol'span :: !(Prelude.Maybe Span),
_Symbol'docs :: !(Prelude.Maybe Docstring),
_Symbol'nodeType :: !NodeType,
_Symbol'_unknownFields :: !Data.ProtoLens.FieldSet}
deriving (Prelude.Eq, Prelude.Ord)
instance Prelude.Show Symbol where
@ -5754,6 +5744,12 @@ instance Data.ProtoLens.Field.HasField Symbol "maybe'docs" (Prelude.Maybe Docstr
(Lens.Family2.Unchecked.lens
_Symbol'docs (\ x__ y__ -> x__ {_Symbol'docs = y__}))
Prelude.id
instance Data.ProtoLens.Field.HasField Symbol "nodeType" NodeType where
fieldOf _
= (Prelude..)
(Lens.Family2.Unchecked.lens
_Symbol'nodeType (\ x__ y__ -> x__ {_Symbol'nodeType = y__}))
Prelude.id
instance Data.ProtoLens.Message Symbol where
messageName _ = Data.Text.pack "github.semantic.Symbol"
fieldsByTag
@ -5798,13 +5794,23 @@ instance Data.ProtoLens.Message Symbol where
(Data.ProtoLens.OptionalField
(Data.ProtoLens.Field.field @"maybe'docs")) ::
Data.ProtoLens.FieldDescriptor Symbol
nodeType__field_descriptor
= Data.ProtoLens.FieldDescriptor
"node_type"
(Data.ProtoLens.ScalarField Data.ProtoLens.EnumField ::
Data.ProtoLens.FieldTypeDescriptor NodeType)
(Data.ProtoLens.PlainField
Data.ProtoLens.Optional
(Data.ProtoLens.Field.field @"nodeType")) ::
Data.ProtoLens.FieldDescriptor Symbol
in
Data.Map.fromList
[(Data.ProtoLens.Tag 1, symbol__field_descriptor),
(Data.ProtoLens.Tag 2, kind__field_descriptor),
(Data.ProtoLens.Tag 3, line__field_descriptor),
(Data.ProtoLens.Tag 4, span__field_descriptor),
(Data.ProtoLens.Tag 5, docs__field_descriptor)]
(Data.ProtoLens.Tag 5, docs__field_descriptor),
(Data.ProtoLens.Tag 6, nodeType__field_descriptor)]
unknownFields
= Lens.Family2.Unchecked.lens
_Symbol'_unknownFields
@ -5815,6 +5821,7 @@ instance Data.ProtoLens.Message Symbol where
_Symbol'kind = Data.ProtoLens.fieldDefault,
_Symbol'line = Data.ProtoLens.fieldDefault,
_Symbol'span = Prelude.Nothing, _Symbol'docs = Prelude.Nothing,
_Symbol'nodeType = Data.ProtoLens.fieldDefault,
_Symbol'_unknownFields = []}
parseMessage
= let
@ -5887,6 +5894,16 @@ instance Data.ProtoLens.Message Symbol where
(Prelude.fromIntegral len) Data.ProtoLens.parseMessage)
"docs"
loop (Lens.Family2.set (Data.ProtoLens.Field.field @"docs") y x)
48
-> do y <- (Data.ProtoLens.Encoding.Bytes.<?>)
(Prelude.fmap
Prelude.toEnum
(Prelude.fmap
Prelude.fromIntegral
Data.ProtoLens.Encoding.Bytes.getVarInt))
"node_type"
loop
(Lens.Family2.set (Data.ProtoLens.Field.field @"nodeType") y x)
wire
-> do !y <- Data.ProtoLens.Encoding.Wire.parseTaggedValueFromWire
wire
@ -5979,8 +5996,23 @@ instance Data.ProtoLens.Message Symbol where
(Data.ProtoLens.Encoding.Bytes.putBytes bs))
Data.ProtoLens.encodeMessage
_v))
(Data.ProtoLens.Encoding.Wire.buildFieldSet
(Lens.Family2.view Data.ProtoLens.unknownFields _x))))))
((Data.Monoid.<>)
(let
_v = Lens.Family2.view (Data.ProtoLens.Field.field @"nodeType") _x
in
if (Prelude.==) _v Data.ProtoLens.fieldDefault then
Data.Monoid.mempty
else
(Data.Monoid.<>)
(Data.ProtoLens.Encoding.Bytes.putVarInt 48)
((Prelude..)
((Prelude..)
Data.ProtoLens.Encoding.Bytes.putVarInt
Prelude.fromIntegral)
Prelude.fromEnum
_v))
(Data.ProtoLens.Encoding.Wire.buildFieldSet
(Lens.Family2.view Data.ProtoLens.unknownFields _x)))))))
instance Control.DeepSeq.NFData Symbol where
rnf
= \ x__
@ -5994,7 +6026,9 @@ instance Control.DeepSeq.NFData Symbol where
(_Symbol'line x__)
(Control.DeepSeq.deepseq
(_Symbol'span x__)
(Control.DeepSeq.deepseq (_Symbol'docs x__) ())))))
(Control.DeepSeq.deepseq
(_Symbol'docs x__)
(Control.DeepSeq.deepseq (_Symbol'nodeType x__) ()))))))
{- | Fields :
* 'Proto.Semantic_Fields.source' @:: Lens' TermEdge Data.Int.Int32@

View File

@ -607,12 +607,14 @@ instance FromJSONPB Symbol where
line' <- obj .: "line"
span' <- obj A..:? "span"
docs' <- obj A..:? "docs"
nodeType' <- obj .: "nodeType"
pure $ defMessage
& P.symbol .~ symbol'
& P.kind .~ kind'
& P.line .~ line'
& P.maybe'span .~ span'
& P.maybe'docs .~ docs'
& P.nodeType .~ nodeType'
instance ToJSONPB Symbol where
toJSONPB x = object
@ -621,6 +623,7 @@ instance ToJSONPB Symbol where
, "line" .= (x^.line)
, "span" .= (x^.maybe'span)
, "docs" .= (x^.maybe'docs)
, "nodeType" .= (x^.nodeType)
]
toEncodingPB x = pairs
[ "symbol" .= (x^.symbol)
@ -628,6 +631,7 @@ instance ToJSONPB Symbol where
, "line" .= (x^.line)
, "span" .= (x^.maybe'span)
, "docs" .= (x^.maybe'docs)
, "nodeType" .= (x^.nodeType)
]
instance FromJSON Symbol where
@ -786,25 +790,6 @@ instance ToJSON StackGraphNode where
toJSON = toAesonValue
toEncoding = toAesonEncoding
instance FromJSONPB StackGraphNode'NodeType where
parseJSONPB (JSONPB.String "ROOT_SCOPE") = pure StackGraphNode'ROOT_SCOPE
parseJSONPB (JSONPB.String "JUMP_TO_SCOPE") = pure StackGraphNode'JUMP_TO_SCOPE
parseJSONPB (JSONPB.String "EXPORTED_SCOPE") = pure StackGraphNode'EXPORTED_SCOPE
parseJSONPB (JSONPB.String "DEFINITION") = pure StackGraphNode'DEFINITION
parseJSONPB (JSONPB.String "REFERENCE") = pure StackGraphNode'REFERENCE
parseJSONPB x = typeMismatch "NodeType" x
instance ToJSONPB StackGraphNode'NodeType where
toJSONPB x _ = A.String . T.toUpper . T.pack $ show x
toEncodingPB x _ = E.text . T.toUpper . T.pack $ show x
instance FromJSON StackGraphNode'NodeType where
parseJSON = parseJSONPB
instance ToJSON StackGraphNode'NodeType where
toJSON = toAesonValue
toEncoding = toAesonEncoding
instance FromJSONPB StackGraphPath where
parseJSONPB = withObject "StackGraphPath" $ \obj -> do
startingSymbolStack' <- obj .: "startingSymbolStack"
@ -849,3 +834,22 @@ instance FromJSON StackGraphPath where
instance ToJSON StackGraphPath where
toJSON = toAesonValue
toEncoding = toAesonEncoding
instance FromJSONPB NodeType where
parseJSONPB (JSONPB.String "ROOT_SCOPE") = pure ROOT_SCOPE
parseJSONPB (JSONPB.String "JUMP_TO_SCOPE") = pure JUMP_TO_SCOPE
parseJSONPB (JSONPB.String "EXPORTED_SCOPE") = pure EXPORTED_SCOPE
parseJSONPB (JSONPB.String "DEFINITION") = pure DEFINITION
parseJSONPB (JSONPB.String "REFERENCE") = pure REFERENCE
parseJSONPB x = typeMismatch "NodeType" x
instance ToJSONPB NodeType where
toJSONPB x _ = A.String . T.toUpper . T.pack $ show x
toEncodingPB x _ = E.text . T.toUpper . T.pack $ show x
instance FromJSON NodeType where
parseJSON = parseJSONPB
instance ToJSON NodeType where
toJSON = toAesonValue
toEncoding = toAesonEncoding

View File

@ -85,13 +85,13 @@ parseStackGraph blobs = do
& P.endingScopeStack .~ pathEndingScopeStack path
& P.endingSymbolStack .~ pathEndingSymbolStack path
nodeTypeToNodeType :: SGNodeType -> StackGraphNode'NodeType
nodeTypeToNodeType :: SGNodeType -> NodeType
nodeTypeToNodeType = \case
RootScope -> P.StackGraphNode'ROOT_SCOPE
JumpToScope -> P.StackGraphNode'JUMP_TO_SCOPE
ExportedScope -> P.StackGraphNode'EXPORTED_SCOPE
Definition -> P.StackGraphNode'DEFINITION
Reference -> P.StackGraphNode'REFERENCE
RootScope -> P.ROOT_SCOPE
JumpToScope -> P.JUMP_TO_SCOPE
ExportedScope -> P.EXPORTED_SCOPE
Definition -> P.DEFINITION
Reference -> P.REFERENCE
-- TODO: These are temporary, will replace with proper datatypes from the scope graph work.
data TempStackGraph

View File

@ -2,6 +2,7 @@
{-# LANGUAGE DataKinds #-}
{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE LambdaCase #-}
{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE RecordWildCards #-}
@ -103,10 +104,22 @@ parseSymbols blobs = do
tagToSymbol Tag{..} = defMessage
& P.symbol .~ name
& P.kind .~ pack (show kind)
& P.nodeType .~ nodeTypeForKind kind
& P.line .~ line
& P.maybe'span ?~ converting # Loc.span loc
& P.maybe'docs .~ fmap (flip (set P.docstring) defMessage) docs
nodeTypeForKind :: Kind -> NodeType
nodeTypeForKind = \case
Function -> DEFINITION
Method -> DEFINITION
Class -> DEFINITION
Module -> DEFINITION
Interface -> DEFINITION
Call -> REFERENCE
Type -> REFERENCE
Implementation -> REFERENCE
tagsForBlob :: (Has (Error SomeException) sig m, Has Parse sig m, Has (Reader PerLanguageModes) sig m) => Blob -> m [Tag]
tagsForBlob blob = asks toTagsParsers >>= \p -> parseWith p (pure . tags symbolsToSummarize blob) blob

View File

@ -2,19 +2,22 @@ module Data.Abstract.Path.Spec(spec) where
import Data.Abstract.Path
import SpecHelpers
import qualified System.Path as Path
spec :: Spec
spec = parallel $
describe "joinPaths" $ do
it "joins empty paths" $
joinUntypedPaths "" "" `shouldBe` "."
go Path.currentDir Path.currentDir $ Path.currentDir
it "joins relative paths" $
joinUntypedPaths "a/b" "./c" `shouldBe` "a/b/c"
go (Path.relDir "a/b") (Path.relFile "./c") $ Path.relFile "a/b/c"
it "joins absolute paths" $
joinUntypedPaths "/a/b" "c" `shouldBe` "/a/b/c"
go (Path.absDir "/a/b") (Path.relDir "c" ) $ Path.absDir "/a/b/c"
it "walks up directories for ../" $
joinUntypedPaths "a/b" "../c" `shouldBe` "a/c"
go (Path.relDir "a/b") (Path.relFile "../c") $ Path.relFile "a/c"
it "walks up directories for multiple ../" $
joinUntypedPaths "a/b" "../../c" `shouldBe` "c"
go (Path.relDir "a/b") (Path.relFile "../../c") $ Path.relFile "c"
it "stops walking at top directory" $
joinUntypedPaths "a/b" "../../../c" `shouldBe` "c"
go (Path.relDir "a/b") (Path.relFile "../../../c" ) $ Path.relFile "c"
where
go x y z = joinPaths (Path.toAbsRel x) y `shouldBe` Path.toAbsRel z

View File

@ -1 +1 @@
{"files":[{"path":"test/fixtures/ruby/corpus/method-declaration.A.rb","language":"Ruby","symbols":[{"symbol":"foo","kind":"Method","line":"def foo","span":{"start":{"line":1,"column":5},"end":{"line":1,"column":8}}}]}]}
{"files":[{"path":"test/fixtures/ruby/corpus/method-declaration.A.rb","language":"Ruby","symbols":[{"symbol":"foo","kind":"Method","line":"def foo","span":{"start":{"line":1,"column":5},"end":{"line":1,"column":8}},"nodeType":"DEFINITION"}]}]}

View File

@ -1,5 +1,5 @@
_
1test/fixtures/ruby/corpus/method-declaration.A.rbRuby$
a
1test/fixtures/ruby/corpus/method-declaration.A.rbRuby&
fooMethoddef foo"

0