Skip to content

Commit

Permalink
Handle aliased imports in FullyQualifiedImport
Browse files Browse the repository at this point in the history
  • Loading branch information
Cirras committed Sep 30, 2024
1 parent d549590 commit 5141248
Show file tree
Hide file tree
Showing 2 changed files with 37 additions and 10 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -25,32 +25,32 @@
import org.sonar.plugins.communitydelphi.api.reporting.QuickFix;
import org.sonar.plugins.communitydelphi.api.reporting.QuickFixEdit;
import org.sonar.plugins.communitydelphi.api.symbol.declaration.UnitImportNameDeclaration;
import org.sonar.plugins.communitydelphi.api.symbol.declaration.UnitNameDeclaration;

@Rule(key = "FullyQualifiedImport")
public class FullyQualifiedImportCheck extends DelphiCheck {

@Override
public DelphiCheckContext visit(UnitImportNode unitImportNode, DelphiCheckContext context) {
if (!unitImportNode.isResolvedImport()) {
UnitImportNameDeclaration importDeclaration = unitImportNode.getImportNameDeclaration();
UnitNameDeclaration unitDeclaration = importDeclaration.getOriginalDeclaration();

if (unitDeclaration == null || importDeclaration.isAlias()) {
return context;
}

UnitImportNameDeclaration unitImportNameDeclaration = unitImportNode.getImportNameDeclaration();

String unitFullyQualifiedName = unitImportNameDeclaration.getOriginalDeclaration().getImage();
String unitImportName = unitImportNameDeclaration.getImage();
String actual = importDeclaration.fullyQualifiedName();
String expected = unitDeclaration.fullyQualifiedName();

if (unitImportName.length() != unitFullyQualifiedName.length()) {
if (!actual.equalsIgnoreCase(expected)) {
context
.newIssue()
.onNode(unitImportNode)
.withMessage(
"Fully qualify this unit name (found: \"%s\" expected: \"%s\").",
unitImportName, unitFullyQualifiedName)
"Fully qualify this unit name (found: \"%s\" expected: \"%s\").", actual, expected)
.withQuickFixes(
QuickFix.newFix("Fully qualify unit import")
.withEdit(
QuickFixEdit.replace(unitImportNode.getNameNode(), unitFullyQualifiedName)))
.withEdit(QuickFixEdit.replace(unitImportNode.getNameNode(), expected)))
.report();
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -82,6 +82,33 @@ void testUnresolvedImportShouldNotAddIssue() {
.verifyNoIssues();
}

@Test
void testUnitAliasImportShouldNotAddIssue() {
var testFile = new DelphiTestUnitBuilder().appendDecl("uses").appendDecl(" AliasName;");

CheckVerifier.newVerifier()
.withCheck(new FullyQualifiedImportCheck())
.withSearchPathUnit(new DelphiTestUnitBuilder().unitName("Scope.RealName"))
.withSearchPathUnit(new DelphiTestUnitBuilder().unitName("Scope.AliasName"))
.withUnitScopeName("Scope")
.withUnitAlias("AliasName", "Scope.RealName")
.onFile(testFile)
.verifyNoIssues();
}

@Test
void testUnitAliasImportThatLooksLikeUnqualifiedImportShouldNotAddIssue() {
var testFile = new DelphiTestUnitBuilder().appendDecl("uses").appendDecl(" Name;");

CheckVerifier.newVerifier()
.withCheck(new FullyQualifiedImportCheck())
.withSearchPathUnit(new DelphiTestUnitBuilder().unitName("Scope.Name"))
.withUnitScopeName("Scope")
.withUnitAlias("Name", "Scope.Name")
.onFile(testFile)
.verifyNoIssues();
}

@Test
void testNotFullyQualifiedImportShouldAddIssue() {
var importedUnit = new DelphiTestUnitBuilder().unitName("Scope.UnitU");
Expand Down

0 comments on commit 5141248

Please sign in to comment.