diff --git a/src/Reference/ClassReference.php b/src/Reference/ClassReference.php index 56cd375..462c0bd 100644 --- a/src/Reference/ClassReference.php +++ b/src/Reference/ClassReference.php @@ -32,10 +32,27 @@ public function resolve(Environment $environment, string $data): ResolvedReferen { $className = u($data)->replace('\\\\', '\\'); + if (str_starts_with($className, 'Symfony\\AI\\')) { + // Example: + // input: Symfony\AI\Agent\Memory\StaticMemoryProvider + // output: https://github.com/symfony/ai/blob/main/src/agent/src/Memory/StaticMemoryProvider.php + + $classPath = $className->after('Symfony\\AI\\'); + [$monorepoSubRepository, $classRelativePath] = $classPath->split('\\', 2); + // because of monorepo structure, the first part of the classpath needs to be slugged + // 'Agent' -> 'agent', 'AiBundle' -> 'ai-bundle', etc. + $monorepoSubRepository = u($monorepoSubRepository)->snake('-')->lower(); + $classRelativePath = u($classRelativePath)->replace('\\', '/'); + + $url = \sprintf('https://github.com/symfony/ai/blob/main/src/%s/src/%s.php', $monorepoSubRepository, $classRelativePath); + } else { + $url = sprintf('%s/%s.php', $this->symfonyRepositoryUrl, $className->replace('\\', '/')); + } + return new ResolvedReference( $environment->getCurrentFileName(), $className->afterLast('\\'), - sprintf('%s/%s.php', $this->symfonyRepositoryUrl, $className->replace('\\', '/')), + $url, [], [ 'title' => $className, diff --git a/tests/fixtures/expected/blocks/references/class.html b/tests/fixtures/expected/blocks/references/class.html index 38412f7..c0c4547 100644 --- a/tests/fixtures/expected/blocks/references/class.html +++ b/tests/fixtures/expected/blocks/references/class.html @@ -1 +1,3 @@
+ + diff --git a/tests/fixtures/source/blocks/references/class.rst b/tests/fixtures/source/blocks/references/class.rst index 2b702b9..b66d355 100644 --- a/tests/fixtures/source/blocks/references/class.rst +++ b/tests/fixtures/source/blocks/references/class.rst @@ -1,2 +1,4 @@ :class:`Symfony\\Component\\HttpKernel\\DependencyInjection\\ContainerAwareHttpKernel` + +:class:`Symfony\\AI\\Agent\\Memory\\StaticMemoryProvider`