Skip to content

phpDocumentor Guides integration#200

Draft
wouterj wants to merge 35 commits intosymfony-tools:mainfrom
wouterj:phpdocumentor-guides
Draft

phpDocumentor Guides integration#200
wouterj wants to merge 35 commits intosymfony-tools:mainfrom
wouterj:phpdocumentor-guides

Conversation

@wouterj
Copy link
Copy Markdown
Contributor

@wouterj wouterj commented Nov 30, 2025

This merges the SymfonyExtension from https://github.com/wouterj/symfony-docs-guides into this project.

Todo

  • Add fjson output support (Implement JSON builder wouterj/symfony-docs-guides#8)
  • Add missing tabs directive (preferably, in phpDocumentor: Move tabs/tab directive to rst package phpDocumentor/guides#1316)
  • Upgrade to PHP 8.5 and Symfony 8 (requires Fix registering a service from another sub-package phpDocumentor/guides#1317)
  • Improve asset handling in phpDocumentor so we can store images and docs separately (symfony.com requirement). I have an idea for this, but no code yet.
  • Make a working prototype in the symfony.com repository, probably requires some updates to the DocsKernel and DocBuilder in this repository
  • Enable relative links, instead of absolute ones
  • Report build warnings/errors as return value of DocBuilder::build()
  • Implement missing fjson TOC information
  • Cleanup this repository, removing Doctrine RST Parser related code. Also: discuss if we want to retain functionality like PDF generation, link checking.
  • Restore license/copyright data where applicable

/*
* This file is part of the Docs Builder package.
* (c) Ryan Weaver <ryan@symfonycasts.com>
* This file is part of the Guides SymfonyExtension package.
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This looks wrong to me.

$this->filesystem->put('index.rst', $contents);
}

#[\Override]
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

we don't use this attribute in Symfony (and Psalm has a config setting to avoid requiring its usage)

@wouterj
Copy link
Copy Markdown
Contributor Author

wouterj commented Dec 1, 2025

Thanks for the detailed review, @stof :)

This was just a blunt import of the commits I made in my test project, which I started from scratch. So the goal now is to make sure the code in this PR matches whatever we were doing in this repository before. Your comments are a great start with this, as they show some unintentionally difference that we should revert from this PR before merging.

@stof
Copy link
Copy Markdown
Member

stof commented Dec 1, 2025

The CI also tells me that existing tests must be updated (which will help avoiding regressions if they can still run)

@wouterj wouterj mentioned this pull request Mar 1, 2026
@wouterj wouterj force-pushed the phpdocumentor-guides branch from bf5952b to fa579ee Compare March 15, 2026 14:40
@wouterj wouterj force-pushed the phpdocumentor-guides branch from 86ae537 to 1682f32 Compare March 15, 2026 14:44
@wouterj
Copy link
Copy Markdown
Contributor Author

wouterj commented Mar 16, 2026

Little update after this weekend: I've applied the changes applied to this repository since starting with the guides one 2 years ago (like AI github links and code highlight changes).

I've also merged the integration test fixtures from the Guides integration and this repository. This allows you to see the differences in the output, although 99% of it is whitespace so it's very hard to review. While working on the integration, I've been very careful with updating the expected files so I'm very confident the resulting HTML is still equal.

Next up: moved to PR description

@javiereguiluz
Copy link
Copy Markdown
Collaborator

Wouter, thanks a lot for the detailed update and for all this work!

use SymfonyTools\DocsBuilder\GuidesExtension\Build\BuildEnvironment;
use SymfonyTools\DocsBuilder\GuidesExtension\Build\StringBuildEnvironment;

final class DocBuilder
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

shouldn't this DocBuilder class stay outside the GuidesExtension namespace ? This looks like the entrypoint using guides more than an extension of the guides library.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yes, for now (to easily differentiate between new and old code), I've moved everything in the GuidesExtension. But some of it will be moved back once the repository is cleaned up.

"autoload": {
"psr-4": {
"SymfonyTools\\DocsBuilder\\GuidesExtension\\": "src/GuidesExtension/src",
"SymfonyDocsBuilder\\": "src"
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

is this SymfonyDocsBuilder namespace still used ?

@@ -1,3 +1,5 @@
:orphan:

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

! orphaned documents are not automatically detected

(probably not a major blocker: symfony.com only renders Prev/Next page links for very specific sections of the docs)

$context->getDestination()->put(
$context->getDestinationPath().'/'.$context->getCurrentFileName().'.fjson',
json_encode([
'parents' => [],
Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

No easy support for fetching the parent document. As far as I can find the symfony.com code, this property is never used so probably safe to ignore (cc @javiereguiluz please double check my assumption 😄)

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@wouterj would a proper document tree in phpDocumentor/guides help?

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It would be nice for a fully compatible fjson renderer, but it's not a blocker for Symfony adaption as far as I can see (as we don't use the parent data).

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

As long as this renderer is in this repo (rather than being submitted upstream), it is not an issue if it does not support full compatibility with Sphinx (it might make sense to document the known differences though, for easier maintenance).

@wouterj
Copy link
Copy Markdown
Contributor Author

wouterj commented Mar 24, 2026

Sooo, I've managed to hack this version of the DocsBuilder into the symfony.com repository. It's not nice yet, but it somewhat works.

As an example, let's take https://symfony.com/doc/8.1/quick_tour/the_architecture.html Locally with phpDocumentor Guides, this now renders like this: https://github.com/user-attachments/assets/da0d8b1f-7b5b-44ce-97df-4d5df05cd390

Comparing this with the live version, pixel by pixel, the only differences are found in the diff code blocks. And the phpDocumentor variant is actually more correct!

I've updated the JSON tests to represent the actual data we need: we need a lot of TOC information that I forgot to implement. Also, I want to refactor things a bit to merge BuildEnvironment and BuildConfig, and ideally avoid defining either as a service.

We also need better reporting on failures in DocBuilder, so we can make the build error/warning log working.

But, this is looking very promising!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Development

Successfully merging this pull request may close these issues.

4 participants