Skip to content
New issue

Have a question about this project? # for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “#”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? # to your account

Add support for API Consumers to add suppressions #2428

Merged
merged 2 commits into from
Dec 11, 2023

Conversation

paul-dingemans
Copy link
Collaborator

Description

Adding a ktlint suppression in the AST is not trivial. Not all nodes in the AST can be annotated. The insertSuppression extension function on the ktlintRuleEngine can be used to add one single suppression at either the file level or at a specific offset. If the AST node at the given offset can not be annotated, then the annotation will be added to the closest parent of the node on which the annotation can be placed.

Most of the logic for the new helper method is extracted from the KtlintSuppressionRule which handles the legacy ktlint-directives. The logic regarding insertion/modification of the 'Suppress' annotation has been extracted to an internal class which is used by the new helper function and the KtlintSuppressionRule.

KtlintSuppressionRule:

  • Fix offsets in some violations
  • Allow annotation to be placed on a value argument, value parameter, type projection or type parameter

Checklist

Before submitting the PR, please check following (checks which are not relevant may be ignored):

  • Commit message are well written. In addition to a short title, the commit message also explain why a change is made.
  • At least one commit message contains a reference Closes #<xxx> or Fixes #<xxx> (replace<xxx> with issue number)
  • Tests are added
  • KtLint format has been applied on source code itself and violations are fixed
  • PR title is short and clear (it is used as description in the release changelog)
  • PR description added (background information)

Documentation is updated. See difference between snapshot and release documentation

  • Snapshot documentation in case documentation is to be released together with a code change
  • Release documentation in case documentation is related to a released version of ktlint and has to be published as soon as the change is merged to master

KtlintSuppression is able to insert or modify a 'Suppress' annotation for a given node. It has no knowledge of the legacy ktlint-directives. The KtlintSuppressionRule handles the legacy ktlint-directives and delegates insertion/modification of the 'Suppress' annotation to the KtlintSuppression helper.

KtlintSuppressionRule:
* Fix offsets in some violations
* Allow annotation to be placed on a value argument, value parameter, type projection or type parameter
@paul-dingemans paul-dingemans added this to the 1.1 milestone Dec 11, 2023
@paul-dingemans paul-dingemans merged commit ad879b8 into master Dec 11, 2023
22 checks passed
@paul-dingemans paul-dingemans deleted the suppression-inserter branch December 11, 2023 14:28
# for free to join this conversation on GitHub. Already have an account? # to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

1 participant