From 1fd33a418ff31618ca54d3d1a77c42fb1146864f Mon Sep 17 00:00:00 2001
From: Philipp Scheit
Date: Sun, 6 Oct 2013 08:41:38 +0200
Subject: [PATCH 1/3] change StaticCodeAnalysis to return line 0 for namespace
if no namespace is in file
---
.../TokenReflection/StaticCodeAnalysis.php | 4 ++-
.../StaticCodeAnalysisTest.php | 28 +++++++++++++++++++
2 files changed, 31 insertions(+), 1 deletion(-)
create mode 100644 src/test/QafooLabs/Refactoring/Adapters/TokenReflection/StaticCodeAnalysisTest.php
diff --git a/src/main/QafooLabs/Refactoring/Adapters/TokenReflection/StaticCodeAnalysis.php b/src/main/QafooLabs/Refactoring/Adapters/TokenReflection/StaticCodeAnalysis.php
index 0d66146..63f876a 100644
--- a/src/main/QafooLabs/Refactoring/Adapters/TokenReflection/StaticCodeAnalysis.php
+++ b/src/main/QafooLabs/Refactoring/Adapters/TokenReflection/StaticCodeAnalysis.php
@@ -22,6 +22,7 @@
use TokenReflection\Broker;
use TokenReflection\Broker\Backend\Memory;
+use TokenReflection\ReflectionNamespace;
class StaticCodeAnalysis extends CodeAnalysis
{
@@ -143,11 +144,12 @@ public function findClasses(File $file)
$file = $this->broker->processString($file->getCode(), $file->getRelativePath(), true);
foreach ($file->getNamespaces() as $namespace) {
+ $noNamespace = ReflectionNamespace::NO_NAMESPACE_NAME === $namespace->getName();
foreach ($namespace->getClasses() as $class) {
$classes[] = new PhpClass(
PhpName::createDeclarationName($class->getName()),
$class->getStartLine(),
- $namespace->getStartLine()
+ $noNamespace ? 0 : $namespace->getStartLine()
);
}
}
diff --git a/src/test/QafooLabs/Refactoring/Adapters/TokenReflection/StaticCodeAnalysisTest.php b/src/test/QafooLabs/Refactoring/Adapters/TokenReflection/StaticCodeAnalysisTest.php
new file mode 100644
index 0000000..b24394e
--- /dev/null
+++ b/src/test/QafooLabs/Refactoring/Adapters/TokenReflection/StaticCodeAnalysisTest.php
@@ -0,0 +1,28 @@
+findClasses($file);
+ $class = $classes[0];
+
+ $this->assertEquals(0, $class->namespaceDeclarationLine(), 'namespace declaration line for file without namespace');
+ }
+}
From 81bc3740421121e06ed843b8fc8b12134bd2ecca Mon Sep 17 00:00:00 2001
From: Philipp Scheit
Date: Sun, 6 Oct 2013 09:10:31 +0200
Subject: [PATCH 2/3] [OptimizeUse] add failing feature for #32
---
features/optimize_use.feature | 34 ++++++++++++++++++++++++++++++++++
1 file changed, 34 insertions(+)
diff --git a/features/optimize_use.feature b/features/optimize_use.feature
index 4fb767c..b2507e2 100644
--- a/features/optimize_use.feature
+++ b/features/optimize_use.feature
@@ -47,4 +47,38 @@ Feature: Optimize use
return $service;
"""
+ Scenario: Organize use for file without namespace and other uses
+ Given a PHP File named "src/Foo.php" with:
+ """
+
Date: Sun, 6 Oct 2013 09:11:08 +0200
Subject: [PATCH 3/3] [OptimizeUse] fix issue #32
---
.../QafooLabs/Refactoring/Application/OptimizeUse.php | 11 +++++++++--
1 file changed, 9 insertions(+), 2 deletions(-)
diff --git a/src/main/QafooLabs/Refactoring/Application/OptimizeUse.php b/src/main/QafooLabs/Refactoring/Application/OptimizeUse.php
index ec950ff..ce9d8de 100644
--- a/src/main/QafooLabs/Refactoring/Application/OptimizeUse.php
+++ b/src/main/QafooLabs/Refactoring/Application/OptimizeUse.php
@@ -37,6 +37,7 @@ public function refactor(File $file)
$occurances = $this->phpNameScanner->findNames($file);
$class = $classes[0];
+ $appendNewLine = 0 === $class->namespaceDeclarationLine();
$lastUseStatementLine = $class->namespaceDeclarationLine() + 2;
$usedNames = array();
$fqcns = array();
@@ -44,7 +45,7 @@ public function refactor(File $file)
foreach ($occurances as $occurance) {
$name = $occurance->name();
- if ($name->type() === PhpName::TYPE_NAMESPACE) {
+ if ($name->type() === PhpName::TYPE_NAMESPACE || $name->type() === PhpName::TYPE_CLASS) {
continue;
}
@@ -67,7 +68,13 @@ public function refactor(File $file)
$buffer->replaceString($occurance->declarationLine(), '\\'.$name->fullyQualifiedName(), $name->shortname());
if (!in_array($name->fullyQualifiedName(), $usedNames)) {
- $buffer->append($lastUseStatementLine, array(sprintf('use %s;', $name->fullyQualifiedName())));
+ $lines = array(sprintf('use %s;', $name->fullyQualifiedName()));
+ if ($appendNewLine) {
+ $appendNewLine = FALSE;
+ $lines[] = '';
+ }
+
+ $buffer->append($lastUseStatementLine, $lines);
$lastUseStatementLine++;
}
}