Code Monkey home page Code Monkey logo

Comments (6)

jhump avatar jhump commented on June 10, 2024 2

The introduce of InferImportPaths and it 'rewriting imports paths to fix mismatching ones' sounds a good idea to me, though it didn't work for this case, I'll look into it.

@MUCZ, it is possible that the InferImportPaths functionality might now work for your case, as of #575.

from protoreflect.

MUCZ avatar MUCZ commented on June 10, 2024

when i run protoc -I.. -I. --go_out=. f/f1/*.proto inside folder test, i found the same error, so it turns out that this is not a problem of protoreflect/parse but of the protoc design. it might not be the right place but i do want to ask this question: why not store the absolute path?

from protoreflect.

MUCZ avatar MUCZ commented on June 10, 2024

an interesting thing is that i can parse "f/f1/f1.proto" or "f/f1/f2.proto" singly with no problem, using the main.go above or with protoc, both work, but i can not parse both at the same time... i can understand how but not why it's designed this way...

from protoreflect.

jhump avatar jhump commented on June 10, 2024

The file's relative path is part of its identity and is also used for reflection purposes at runtime. For this reason, the absolute path is not suitable, because then the file's identity could change based on the environment in which it was compiled -- one machine could have the repo checked out into a different directory, so the absolute path is completely different from another user. Since the paths are baked into the resulting generated code, this would lead to runtime problems. For more information, check out this page: https://buf.build/docs/reference/protobuf-files-and-packages#imports

The protoparse package in this repo does actually provide a flag that may fix what you are seeing, though it is not a feature supported by protoc. On the Parser, set the InferImportPaths field to true, and it will try to rewrite imports so that file names and imports all match, even if you use different relative paths to refer to the same file.

from protoreflect.

MUCZ avatar MUCZ commented on June 10, 2024

The file's relative path is part of its identity and is also used for reflection purposes at runtime. For this reason, the absolute path is not suitable, because then the file's identity could change based on the environment in which it was compiled -- one machine could have the repo checked out into a different directory, so the absolute path is completely different from another user. Since the paths are baked into the resulting generated code, this would lead to runtime problems. For more information, check out this page: https://buf.build/docs/reference/protobuf-files-and-packages#imports

The protoparse package in this repo does actually provide a flag that may fix what you are seeing, though it is not a feature supported by protoc. On the Parser, set the InferImportPaths field to true, and it will try to rewrite imports so that file names and imports all match, even if you use different relative paths to refer to the same file.

Thank you for your reply! The doc you referred is really helpful, I was facing exactly what it describes:

If you're using protoc, this is an easy mistake to make: the flexibility of the command-line interface actually lends itself to doing this and ending up compiling with mismatching paths.

The introduce of InferImportPaths and it 'rewriting imports paths to fix mismatching ones' sounds a good idea to me, though it didn't work for this case, I'll look into it.

from protoreflect.

MUCZ avatar MUCZ commented on June 10, 2024

The introduce of InferImportPaths and it 'rewriting imports paths to fix mismatching ones' sounds a good idea to me, though it didn't work for this case, I'll look into it.

@MUCZ, it is possible that the InferImportPaths functionality might now work for your case, as of #575.

That's great! Thank you for the fix! I think this can be closed now.

from protoreflect.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.