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

Commit c3181d1

Browse files
authored
Merge pull request #197 from github/proto-rework
Protoc rework
2 parents f7111f1 + d8ad7f2 commit c3181d1

File tree

13 files changed

+50
-28
lines changed

13 files changed

+50
-28
lines changed

Dockerfile

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,18 @@
1+
# Put protoc and twirp tooling in its own image
2+
FROM golang:1.12-stretch AS protoc
3+
RUN apt-get update && apt-get install -y unzip
4+
ENV PROTOBUF_VERSION=3.7.1
5+
RUN wget "https://github.com/protocolbuffers/protobuf/releases/download/v3.7.1/protoc-$PROTOBUF_VERSION-linux-x86_64.zip" && \
6+
unzip "protoc-$PROTOBUF_VERSION-linux-x86_64.zip" -d "/protobuf"
7+
8+
RUN go get github.com/golang/protobuf/proto && \
9+
go get github.com/twitchtv/protogen/typemap && \
10+
go get github.com/tclem/twirp-haskell/pkg/gen/haskell && \
11+
go get github.com/tclem/twirp-haskell/protoc-gen-haskell
12+
13+
ENTRYPOINT ["/protobuf/bin/protoc", "-I/protobuf", "-I=/go/src/github.com/tclem/twirp-haskell"]
14+
15+
# Build semantic
116
FROM haskell:8.6 as build
217
WORKDIR /build
318

proto/semantic/api/v1/code_analysis.proto renamed to proto/semantic.proto

Lines changed: 6 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,11 @@
11
syntax = "proto3";
22

3-
package semantic.api.v1;
4-
5-
option java_package = "com.github.semantic.api.v1";
6-
7-
// Semantic's CodeAnalysis service provides endpoints for parsing, analyzing,
8-
// and comparing source code.
9-
service CodeAnalysis {
10-
// Check health & status of the service.
11-
rpc Ping (PingRequest) returns (PingResponse);
12-
// Calculate c-tags like symbols for blobs.
13-
rpc ParseTreeSymbols (ParseTreeRequest) returns (ParseTreeSymbolResponse);
14-
// Parse trees in adjacency graph representation.
15-
rpc ParseTreeGraph (ParseTreeRequest) returns (ParseTreeGraphResponse);
16-
// Calculate table of contents style diff summaries.
17-
rpc DiffTreeTOC (DiffTreeRequest) returns (DiffTreeTOCResponse);
18-
// Tree diffs in adjacency graph representation.
19-
rpc DiffTreeGraph (DiffTreeRequest) returns (DiffTreeGraphResponse);
20-
}
3+
import "pkg/gen/haskell/haskell.proto";
4+
5+
package github.semantic;
6+
7+
option (haskell.haskell_package) = "Semantic.Proto";
8+
option ruby_package = "Semantic::Proto";
219

2210
message PingRequest {
2311
string service = 1;

script/protoc

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
#!/usr/bin/env bash
2+
#/ Usage: script/protoc
3+
#/
4+
#/ Generate code from .proto files
5+
6+
set -ex
7+
cd "$(dirname "$0")/.."
8+
9+
docker build -t semantic-protoc --target protoc .
10+
11+
PARENT_DIR=$(dirname $(pwd))
12+
13+
export PROJECT="github.com/github/semantic"
14+
15+
# Generate Haskell for semantic's protobuf types
16+
docker run --rm --user $(id -u):$(id -g) -v $(pwd):/go/src/$PROJECT -w /go/src/$PROJECT \
17+
semantic-protoc \
18+
--proto_path=proto --haskell_out=src/Semantic/Proto \
19+
semantic.proto

semantic.cabal

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -249,7 +249,7 @@ library
249249
, Semantic.Api.Symbols
250250
, Semantic.Api.Terms
251251
, Semantic.Api.TOCSummaries
252-
, Semantic.Api.V1.CodeAnalysisPB
252+
, Semantic.Proto.SemanticPB
253253
, Semantic.AST
254254
, Semantic.CLI
255255
, Semantic.Config

src/Data/Graph.hs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ import qualified Algebra.Graph.ToGraph as Class
2323
import Control.Effect.State
2424
import Data.Aeson
2525
import qualified Data.Set as Set
26-
import Semantic.Api.V1.CodeAnalysisPB
26+
import Semantic.Proto.SemanticPB
2727

2828
-- | An algebraic graph with 'Ord', 'Semigroup', and 'Monoid' instances.
2929
newtype Graph vertex = Graph { unGraph :: G.Graph vertex }

src/Rendering/Graph.hs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ import Data.String (IsString (..))
2020
import Data.Term
2121
import Prologue
2222
import Semantic.Api.Bridge
23-
import Semantic.Api.V1.CodeAnalysisPB
23+
import Semantic.Proto.SemanticPB
2424

2525
import qualified Data.Text as T
2626

src/Semantic/Api.hs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,4 +11,4 @@ import Semantic.Api.Diffs as DiffsAPI
1111
import Semantic.Api.Symbols as SymbolsAPI
1212
import Semantic.Api.Terms as TermsAPI
1313
import Semantic.Api.TOCSummaries as TOCSummariesAPI
14-
import Semantic.Api.V1.CodeAnalysisPB as Types
14+
import Semantic.Proto.SemanticPB as Types

src/Semantic/Api/Bridge.hs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ import Data.Source (fromText, toText)
1212
import qualified Data.Span as Data
1313
import qualified Data.Text as T
1414
import qualified Semantic.Api.LegacyTypes as Legacy
15-
import qualified Semantic.Api.V1.CodeAnalysisPB as API
15+
import qualified Semantic.Proto.SemanticPB as API
1616

1717
-- | An @APIBridge x y@ instance describes an isomorphism between @x@ and @y@.
1818
-- This is suitable for types such as 'Pos' which are representationally equivalent

src/Semantic/Api/Diffs.hs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ import Rendering.Graph
3434
import Rendering.JSON hiding (JSON)
3535
import qualified Rendering.JSON
3636
import Semantic.Api.Bridge
37-
import Semantic.Api.V1.CodeAnalysisPB hiding (Blob, BlobPair)
37+
import Semantic.Proto.SemanticPB hiding (Blob, BlobPair)
3838
import Semantic.Task as Task
3939
import Semantic.Telemetry as Stat
4040
import Serializing.Format hiding (JSON)

src/Semantic/Api/Symbols.hs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ import Prologue
2323
import Semantic.Api.Bridge
2424
import qualified Semantic.Api.LegacyTypes as Legacy
2525
import Semantic.Api.Terms (ParseEffects, doParse)
26-
import Semantic.Api.V1.CodeAnalysisPB hiding (Blob)
26+
import Semantic.Proto.SemanticPB hiding (Blob)
2727
import Semantic.Task
2828
import Serializing.Format
2929
import Tags.Taggable

src/Semantic/Api/TOCSummaries.hs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ import qualified Data.Vector as V
1515
import Rendering.TOC
1616
import Semantic.Api.Diffs
1717
import Semantic.Api.Bridge
18-
import Semantic.Api.V1.CodeAnalysisPB hiding (Blob, BlobPair)
18+
import Semantic.Proto.SemanticPB hiding (Blob, BlobPair)
1919
import Semantic.Task as Task
2020
import Serializing.Format
2121

src/Semantic/Api/Terms.hs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ import Rendering.Graph
3737
import Rendering.JSON hiding (JSON)
3838
import qualified Rendering.JSON
3939
import Semantic.Api.Bridge
40-
import Semantic.Api.V1.CodeAnalysisPB hiding (Blob)
40+
import Semantic.Proto.SemanticPB hiding (Blob)
4141
import Semantic.Task
4242
import Serializing.Format hiding (JSON)
4343
import qualified Serializing.Format as Format

src/Semantic/Api/V1/CodeAnalysisPB.hs renamed to src/Semantic/Proto/SemanticPB.hs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
-- Code generated by protoc-gen-haskell 0.1.0, DO NOT EDIT.
22
{-# LANGUAGE DerivingVia, DeriveAnyClass, DuplicateRecordFields, PatternSynonyms #-}
33
{-# OPTIONS_GHC -Wno-unused-imports -Wno-missing-export-lists #-}
4-
module Semantic.Api.V1.CodeAnalysisPB where
4+
module Semantic.Proto.SemanticPB where
55

66
import Control.DeepSeq
77
import Control.Monad (msum)

0 commit comments

Comments
 (0)