public function psr4ns($path)
{
$dir = dirname($path);
$composer_path = $this->root . '/composer.json';
$composer = json_decode(file_get_contents($composer_path), true);
if (isset($composer['autoload']['psr-4'])) {
$list = (array) $composer['autoload']['psr-4'];
} else {
$list = [];
}
if (isset($composer['autoload-dev']['psr-4'])) {
$dev_list = (array) $composer['autoload-dev']['psr-4'];
} else {
$dev_list = [];
}
foreach ($dev_list as $namespace => $paths) {
if (isset($list[$namespace])) {
$list[$namespace] = array_merge((array) $list[$namespace], (array) $paths);
} else {
$list[$namespace] = (array) $paths;
}
}
$namespaces = [];
foreach ($list as $namespace => $paths) {
foreach ((array) $paths as $path) {
$path = realpath($this->root . '/' . $path);
if (strpos($dir, $path) === 0) {
$sub_path = str_replace($path, '', $dir);
$sub_path = str_replace('/', '\\', $sub_path);
$sub_namespace = trim(ucwords($sub_path, '\\'), '\\');
if ($sub_namespace) {
$sub_namespace = '\\' . $sub_namespace;
}
$namespaces[] = trim($namespace, '\\') . $sub_namespace;
}
}
}
return $namespaces;
}