Skip to content

Implement removeImports method #60

@DenTray

Description

@DenTray

Description

What needs to be done?

Implement a method removeImports(array $imports, bool $force = false) that removes specified imports from a file only after verifying that the import is no longer used anywhere in the file. The method should handle cases when it is called not directly by the user, but through other methods (visitors) that modify the nodes of the syntax tree. In such cases, removeImports must detect changes to nodes made by other visitors, verify that the import is unused after these changes, and then proceed with removal.

If force is set to true, the import should be removed from the file even if it is used somewhere.

Expected Outcome

What is the expected result?

  • The method removes only those imports that are confirmed to be unused in the file.
  • It accurately accounts for any modifications to the syntax tree by other methods or visitors before deciding to remove the import.
  • No import that is still in use remains deleted.
  • The method operates correctly whether called directly or indirectly via other tree-modifying visitors/methods.

Verification Scenarios

How can this be tested?

  • Test calling removeImports directly with imports that are used and unused, verify only unused imports are removed.
  • Test calling removeImports indirectly after other visitors modify nodes that make imports unused, verify imports are removed only if confirmed unused after modifications.
  • Test by calling the removeImports with force=true and make sure that imports are removed even if they are used in the file.
  • Modify nodes externally that affect import usage, then call removeImports and verify it correctly recognizes the updated usage state.
  • Confirm no import used anywhere in the tree is deleted.
  • Ensure no runtime errors occur when imports are removed during indirect calls.
  • Confirm no debug output or error traces appear in logs or console during these operations.


Metadata

Metadata

Assignees

Labels

No labels
No labels
No fields configured for Feature.

Projects

No projects

Relationships

None yet

Development

No branches or pull requests

Issue actions