Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
35 changes: 35 additions & 0 deletions pr-analysis-16201.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
# PR #16201: Workflow Design Impact Analysis

## Affected Workflows
- **lint-development**: This workflow is impacted because the PR modifies an existing lint implementation in `clippy_lints/src/write/empty_string.rs` (part of `clippy_lints/src/`) and updates UI tests in `tests/ui/` (listed in `relevant_files` for lint-development in `.exp/workflows.json`). The change fixes a bug in suggestion span calculation for the `println_empty_string` lint when a trailing comma follows the empty string argument.
- **testing**: This workflow is affected due to direct updates to UI test files (`tests/ui/println_empty_string.rs`, `.fixed`, `.stderr`), which are core to verifying lint diagnostics and fixes. New test cases are added for edge cases like trailing commas, `eprintln!`, and nested contexts.

## lint-development Analysis
### Summary of design changes
The PR enhances the `check` function in `empty_string.rs` by adding logic to extend the `format_args.span` if the next character is a comma (`forward_span.check_source_text(cx, |s| s.ends_with(','))`), using `SpanRangeExt` from `clippy_utils::source`. This ensures the diagnostic span includes the trailing comma, allowing the suggestion to correctly remove both the empty string and the comma, fixing a compilation error in the suggested code.

This is a targeted improvement within the existing lint pass implementation (a `LateLintPass` checking `FormatArgs` in macros like `println!`). It leverages compiler spans and source text utilities but does not alter components, sequences, or flows in the workflow design. The scaffolding sequence (using `cargo dev new_lint` etc.) and integration sequence (registering passes and emitting diagnostics) remain unchanged.

**Potential benefits**: More accurate auto-fixes, reducing user friction and preventing invalid suggestions.
**Implications**: Demonstrates the extensibility of lint implementations for handling syntax variations; may require similar checks in other lints using macro args.

No Mermaid diagrams require updates, as the high-level design in `.exp/design-workflow-5-lint-development.md` is unaffected.

## testing Analysis
### Summary of design changes
The PR expands the `println_empty_string` UI test suite by adding test cases for:
- Trailing comma after empty string: `println!("",);`
- Equivalent for `eprintln!`
- Multi-line empty string literals followed by comma
- These in nested contexts (e.g., match arms)

Updates `.stderr` to reflect adjusted diagnostic spans and help messages, and `.fixed` to show correct removal (e.g., `println!();` without comma).

This follows the standard UI testing process: when lint behavior changes, update input files and expected outputs to validate new diagnostics and fixes. It aligns with the UI Tests Sequence Diagram, where `compile-test` spawns `clippy-driver`, compares outputs, and (in dev) blesses updates.

No changes to testing infrastructure, components, or sequences; just content refinement for better coverage.

**Potential benefits**: Increased test robustness against syntax edge cases, catching regressions early.
**Implications**: Highlights the importance of comprehensive UI tests for lint suggestions; manual updates here mimic `cargo bless` in practice.

No Mermaid diagrams require updates, as the design in `.exp/design-workflow-4-testing.md` remains accurate.