Skip to content

Commit

Permalink
Merge branch 'master' of github.com:yireo/Yireo_ExtensionChecker
Browse files Browse the repository at this point in the history
  • Loading branch information
jissereitsma committed Jan 21, 2025
2 parents 0245b02 + 082557e commit 579fbc1
Show file tree
Hide file tree
Showing 6 changed files with 128 additions and 5 deletions.
11 changes: 11 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,17 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
## [Unreleased]
- Allow for whitelisting specific modules like `Magento_Store`

# [2.5.1] = 21 January 2025
### Fixed
- Not every occurance of find() is a CLI command (#58 @gwharton)

# [2.5.0] = 6 January 2025
### Fixed
- Prevent deps from deps to be reported #26

### Added
- New command `inspect-class`

# [2.4.4] = 29 August 2024
### Fixed
- Prevent exception when require and/or require-dev is empty
Expand Down
105 changes: 105 additions & 0 deletions Console/Command/InspectClassCommand.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,105 @@
<?php declare(strict_types=1);

/**
* Yireo ExtensionChecker for Magento
*
* @package Yireo_ExtensionChecker
* @author Yireo (https://www.yireo.com/)
* @copyright Copyright 2018 Yireo (https://www.yireo.com/)
* @license Open Source License (OSL v3)
*/

namespace Yireo\ExtensionChecker\Console\Command;

use Composer\Console\Input\InputArgument;
use InvalidArgumentException;
use Magento\Framework\Serialize\SerializerInterface;
use ReflectionException;
use Symfony\Component\Console\Command\Command;
use Symfony\Component\Console\Helper\Table;
use Symfony\Component\Console\Input\InputInterface as Input;
use Symfony\Component\Console\Input\InputOption;
use Symfony\Component\Console\Output\OutputInterface as Output;
use Yireo\ExtensionChecker\PhpClass\ClassInspector;

class InspectClassCommand extends Command
{
private SerializerInterface $serializer;
private ClassInspector $classInspector;

/**
* DeleteRuleCommand constructor.
*
* @param SerializerInterface $serializer
* @param ModuleCollector $moduleCollector
* @param null $name
*/
public function __construct(
SerializerInterface $serializer,
ClassInspector $classInspector,
$name = null
) {
parent::__construct($name);
$this->serializer = $serializer;
$this->classInspector = $classInspector;
}

/**
* Configure this command
*/
protected function configure()
{
$this->setName('yireo_extensionchecker:inspect-class');
$this->setDescription('Inspect PHP class');

$this->addArgument(
'className',
InputArgument::REQUIRED,
'PHP class name'
);
}

/**
* @param Input $input
* @param Output $output
*
* @return int
* @throws ReflectionException
*/
protected function execute(Input $input, Output $output): int
{
$className = (string)$input->getArgument('className');
$dependencies = $this->classInspector->setClassName($className)->getDependencies();

$table = new Table($output);
$table->setHeaders(['Class name', 'Class type']);

foreach ($dependencies as $className) {
if (strstr($className, '\\Test\\')) {
continue;
}

$table->addRow([
$className,
$this->getClassType($className)
]);
}

$table->render();

return Command::SUCCESS;
}

/**
* @param string $className
* @return string
*/
private function getClassType(string $className): string
{
if (interface_exists($className)) {
return 'interface';
}

return 'class';
}
}
6 changes: 3 additions & 3 deletions PhpClass/ClassInspector.php
Original file line number Diff line number Diff line change
Expand Up @@ -99,11 +99,11 @@ public function getDependencies(): array
$dependencies = [];

if ($object->getParentClass()) {
//$dependencies[] = $object->getParentClass()->getName();
$dependencies[] = $object->getParentClass()->getName();
}

$dependencies = array_merge($dependencies, $this->getDependenciesFromConstructor());
$dependencies = array_merge($dependencies, $this->getImplementedInterfaceNames());
//$dependencies = array_merge($dependencies, $this->getDependenciesFromConstructor());
//$dependencies = array_merge($dependencies, $this->getImplementedInterfaceNames());

$importedClasses = $this->tokenizer->getImportedClassnamesFromFile($this->getFilename());
foreach ($importedClasses as $importedClass) {
Expand Down
8 changes: 7 additions & 1 deletion PhpClass/ClassInspector/CommandClassDetector.php
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
namespace Yireo\ExtensionChecker\PhpClass\ClassInspector;

use Magento\Framework\Console\Cli as CliApplication;
use Symfony\Component\Console\Exception\CommandNotFoundException;

class CommandClassDetector implements ClassDetectorInterface
{
Expand All @@ -23,7 +24,12 @@ public function getClassNames(string $phpFileContent): array
$classnames = [];

foreach ($matches[1] as $commandName) {
$command = $this->cliApplication->find($commandName);
try {
$command = $this->cliApplication->find($commandName);
} catch (CommandNotFoundException $exception) {
continue;
}

$classnames[] = get_class($command);
}

Expand Down
2 changes: 1 addition & 1 deletion composer.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
"name": "yireo/magento2-extensionchecker",
"license": "OSL-3.0",
"type": "magento2-module",
"version": "2.4.4",
"version": "2.5.1",
"homepage": "https://github.com/yireo/Yireo_ExtensionChecker",
"description": "Scan the code of a Magento module",
"keywords": [
Expand Down
1 change: 1 addition & 0 deletions etc/di.xml
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
<item name="yireo_extensionchecker_scan" xsi:type="object">Yireo\ExtensionChecker\Console\Command\ScanCommand</item>
<item name="yireo_extensionchecker_list_dependencies" xsi:type="object">Yireo\ExtensionChecker\Console\Command\ListDependenciesCommand</item>
<item name="yireo_extensionchecker_list_classes" xsi:type="object">Yireo\ExtensionChecker\Console\Command\ListClassesCommand</item>
<item name="yireo_extensionchecker_inspect_class" xsi:type="object">Yireo\ExtensionChecker\Console\Command\InspectClassCommand</item>
<item name="yireo_extensionchecker_create_plantuml_diagram" xsi:type="object">Yireo\ExtensionChecker\Console\Command\CreatePlantUmlDiagramCommand</item>
<item name="yireo_extensionchecker_check_magento_version" xsi:type="object">Yireo\ExtensionChecker\Console\Command\CheckMagentoVersionCommand</item>
<item name="yireo_extensionchecker_list_modules" xsi:type="object">Yireo\ExtensionChecker\Console\Command\ListModulesCommand</item>
Expand Down

0 comments on commit 579fbc1

Please sign in to comment.