Skip to content

Rustfmt removes argument attribute when line is long! #4579

Closed
@Boscop

Description

@Boscop

Describe the bug

Rustfmt removes argument attribute when line is long!

To Reproduce

  1. Put this in a file temp.rs
#[macro_export]
macro_rules! main {
	() => {
		#[spirv(fragment)]
		pub fn main_fs(
			mut out_color: ::spirv_std::storage_class::Output<Vec4>,
			#[spirv(frag_coord)] frag_coord: ::spirv_std::storage_class::Input<
				::spirv_std::glam::Vec4,
			>,
			#[spirv(descriptor_set = 1)] iChannel0: ::spirv_std::storage_class::UniformConstant<
				::spirv_std::SampledImage<::spirv_std::Image2d>,
			>,
			#[spirv(descriptor_set = 1)] iChannel1: ::spirv_std::storage_class::UniformConstant<
				::spirv_std::SampledImage<::spirv_std::Image2d>,
			>,
			#[spirv(descriptor_set = 1)] iChannel2: ::spirv_std::storage_class::UniformConstant<
				::spirv_std::SampledImage<::spirv_std::Image2d>,
			>,
			#[spirv(descriptor_set = 1)] iChannel3: ::spirv_std::storage_class::UniformConstant<
				::spirv_std::SampledImage<::spirv_std::Image2d>,
			>,
			#[spirv(descriptor_set = 1)] iResolution: ::spirv_std::storage_class::UniformConstant<
				::spirv_std::glam::Vec3A,
			>,
			#[spirv(descriptor_set = 1)] iTime: ::spirv_std::storage_class::UniformConstant<f32>,
			#[spirv(descriptor_set = 1)] iMouse: ::spirv_std::storage_class::UniformConstant<
				::spirv_std::glam::Vec4,
			>,
			#[spirv(descriptor_set = 1)] iDate: ::spirv_std::storage_class::UniformConstant<
				::spirv_std::glam::Vec4,
			>,
			#[spirv(descriptor_set = 1)] iSampleRate: ::spirv_std::storage_class::UniformConstant<
				f32,
			>,
			#[spirv(descriptor_set = 1)] iFrame: ::spirv_std::storage_class::UniformConstant<i32>,
			#[spirv(descriptor_set = 1)] iTimeDelta: ::spirv_std::storage_class::UniformConstant<
				f32,
			>,
			#[spirv(descriptor_set = 1)] iFrameRate: ::spirv_std::storage_class::UniformConstant<
				f32,
			>,
			#[spirv(descriptor_set = 1)] iChannelTime: ::spirv_std::storage_class::UniformConstant<
				[f32; 4],
			>,
			#[spirv(descriptor_set = 1)] iChannelResolution: ::spirv_std::storage_class::UniformConstant<
				[::spirv_std::glam::Vec3A; 4],
			>,
			#[spirv(descriptor_set = 1)] unViewport: ::spirv_std::storage_class::UniformConstant<
				::spirv_std::glam::Vec4,
			>,
			#[spirv(descriptor_set = 1)] unCorners: ::spirv_std::storage_class::UniformConstant<
				[::spirv_std::glam::Vec3A; 5],
			>,
		) {
		}
	};
}
  1. Run rustfmt temp.rs
  2. Notice it removed the #[spirv(descriptor_set = 1)] attribute from the iChannelResolution arg!
    It turns it into this:
// ...
			#[spirv(descriptor_set = 1)] iChannelTime: ::spirv_std::storage_class::UniformConstant<
				[f32; 4],
			>,
			iChannelResolution: ::spirv_std::storage_class::UniformConstant<
						[::spirv_std::glam::Vec3A; 4],
					>,
			#[spirv(descriptor_set = 1)] unViewport: ::spirv_std::storage_class::UniformConstant<
				::spirv_std::glam::Vec4,
			>,
			#[spirv(descriptor_set = 1)] unCorners: ::spirv_std::storage_class::UniformConstant<
				[::spirv_std::glam::Vec3A; 5],
			>,
		) {
		}
	};
}

Expected behavior
Don't remove any attributes.

Meta

  • rustfmt version: rustfmt 1.4.27-nightly (580d826 2020-11-16)
  • From where did you install rustfmt?: rustup
  • How do you run rustfmt: rustfmt

Settings:

edition = "2018"
version = "Two"
newline_style = "Unix"
use_small_heuristics = "Max"
hard_tabs = true
merge_imports = true
reorder_impl_items = true
use_field_init_shorthand = true
use_try_shorthand = true
spaces_around_ranges = true
overflow_delimited_expr = true

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugPanic, non-idempotency, invalid code, etc.

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions