Skip to content

docs: Pull tutorial code snippets from examples/#2544

Draft
tonyandrewmeyer wants to merge 2 commits into
canonical:mainfrom
tonyandrewmeyer:tutorial-pull-from-files
Draft

docs: Pull tutorial code snippets from examples/#2544
tonyandrewmeyer wants to merge 2 commits into
canonical:mainfrom
tonyandrewmeyer:tutorial-pull-from-files

Conversation

@tonyandrewmeyer

@tonyandrewmeyer tonyandrewmeyer commented Jun 4, 2026

Copy link
Copy Markdown
Collaborator

NOT FOR MERGING OR REVIEW! I have not done verification of side-by-side doc generation. PR opened for discussion.


Replace hardcoded code fences in the tutorial pages with Sphinx literalinclude directives that pull from the matching example charms in examples/. This keeps the tutorial automatically in sync with the canonical source, and removes ~750 lines of duplicated code.

Strategy per snippet type:

  • Full method or class: :pyobject: Class.method
  • Single line or small fragment: :start-at:/:end-at: patterns on the line content (no marker comments needed in sources)
  • Multi-line block: :start-at:/:end-before: patterns anchored on the next section
  • Full file (skipping copyright header): :start-at: with the first real line

Intermediate states that don't exist in examples/ (for example, the empty starting charm class, lines shown only to be removed, contrastive "don't do this" snippets, and a troubleshooting timeout hint) are left inline.

Preview

tonyandrewmeyer and others added 2 commits June 4, 2026 18:17
Replace hardcoded code fences in the tutorial pages with Sphinx
literalinclude directives that pull from the matching example charms
in examples/. This keeps the tutorial automatically in sync with the
canonical source, and removes ~750 lines of duplicated code.

Strategy per snippet type:
- Full method or class: :pyobject: Class.method
- Single line or small fragment: :start-at:/:end-at: patterns on the
  line content (no marker comments needed in sources)
- Multi-line block: :start-at:/:end-before: patterns anchored on the
  next section
- Full file (skipping copyright header): :start-at: with the first
  real line

Intermediate states that don't exist in examples/ (e.g. the empty
starting charm class, lines shown only to be removed, contrastive
"don't do this" snippets, and a troubleshooting timeout hint) are
left inline.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
@james-garner-canonical

Copy link
Copy Markdown
Contributor

This is super cool! I didn't know Sphinx could do this.

Comment on lines +57 to 61
```{literalinclude} ../../../examples/k8s-1-minimal/charmcraft.yaml
:language: yaml
:start-at: 'title: Web Server Demo'
:end-at: how to write a Kubernetes charm with Ops.
```

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

We could use start-after and end-after with comment anchors in cases where we worry that this won't be robust. Thinking about this case specifically, I guess Sphinx would yell at us if we changed the end line of the description so there was no match, so this seems great as-is.

tonyandrewmeyer added a commit to tonyandrewmeyer/operator that referenced this pull request Jun 8, 2026
Per review feedback, exclude docs/tutorial/ from ruff entirely (the
tutorial will be migrated to literalinclude separately in canonical#2544) and
drop the second 'quote-style = preserve' ruff format pass. The
remaining docs now use single quotes consistently with the rest of the
project.

Also add docs/ruff.toml with line-length = 80 so code snippets in the
docs wrap at a width that doesn't require horizontal scrolling when
rendered.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants