hprotoc 1.7.9 → 1.8.0
raw patch · 5 files changed
+49/−37 lines, 5 filesdep ~protocol-buffersdep ~protocol-buffers-descriptor
Dependency ranges changed: protocol-buffers, protocol-buffers-descriptor
Files
- Text/ProtocolBuffers/ProtoCompile.hs +1/−2
- Text/ProtocolBuffers/ProtoCompile/MakeReflections.hs +2/−2
- Text/ProtocolBuffers/ProtoCompile/Parser.hs +14/−15
- Text/ProtocolBuffers/ProtoCompile/Resolve.hs +30/−16
- hprotoc.cabal +2/−2
Text/ProtocolBuffers/ProtoCompile.hs view
@@ -5,7 +5,6 @@ import Control.Monad.State(State, execState, modify) import qualified Data.ByteString.Lazy.Char8 as LC (hGetContents, hPut, pack, unpack) import Data.Foldable (toList)-import Data.List(break) import qualified Data.Sequence as Seq (fromList,singleton) import Data.Sequence ((|>)) import Data.Version(showVersion)@@ -25,7 +24,7 @@ import qualified Text.DescriptorProtos.FileDescriptorProto as D(FileDescriptorProto) import qualified Text.DescriptorProtos.FileDescriptorProto as D.FileDescriptorProto(FileDescriptorProto(..))-import qualified Text.DescriptorProtos.FileDescriptorSet as D(FileDescriptorSet)+-- import qualified Text.DescriptorProtos.FileDescriptorSet as D(FileDescriptorSet) import qualified Text.DescriptorProtos.FileDescriptorSet as D.FileDescriptorSet(FileDescriptorSet(..)) import Text.ProtocolBuffers.ProtoCompile.BreakRecursion(makeResult)
Text/ProtocolBuffers/ProtoCompile/MakeReflections.hs view
@@ -27,9 +27,9 @@ import qualified Text.DescriptorProtos.EnumValueDescriptorProto as D.EnumValueDescriptorProto(EnumValueDescriptorProto(..)) import qualified Text.DescriptorProtos.FieldDescriptorProto as D(FieldDescriptorProto) import qualified Text.DescriptorProtos.FieldDescriptorProto as D.FieldDescriptorProto(FieldDescriptorProto(..)) -import qualified Text.DescriptorProtos.FieldDescriptorProto.Label as D.FieldDescriptorProto(Label)+-- import qualified Text.DescriptorProtos.FieldDescriptorProto.Label as D.FieldDescriptorProto(Label) import Text.DescriptorProtos.FieldDescriptorProto.Label as D.FieldDescriptorProto.Label(Label(..))-import qualified Text.DescriptorProtos.FieldDescriptorProto.Type as D.FieldDescriptorProto(Type)+-- import qualified Text.DescriptorProtos.FieldDescriptorProto.Type as D.FieldDescriptorProto(Type) import Text.DescriptorProtos.FieldDescriptorProto.Type as D.FieldDescriptorProto.Type(Type(..)) import qualified Text.DescriptorProtos.FieldOptions as D(FieldOptions(FieldOptions)) import qualified Text.DescriptorProtos.FieldOptions as D.FieldOptions(FieldOptions(..))
Text/ProtocolBuffers/ProtoCompile/Parser.hs view
@@ -10,49 +10,48 @@ import qualified Text.DescriptorProtos.DescriptorProto as D(DescriptorProto) import qualified Text.DescriptorProtos.DescriptorProto as D.DescriptorProto(DescriptorProto(..))-import qualified Text.DescriptorProtos.DescriptorProto.ExtensionRange as D(ExtensionRange)+-- import qualified Text.DescriptorProtos.DescriptorProto.ExtensionRange as D(ExtensionRange) import qualified Text.DescriptorProtos.DescriptorProto.ExtensionRange as D.ExtensionRange(ExtensionRange(..)) import qualified Text.DescriptorProtos.EnumDescriptorProto as D(EnumDescriptorProto) import qualified Text.DescriptorProtos.EnumDescriptorProto as D.EnumDescriptorProto(EnumDescriptorProto(..))-import qualified Text.DescriptorProtos.EnumOptions as D(EnumOptions)+-- import qualified Text.DescriptorProtos.EnumOptions as D(EnumOptions) import qualified Text.DescriptorProtos.EnumOptions as D.EnumOptions(EnumOptions(..)) import qualified Text.DescriptorProtos.EnumValueDescriptorProto as D(EnumValueDescriptorProto) import qualified Text.DescriptorProtos.EnumValueDescriptorProto as D.EnumValueDescriptorProto(EnumValueDescriptorProto(..))-import qualified Text.DescriptorProtos.EnumValueOptions as D(EnumValueOptions)+-- import qualified Text.DescriptorProtos.EnumValueOptions as D(EnumValueOptions) import qualified Text.DescriptorProtos.EnumValueOptions as D.EnumValueOptions(EnumValueOptions(..)) import qualified Text.DescriptorProtos.FieldDescriptorProto as D(FieldDescriptorProto) import qualified Text.DescriptorProtos.FieldDescriptorProto as D.FieldDescriptorProto(FieldDescriptorProto(..)) import Text.DescriptorProtos.FieldDescriptorProto.Label-import qualified Text.DescriptorProtos.FieldDescriptorProto.Type as D.FieldDescriptorProto(Type)+-- import qualified Text.DescriptorProtos.FieldDescriptorProto.Type as D.FieldDescriptorProto(Type) import Text.DescriptorProtos.FieldDescriptorProto.Type (Type(..))-import qualified Text.DescriptorProtos.FieldOptions as D(FieldOptions)+-- import qualified Text.DescriptorProtos.FieldOptions as D(FieldOptions) import qualified Text.DescriptorProtos.FieldOptions as D.FieldOptions(FieldOptions(..)) import qualified Text.DescriptorProtos.FileDescriptorProto as D(FileDescriptorProto) import qualified Text.DescriptorProtos.FileDescriptorProto as D.FileDescriptorProto(FileDescriptorProto(..))-import qualified Text.DescriptorProtos.FileOptions as D(FileOptions)+-- import qualified Text.DescriptorProtos.FileOptions as D(FileOptions) import qualified Text.DescriptorProtos.FileOptions as D.FileOptions(FileOptions(..))-import qualified Text.DescriptorProtos.MessageOptions as D(MessageOptions)+-- import qualified Text.DescriptorProtos.MessageOptions as D(MessageOptions) import qualified Text.DescriptorProtos.MessageOptions as D.MessageOptions(MessageOptions(..)) import qualified Text.DescriptorProtos.MethodDescriptorProto as D(MethodDescriptorProto) import qualified Text.DescriptorProtos.MethodDescriptorProto as D.MethodDescriptorProto(MethodDescriptorProto(..))-import qualified Text.DescriptorProtos.MethodOptions as D(MethodOptions)+-- import qualified Text.DescriptorProtos.MethodOptions as D(MethodOptions) import qualified Text.DescriptorProtos.MethodOptions as D.MethodOptions(MethodOptions(..)) import qualified Text.DescriptorProtos.ServiceDescriptorProto as D(ServiceDescriptorProto) import qualified Text.DescriptorProtos.ServiceDescriptorProto as D.ServiceDescriptorProto(ServiceDescriptorProto(..))-import qualified Text.DescriptorProtos.ServiceOptions as D(ServiceOptions)+-- import qualified Text.DescriptorProtos.ServiceOptions as D(ServiceOptions) import qualified Text.DescriptorProtos.ServiceOptions as D.ServiceOptions(ServiceOptions(..)) import qualified Text.DescriptorProtos.UninterpretedOption as D(UninterpretedOption) import qualified Text.DescriptorProtos.UninterpretedOption as D.UninterpretedOption(UninterpretedOption(..))-import qualified Text.DescriptorProtos.UninterpretedOption.NamePart as D(NamePart)+-- import qualified Text.DescriptorProtos.UninterpretedOption.NamePart as D(NamePart) import qualified Text.DescriptorProtos.UninterpretedOption.NamePart as D.NamePart(NamePart(..)) import Text.ProtocolBuffers.Basic import Text.ProtocolBuffers.Identifiers-import Text.ProtocolBuffers.Header(ByteString,Int32,Int64,Word32,Word64- ,ReflectEnum(reflectEnumInfo),enumName)+import Text.ProtocolBuffers.Header(ReflectEnum(reflectEnumInfo),enumName) import Text.ProtocolBuffers.ProtoCompile.Lexer(Lexed(..),alexScanTokens,getLinePos) import Text.ProtocolBuffers.ProtoCompile.Instances(parseLabel,parseType)-import Text.ProtocolBuffers.Reflections()+-- import Text.ProtocolBuffers.Reflections() import Control.Monad(when,liftM2,liftM3) import qualified Data.ByteString.Lazy.Char8 as LC(notElem,head)@@ -367,7 +366,7 @@ defaultConstant LABEL_REPEATED _ = pName (U.fromString "default") >> fail "Repeated fields cannot have a default value" defaultConstant _ mt = do- pName (U.fromString "default")+ _ <- pName (U.fromString "default") maybeDefault <- pChar '=' >> fmap Just (constant mt) -- XXX Hack: we lie about Utf8 for the default_value below update' (\s -> s { D.FieldDescriptorProto.default_value = fmap Utf8 maybeDefault })@@ -519,7 +518,7 @@ rpc = pName (U.fromString "rpc") >> do name <- ident1 input <- between (pChar '(') (pChar ')') ident1- pName (U.fromString "returns")+ _ <- pName (U.fromString "returns") output <- between (pChar '(') (pChar ')') ident1 let m1 = defaultValue { D.MethodDescriptorProto.name=Just name , D.MethodDescriptorProto.input_type=Just input
Text/ProtocolBuffers/ProtoCompile/Resolve.hs view
@@ -3,6 +3,10 @@ what about keys 'extendee' resolution to Message names only? expectM in entityField + makeTopLevel is the main internal entry point in this module.+ This is called from loadProto' which has two callers:+ loadProto and loadCodeGenRequest+ -} -- | This huge module handles the loading and name resolution. The@@ -36,19 +40,19 @@ import qualified Text.DescriptorProtos.UninterpretedOption as D.UninterpretedOption(UninterpretedOption(..)) import qualified Text.DescriptorProtos.UninterpretedOption.NamePart as D(NamePart(NamePart)) import qualified Text.DescriptorProtos.UninterpretedOption.NamePart as D.NamePart(NamePart(..))-import qualified Text.DescriptorProtos.EnumOptions as D(EnumOptions)+-- import qualified Text.DescriptorProtos.EnumOptions as D(EnumOptions) import qualified Text.DescriptorProtos.EnumOptions as D.EnumOptions(EnumOptions(uninterpreted_option))-import qualified Text.DescriptorProtos.EnumValueOptions as D(EnumValueOptions)+-- import qualified Text.DescriptorProtos.EnumValueOptions as D(EnumValueOptions) import qualified Text.DescriptorProtos.EnumValueOptions as D.EnumValueOptions(EnumValueOptions(uninterpreted_option)) import qualified Text.DescriptorProtos.FieldOptions as D(FieldOptions(FieldOptions)) import qualified Text.DescriptorProtos.FieldOptions as D.FieldOptions(FieldOptions(packed,uninterpreted_option))-import qualified Text.DescriptorProtos.FileOptions as D(FileOptions)+-- import qualified Text.DescriptorProtos.FileOptions as D(FileOptions) import qualified Text.DescriptorProtos.FileOptions as D.FileOptions(FileOptions(..))-import qualified Text.DescriptorProtos.MessageOptions as D(MessageOptions)+-- import qualified Text.DescriptorProtos.MessageOptions as D(MessageOptions) import qualified Text.DescriptorProtos.MessageOptions as D.MessageOptions(MessageOptions(uninterpreted_option))-import qualified Text.DescriptorProtos.MethodOptions as D(MethodOptions)+-- import qualified Text.DescriptorProtos.MethodOptions as D(MethodOptions) import qualified Text.DescriptorProtos.MethodOptions as D.MethodOptions(MethodOptions(uninterpreted_option))-import qualified Text.DescriptorProtos.ServiceOptions as D(ServiceOptions)+-- import qualified Text.DescriptorProtos.ServiceOptions as D(ServiceOptions) import qualified Text.DescriptorProtos.ServiceOptions as D.ServiceOptions(ServiceOptions(uninterpreted_option)) import qualified Text.Google.Protobuf.Compiler.CodeGeneratorRequest as CGR@@ -69,10 +73,10 @@ import Data.Char import Data.Ratio import Data.Ix(inRange)-import Data.List(foldl',stripPrefix,lookup,isPrefixOf,isSuffixOf)-import Data.Map(Map, keys)+import Data.List(foldl',stripPrefix,isPrefixOf,isSuffixOf)+import Data.Map(Map) import Data.Maybe(mapMaybe)-import Data.Monoid(Monoid(..))+-- import Data.Monoid() import System.Directory import qualified System.FilePath as Local(pathSeparator,splitDirectories,joinPath,combine,makeRelative) import qualified System.FilePath.Posix as Canon(pathSeparator,splitDirectories,joinPath,takeBaseName)@@ -476,7 +480,7 @@ makeOne fdp = do -- Create 'template' :: ProtoName using "Text.ProtocolBuffers.Identifiers" let rawPackage = getPackage fdp- lift (checkDIUtf8 rawPackage) -- guard-like effect+ _ <- lift (checkDIUtf8 rawPackage) -- guard-like effect let packageName = difi (DIName rawPackage) rawParent <- getJust "makeNameMap.makeOne: " . msum $ [ D.FileOptions.java_outer_classname =<< (D.FileDescriptorProto.options fdp)@@ -569,9 +573,13 @@ makeTopLevel fdp packageName imports = mdo filePath <- getJust "makeTopLevel.filePath" (D.FileDescriptorProto.name fdp) let sEnv = SEnv packageName global- groupNames = mapMaybe validI . map toString . mapMaybe D.FieldDescriptorProto.type_name+ -- There should be no TYPE_GROUP in the extension list here, but to be safe:+ groupNamesRaw = map toString . mapMaybe D.FieldDescriptorProto.type_name . filter (maybe False (TYPE_GROUP ==) . D.FieldDescriptorProto.type') $ (F.toList . D.FileDescriptorProto.extension $ fdp)+ groupNamesI = mapMaybe validI groupNamesRaw+ groupNamesDI = mapMaybe validDI groupNamesRaw -- These fully qualified names from using hprotoc as a plugin for protoc+ groupNames = groupNamesI ++ map (last . splitDI) groupNamesDI isGroup = (`elem` groupNames) global <- runSE sEnv (do (bads,children) <- fmap unzip . sequence $@@ -600,15 +608,21 @@ *** -} +-- Fix this to look at groupNamesDI as well as the original list of groupNamesI. This fixes a bug+-- in the plug-in usage because protoc will have already resolved the type_name to a fully qualified+-- name. entityMsg :: (IName String -> Bool) -> D.DescriptorProto -> SE (IName String,Entity) entityMsg isGroup dp = annErr ("entityMsg DescriptorProto name is "++show (D.DescriptorProto.name dp)) $ mdo (self,names) <- getNames "entityMsg.name" D.DescriptorProto.name dp numbers <- fmap Set.fromList . mapM (getJust "entityMsg.field.number" . D.FieldDescriptorProto.number) . F.toList . D.DescriptorProto.field $ dp when (Set.size numbers /= Seq.length (D.DescriptorProto.field dp)) $ throwError $ "entityMsg.field.number: There must be duplicate field numbers for "++show names++"\n "++show numbers- let groupNames = mapMaybe validI . map toString . mapMaybe D.FieldDescriptorProto.type_name- . filter (maybe False (TYPE_GROUP ==) . D.FieldDescriptorProto.type') - $ (F.toList . D.DescriptorProto.field $ dp) ++ (F.toList . D.DescriptorProto.extension $ dp)+ let groupNamesRaw = map toString . mapMaybe D.FieldDescriptorProto.type_name+ . filter (maybe False (TYPE_GROUP ==) . D.FieldDescriptorProto.type') + $ (F.toList . D.DescriptorProto.field $ dp) ++ (F.toList . D.DescriptorProto.extension $ dp)+ groupNamesI = mapMaybe validI groupNamesRaw+ groupNamesDI = mapMaybe validDI groupNamesRaw -- These fully qualified names from using hprotoc as a plugin for protoc+ groupNames = groupNamesI ++ map (last . splitDI) groupNamesDI isGroup' = (`elem` groupNames) entity <- descend names entity $ do (bads,children) <- fmap unzip . sequence $@@ -661,7 +675,7 @@ entityEnumValue :: D.EnumValueDescriptorProto -> SE () entityEnumValue evdp = do -- Merely use getNames to add mangled self to ReMap state- getNames "entityEnumValue.name" D.EnumValueDescriptorProto.name evdp+ _ <- getNames "entityEnumValue.name" D.EnumValueDescriptorProto.name evdp return () entityService :: D.ServiceDescriptorProto -> SE (IName String,Entity)@@ -1105,7 +1119,7 @@ imports <- mapM (fmap getTL . load parents) importList let eEnv = makeTopLevel parsed'fdp packageName imports global'env <- either (loadFailed file) return eEnv- either (loadFailed file) return (top'FDP . getTL $ global'env)+ _ <- either (loadFailed file) return (top'FDP . getTL $ global'env) modify (M.insert file global'env) -- add to memorized results return global'env
hprotoc.cabal view
@@ -1,5 +1,5 @@ name: hprotoc-version: 1.7.9+version: 1.8.0 cabal-version: >= 1.6 build-type: Simple license: BSD3@@ -25,7 +25,7 @@ Hs-Source-Dirs: .,protoc-gen-haskell build-tools: alex ghc-options: -O2 -Wall- build-depends: protocol-buffers == 1.7.9, protocol-buffers-descriptor == 1.7.9+ build-depends: protocol-buffers == 1.8.0, protocol-buffers-descriptor == 1.8.0 build-depends: binary, utf8-string build-depends: parsec < 3, haskell-src-exts >= 1.7.0, containers,bytestring,array,