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++; } }