Skip to content

Roadmap #1

@yijunyu

Description

@yijunyu

Tasks

Functionality

Diagnostics

  • Insert two comments around the diagnositic spans
  • Name the comments by the lint rules, and insert the rendered diagnostics into the second comment
  • Insert rendered diagnostic messages into the second comment.

Configuration

  • Add an option '--fix' to invoke flags related to all machine applicable fix rules from rust-clippy project

Measurement

  • Measure the number of warnings per KLOC through count_diagnostics.sh
  • Count clippy fixes

Git History Extraction

  • Select only the relevant marked rules
  • Print out the hunks only when they are relevant to the spans of warning locations
  • Output options
    • Add an option --patch <id> to print out the patch of HEAD.. where is a commit id and HEAD is the current work tree
    • Add an option --commit to print out the hunks only when they have been fixed by the revision
    • Add an option --pair to generate diff records into code pairs
    • Add an option --function to generate diff records with the surrounding function contexts (which was a feature of git diff but not supported by libgit2
    • Add an option --single to select only those diff records that patch exactly one warning
    • Add an option --mixed to save the messages into a file in case the information can be useful context
    • Add an option --location to markup the old_context with the warnings

Refactoring

  • Integrate with transformation systems to fix some of the warnings not yet fixed by clippy
    • Integrate with txl through txl-rs
    • list the marked rules applied to the transformations
    • Updated the TXL refactoring transformation and Rust grammar
    • List the fixed warnings and keep the remaining warnings in the output
    • Store the transformation results before and after clippy --fix into the transform folder
    • Call fix only when the number of warnings is larger than 0
    • Perform rustfmt to output of TXL transformations
  • Infer return type of functions and map them to if-let test: Result => Ok(), Option => Some()

Usability

  • Separate the output files into a different folder, so as to keep using the same ".rs" file extension
  • Save the messages into [$hash]/diagnostics.json to avoid rerun the compilation for changes of the tool features
    where $hash is the hash id of the current work copy of a git repository
  • Swap the order of diagnostic folder name from $id/diagnostics to diagnostics/$id
  • Cache computed data by serialized/deserialize diff hunks
  • Put header ahead of before and after contexts of the hunk pairs
  • Print pair pragma with ## so it is easier to differentiate it with the pragma inside warning hints

Testing

  • Test rust-diagnostics on its own history
  • Generate test results in random folders so there is less interference between tests
  • Fix the ordering of diagnostic hints so that the regression test will be repeatable
  • Make the test cases parallelizable

Maintainability

  • Move the implementation of optional functionalities into rustc_flags, fix features to reduce the dependencies
  • Refactor the code to simplify the logic by introduce a Hunk structure as unified state of various analyses
  • Removed the optional features
  • Remove dependencies requiring nightly, now only depends on stable rust
  • Use cargo-release and cargo-dist to create the new release

Metadata

Metadata

Assignees

Labels

documentationImprovements or additions to documentation

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions