Skip to content

Use the new compiler for building images#4407

Draft
doriable wants to merge 6 commits intomainfrom
port-new-compiler
Draft

Use the new compiler for building images#4407
doriable wants to merge 6 commits intomainfrom
port-new-compiler

Conversation

@doriable
Copy link
Member

This ports our image building path to use the new compiler and handles all the necessary test changes, etc.

The new compiler brings a lot of improvements:

  • Richer diagnostics and error reporting
  • Support for Editions 2024 features
  • Incremental compilation (although this is mostly for the LSP, which is already using the new compiler)

This PR is in draft:

  • Porting of log format configurations for report rendering
  • Any testing issues with broader internal test suite

Fixes #4193

This ports our image building path to use the new compiler and handles
all the necessary test changes, etc.

The new compiler brings a lot of improvements:
- Richer diagnostics and error reporting
- Support for Editions 2024 features
- Incremental compilation (although this is mostly for the LSP, which is
  already using the new compiler)
@github-actions
Copy link
Contributor

github-actions bot commented Mar 23, 2026

The latest Buf updates on your PR. Results from workflow Buf CI / buf (pull_request).

BuildFormatLintBreakingUpdated (UTC)
✅ passed✅ passed✅ passed✅ passedMar 23, 2026, 8:49 PM

stefanvanburen added a commit that referenced this pull request Mar 23, 2026
This adds edition 2024 support to the LSP, notably in completion,
semantic tokens, and hover.

Intended to be a fast-follow to #4407.
stefanvanburen added a commit that referenced this pull request Mar 23, 2026
This adds edition 2024 support to the LSP, notably in completion,
semantic tokens, and hover.

Intended to be a fast-follow to #4407.
Comment on lines +271 to 274
fmt.Sprintf(
`%s:5:1:detected cyclic import while importing "a/a.proto"`,
filepath.FromSlash("testdata/cyclicimport/b/b.proto"),
),
Copy link
Member Author

@doriable doriable Mar 23, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I don't love this diagnostic, and the fact that the diagnostics in general are unable to provide the more robust details in a single FileAnnotation... e.g. this is the full report shows a much clearer cycle: https://github.com/bufbuild/protocompile/blob/main/experimental/ir/testdata/imports/cycle.proto.yaml.stderr.txt

That being said, if the user is printing the output to text, then they'll get the full information. This is only on the individual FileAnnotation (which would be used for things like in-line github annotations, the json output for analysis, etc.) -- and would provide a clear place where the import cycle was detected (although more details, in this case in particular would be nice). Will noodle this one a little.

stefanvanburen added a commit that referenced this pull request Mar 24, 2026
This adds edition 2024 support to the LSP, notably in completion,
semantic tokens, and hover.

Intended to be a fast-follow to #4407.
Copy link
Member

@stefanvanburen stefanvanburen left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

just a couple minor things, this is looking good!

alreadySeen,
nonImportFilenames,
seen,
xslices.ToStructMap(paths),
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

nit: call this once outside the loop?

Comment on lines +86 to +90
defer func() {
if retErr != nil {
retErr = errors.Join(retErr, moduleFile.Close())
}
}()
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think we want to close the moduleFile regardless of if we have an error, because readObjectCloserToSourceFile will copy over its contents but not close it.

Suggested change
defer func() {
if retErr != nil {
retErr = errors.Join(retErr, moduleFile.Close())
}
}()
defer moduleFile.Close()

}

if len(targetFileInfos) == 0 {
// If we had no no target files within the module after path filtering, this is an error.
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
// If we had no no target files within the module after path filtering, this is an error.
// If we had no target files within the module after path filtering, this is an error.

Just since we're nearby.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

When will edition 2024 features be supported?

2 participants