Help:Contributing/code: Difference between revisions

From Wikibase
Jump to navigation Jump to search
Options table with live examples, Markdown comparison table, SPARQL examples; drop code-snippet vocabulary note (via update-page on MediaWiki MCP Server)
Document code-snippet items (Special:AddCodeSnippet) — semantic snippets reserved for reusable code (known-algorithm implementations); in-page code stays the default (via update-page on MediaWiki MCP Server)
 
(21 intermediate revisions by 2 users not shown)
Line 1: Line 1:
Code appears on this wikibase in two places: as content on wiki pages (this page) and as data (code-snippet items created via [[Special:AddCodeSnippet]]). This page covers the former.
Code appears on this wikibase in two forms; this page covers both:
 
* '''In-page code''' — written directly on a page with the block and inline methods below. This is the normal case: use it whenever the code belongs to the page it is on.
* '''Semantic code snippets''' — code stored once as data, a [[Special:AddCodeSnippet|code-snippet item]], reusable and linked to what it implements. Reserve them for snippets that are likely to be reused — implementations of known algorithms such as A* — see [[#Code-snippet items|Code-snippet items]] below.


== Code blocks on wiki pages ==
== Code blocks on wiki pages ==


{| class="wikitable" style="width:100%"
{| class="wikitable" style="width:100%"
! What you want !! What you type !! What you get
|-
|-
! Description !! You type !! You get
| Plain block — exactly as typed, no wiki markup, HTML escaped. Safe for logs and config pastes.
| <syntaxhighlight lang="wikitext" copy><pre>[2026-08-19 14:32:01] wikibase.updater: entity Q42 updated</pre></syntaxhighlight>
| <pre>[2026-08-19 14:32:01] wikibase.updater: entity Q42 updated</pre>
|-
|-
| Plain preformatted block — text exactly as typed, no wiki markup interpreted, HTML escaped. Safe for pasting raw code.
| Highlighted block — Pygments colours and a copy button.
| &lt;pre&gt;print("hello")&lt;/pre&gt;
| <pre>&lt;syntaxhighlight lang="sparql" copy&gt;SELECT ?item WHERE { ?item wdt:P1 wd:Q6 } LIMIT 5&lt;/syntaxhighlight&gt;</pre>
| <pre>print("hello")</pre>
| <syntaxhighlight lang="sparql" copy>SELECT ?item WHERE { ?item wdt:P1 wd:Q6 } LIMIT 5</syntaxhighlight>
|-
|-
| Syntax-highlighted block Pygments highlighting and a copy button (top right of the block).
| Plain inline code monospace in a sentence, no colours. For short tokens with no markup-significant characters.
| &lt;syntaxhighlight lang="sparql"&gt;SELECT ?item WHERE { ?item wdt:P1 wd:Q6 } LIMIT 5&lt;/syntaxhighlight&gt;
| <syntaxhighlight lang="wikitext" inline><code>latestId</code></syntaxhighlight>
| <syntaxhighlight lang="sparql">SELECT ?item WHERE { ?item wdt:P1 wd:Q6 } LIMIT 5</syntaxhighlight>
| <code>latestId</code>
|-
|-
| Inline code — monospace within a sentence.
| For highlighted inline code — monospace in a sentence, with colours.
| &lt;code&gt;print("hello")&lt;/code&gt;
| <pre>&lt;syntaxhighlight lang="python" inline&gt;print("hello")&lt;/syntaxhighlight&gt;</pre>
| <code>print("hello")</code>
| <syntaxhighlight lang="python" inline>print("hello")</syntaxhighlight>
|}
|}


== Which languages can be highlighted ==
Anything inside <syntaxhighlight lang="text" inline><syntaxhighlight></syntaxhighlight> or <syntaxhighlight lang="text" inline><pre></syntaxhighlight> is rendered literally — wiki markup and HTML are not interpreted.
 
<blockquote>
'''Don't wrap Wikimarkup content inside code tags''' — it will not be parsed. A link or template in a code tag renders as plain text: <syntaxhighlight lang="wikitext" inline>[[Special:AddCodeSnippet]]</syntaxhighlight> shows <syntaxhighlight lang="text" inline>[[Special:AddCodeSnippet]]</syntaxhighlight>, not a link. Write it as normal wikitext to get the link: [[Special:AddCodeSnippet|code-snippet items]].
</blockquote>
 
<blockquote>
Be careful with <syntaxhighlight lang="text" inline><code></syntaxhighlight>: it does not escape HTML — text such as &lt;, &gt; or &amp; inside it is read as markup. Use it for short plain tokens without those characters (<code>#</code>, <code>quarto render</code>, <code>latestId</code>); it is lighter to render. Use <syntaxhighlight lang="text" inline><syntaxhighlight lang="…" inline></syntaxhighlight> when the snippet contains &lt;, &gt; or &amp; (it escapes content) or when you want colours. Never use <syntaxhighlight lang="text" inline><code></syntaxhighlight> for blocks — <syntaxhighlight lang="text" inline><pre></syntaxhighlight> or <syntaxhighlight lang="text" inline><syntaxhighlight></syntaxhighlight> instead.
</blockquote>
 
== Most languages can be highlighted ==


Any Pygments lexer alias works as the <code>lang</code> attribute — use the lowercase canonical name:
Any Pygments lexer alias works as the <code>lang</code> attribute — use the lowercase canonical name:
Line 28: Line 44:
* Full list: [https://pygments.org/docs/lexers/ Pygments lexers] (use the alias column)
* Full list: [https://pygments.org/docs/lexers/ Pygments lexers] (use the alias column)


== Options for highlighted blocks ==
== Excellent options for <code>syntaxhighlight</code> ==
 
Every block-mode snippet carries <code>copy</code> (see the [[#House rules|house rules]]); the options below combine with it.


{| class="wikitable" style="width:100%"
{| class="wikitable" style="width:100%"
|-
! Option !! You type !! You get
! Option !! You type !! You get
|-
|-
| <code>line</code> — show line numbers
| <code>line</code> — show line numbers
| &lt;syntaxhighlight lang="sparql" line&gt;SELECT ?item WHERE {<br/>?item wdt:P1 wd:Q6 .<br/>}&lt;/syntaxhighlight&gt;
| <pre>&lt;syntaxhighlight lang="sparql" line copy&gt;SELECT ?item WHERE {
| <syntaxhighlight lang="sparql" line>SELECT ?item WHERE {
?item wdt:P1 wd:Q6 .
}&lt;/syntaxhighlight&gt;</pre>
| <syntaxhighlight lang="sparql" line copy>SELECT ?item WHERE {
?item wdt:P1 wd:Q6 .
?item wdt:P1 wd:Q6 .
}</syntaxhighlight>
}</syntaxhighlight>
|-
|-
| <code>start="{int}"</code> — first line number (with <code>line</code>)
| <code>start="5"</code> — first line number (with <code>line</code>)
| &lt;syntaxhighlight lang="sparql" line start="5"&gt;SELECT ?item WHERE {<br/>?item wdt:P1 wd:Q6 .<br/>}&lt;/syntaxhighlight&gt;
| <pre>&lt;syntaxhighlight lang="sparql" line start="5" copy&gt;SELECT ?item WHERE {
| <syntaxhighlight lang="sparql" line start="5">SELECT ?item WHERE {
?item wdt:P1 wd:Q6 .
}&lt;/syntaxhighlight&gt;</pre>
| <syntaxhighlight lang="sparql" line start="5" copy>SELECT ?item WHERE {
?item wdt:P1 wd:Q6 .
?item wdt:P1 wd:Q6 .
}</syntaxhighlight>
}</syntaxhighlight>
|-
|-
| <code>highlight</code> — highlight specific lines (comma-separated)
| <code>highlight="1,3"</code> — highlight specific lines (comma-separated)
| &lt;syntaxhighlight lang="sparql" highlight="1,3"&gt;SELECT ?item WHERE {<br/>?item wdt:P1 wd:Q6 .<br/>}&lt;/syntaxhighlight&gt;
| <pre>&lt;syntaxhighlight lang="sparql" highlight="1,3" copy&gt;SELECT ?item WHERE {
| <syntaxhighlight lang="sparql" highlight="1,3">SELECT ?item WHERE {
?item wdt:P1 wd:Q6 .
}&lt;/syntaxhighlight&gt;</pre>
| <syntaxhighlight lang="sparql" highlight="1,3" copy>SELECT ?item WHERE {
?item wdt:P1 wd:Q6 .
?item wdt:P1 wd:Q6 .
}</syntaxhighlight>
}</syntaxhighlight>
|-
|-
| <code>inline</code> — render as inline code instead of a block
| <code>inline</code> — render as inline code instead of a block
| &lt;syntaxhighlight lang="sparql" inline&gt;LIMIT&lt;/syntaxhighlight&gt;
| <pre>&lt;syntaxhighlight lang="sparql" inline&gt;LIMIT&lt;/syntaxhighlight&gt;</pre>
| <syntaxhighlight lang="sparql" inline>LIMIT</syntaxhighlight>
| <syntaxhighlight lang="sparql" inline>LIMIT</syntaxhighlight>
|-
|-
| <code>copy</code> — adds a button that copies the block
| <code>copy</code> — add a button that copies the block
| &lt;syntaxhighlight lang="sparql" copy&gt;SELECT ?item WHERE { ?item wdt:P1 wd:Q6 } LIMIT 5&lt;/syntaxhighlight&gt;
| <pre>&lt;syntaxhighlight lang="sparql" copy&gt;SELECT ?item WHERE { ?item wdt:P1 wd:Q6 } LIMIT 5&lt;/syntaxhighlight&gt;</pre>
| <syntaxhighlight lang="sparql" copy>SELECT ?item WHERE { ?item wdt:P1 wd:Q6 } LIMIT 5</syntaxhighlight>
| <syntaxhighlight lang="sparql" copy>SELECT ?item WHERE { ?item wdt:P1 wd:Q6 } LIMIT 5</syntaxhighlight>
|}
|}


<blockquote><code>inline</code> and <code>copy</code> are mutually exclusive.</blockquote>
<blockquote><code>inline</code> and <code>copy</code> are mutually exclusive — <code>copy</code> is for blocks, <code>inline</code> is for inline code.</blockquote>
 
<blockquote>
Blocks larger than 100 kB are not highlighted by default.
</blockquote>


Full parameter reference: [https://www.mediawiki.org/wiki/Extension:SyntaxHighlight#Parameters SyntaxHighlight extension parameters] (official).
Full parameter reference: [https://www.mediawiki.org/wiki/Extension:SyntaxHighlight#Parameters SyntaxHighlight extension parameters] (official).
Line 67: Line 94:
== Differences from Markdown ==
== Differences from Markdown ==


{| class="wikitable" style="width:100%"
* No fenced blocks — <syntaxhighlight lang="text" inline>```</syntaxhighlight> does nothing here. Use <syntaxhighlight lang="text" inline><pre></syntaxhighlight> or <syntaxhighlight lang="text" inline><syntaxhighlight></syntaxhighlight>.
 
* '''Every block-mode snippet include <code>copy</code>''': Use <syntaxhighlight lang="text" inline><syntaxhighlight lang="…" copy></syntaxhighlight>, so readers get a copy button.
* Prefer <syntaxhighlight lang="text" inline><syntaxhighlight lang="…"></syntaxhighlight> for anything syntax-highlightable; <syntaxhighlight lang="text" inline><pre></syntaxhighlight> for config dumps and logs where colours add noise.
 
== Code-snippet items ==
 
Most code is written in-page, with the methods above — that is the default, and it is right for one-off examples, page-specific commands and configuration dumps. A '''code-snippet item''' (a ''semantic code snippet'') stores the code instead as an [[Help:Contributing/entities|item]]: the code is kept in one place, with provenance and a semantic link to what it implements, and every embed shows that one copy.
 
'''Normally, use in-page code.''' Reserve [[Special:AddCodeSnippet]] for snippets that are ''susceptible to be reused'' — most usefully, implementations of known algorithms or techniques (A*, quicksort, …) that several pages may want to display, or that readers should be able to find by what they implement. A snippet that belongs to a single page stays in-page.
 
=== Adding a snippet ===
 
Open [[Special:AddCodeSnippet]] and fill the form:
 
{| class="wikitable"
! Field !! What it is
|-
| Label || A short title for the snippet (e.g. <code>A* search in Python</code>).
|-
|-
! Markdown habit !! On this wiki
| Content || The code itself. Paste it as-is — line breaks are preserved on save and shown again when the item is edited.
|-
|-
| Fenced code blocks (<code>```</code>)
| Programming language || The language of the code (the same Pygments list as above).
| There are no fenced blocks — <code>```</code> does nothing. Use <code>&lt;pre&gt;</code> or <code>&lt;syntaxhighlight&gt;</code>.
|-
|-
| Inline code (<code>`code`</code>)
| Implementation of || Optional: the known algorithm, technique or concept this snippet implements — search and pick the entity (several allowed, comma-separated). This link is what makes the snippet findable by what it implements.
| <code>&lt;code&gt;</code> is raw HTML: the text inside is not escaped. Type <code>&amp;lt;</code> for a literal <code>&lt;</code>, <code>&amp;gt;</code> for <code>&gt;</code>, <code>&amp;amp;</code> for <code>&amp;</code>.
|-
|-
| Literal <code>&#91;&#91;</code> and <code>&#123;&#123;</code> inside a fenced block
| Attributed to / Source / Source URL / Date || Provenance, same as [[Help:Contributing/quotation|quotations]].
| In <code>&lt;pre&gt;</code> and <code>&lt;syntaxhighlight&gt;</code> wiki markup is not interpreted — <code>&#123;&#123;</code>, <code>&#91;&#91;</code> and quotes appear literally, which is what you want for code.
|}
|}


Blocks larger than 100&nbsp;kB lose highlighting automatically (a safety guard).
Saving creates the item and redirects to it.
 
From the item page, click '''Copy embed code''' and paste the iframe on any page — this wiki or a third-party site. The embed always shows the item's current content: improving the snippet once improves every page that embeds it.


== House rules for code content ==
== Editing code-snippet items ==


* Prefer <code>&lt;syntaxhighlight lang="…"&gt;</code> for anything syntax-highlightable; use <code>&lt;pre&gt;</code> for config dumps and logs where colours add noise.
A stored code-snippet item (created via [[Special:AddCodeSnippet]]) is edited from its item page: click '''Edit content''' under the title, or go to [[Special:UpdateCodeSnippet]] with the item's id (e.g. <code>Special:UpdateCodeSnippet/Q100</code>). The code field shows the stored text exactly as entered (real line breaks); the programming-language picker carries the current value. Fields you leave blank keep their existing values.


== See also ==
== See also ==


* [[Help:Contributing/quotation]] — adding quotations
* [[Help:Contributing/math]] — adding mathematical expressions
* [https://www.mediawiki.org/wiki/Help:Formatting MediaWiki syntax 101] (official)
* [https://www.mediawiki.org/wiki/Help:Formatting MediaWiki syntax 101] (official)
* [https://www.mediawiki.org/wiki/Extension:SyntaxHighlight SyntaxHighlight extension] (official)
* [https://www.mediawiki.org/wiki/Extension:SyntaxHighlight SyntaxHighlight extension] (official)
* [https://pygments.org/docs/lexers/ Pygments lexers] — full language list
* [https://pygments.org/docs/lexers/ Pygments lexers] — full language list
* [[Help:Contributing]] — contributing to this wiki
* [[Help:Contributing]] — contributing to this wiki

Latest revision as of 15:28, 4 September 2026

Languages: English · français · Esperanto

Code appears on this wikibase in two forms; this page covers both:

  • In-page code — written directly on a page with the block and inline methods below. This is the normal case: use it whenever the code belongs to the page it is on.
  • Semantic code snippets — code stored once as data, a code-snippet item, reusable and linked to what it implements. Reserve them for snippets that are likely to be reused — implementations of known algorithms such as A* — see Code-snippet items below.

Code blocks on wiki pages

What you want What you type What you get
Plain block — exactly as typed, no wiki markup, HTML escaped. Safe for logs and config pastes.
<pre>[2026-08-19 14:32:01] wikibase.updater: entity Q42 updated</pre>
[2026-08-19 14:32:01] wikibase.updater: entity Q42 updated
Highlighted block — Pygments colours and a copy button.
<syntaxhighlight lang="sparql" copy>SELECT ?item WHERE { ?item wdt:P1 wd:Q6 } LIMIT 5</syntaxhighlight>
SELECT ?item WHERE { ?item wdt:P1 wd:Q6 } LIMIT 5
Plain inline code — monospace in a sentence, no colours. For short tokens with no markup-significant characters. <code>latestId</code> latestId
For highlighted inline code — monospace in a sentence, with colours.
<syntaxhighlight lang="python" inline>print("hello")</syntaxhighlight>
print("hello")

Anything inside <syntaxhighlight> or <pre> is rendered literally — wiki markup and HTML are not interpreted.

Don't wrap Wikimarkup content inside code tags — it will not be parsed. A link or template in a code tag renders as plain text: [[Special:AddCodeSnippet]] shows [[Special:AddCodeSnippet]], not a link. Write it as normal wikitext to get the link: code-snippet items.

Be careful with <code>: it does not escape HTML — text such as <, > or & inside it is read as markup. Use it for short plain tokens without those characters (#, quarto render, latestId); it is lighter to render. Use <syntaxhighlight lang="…" inline> when the snippet contains <, > or & (it escapes content) or when you want colours. Never use <code> for blocks — <pre> or <syntaxhighlight> instead.

Most languages can be highlighted

Any Pygments lexer alias works as the lang attribute — use the lowercase canonical name:

  • sparql — SPARQL queries (this wiki's query service)
  • python, javascript, bash, sql, json, wikitext — commonly used
  • Full list: Pygments lexers (use the alias column)

Excellent options for syntaxhighlight

Every block-mode snippet carries copy (see the house rules); the options below combine with it.

Option You type You get
line — show line numbers
<syntaxhighlight lang="sparql" line copy>SELECT ?item WHERE {
?item wdt:P1 wd:Q6 .
}</syntaxhighlight>
SELECT ?item WHERE {
?item wdt:P1 wd:Q6 .
}
start="5" — first line number (with line)
<syntaxhighlight lang="sparql" line start="5" copy>SELECT ?item WHERE {
?item wdt:P1 wd:Q6 .
}</syntaxhighlight>
SELECT ?item WHERE {
?item wdt:P1 wd:Q6 .
}
highlight="1,3" — highlight specific lines (comma-separated)
<syntaxhighlight lang="sparql" highlight="1,3" copy>SELECT ?item WHERE {
?item wdt:P1 wd:Q6 .
}</syntaxhighlight>
SELECT ?item WHERE {
?item wdt:P1 wd:Q6 .
}
inline — render as inline code instead of a block
<syntaxhighlight lang="sparql" inline>LIMIT</syntaxhighlight>
LIMIT
copy — add a button that copies the block
<syntaxhighlight lang="sparql" copy>SELECT ?item WHERE { ?item wdt:P1 wd:Q6 } LIMIT 5</syntaxhighlight>
SELECT ?item WHERE { ?item wdt:P1 wd:Q6 } LIMIT 5

inline and copy are mutually exclusive — copy is for blocks, inline is for inline code.

Blocks larger than 100 kB are not highlighted by default.

Full parameter reference: SyntaxHighlight extension parameters (official).

Differences from Markdown

  • No fenced blocks — ``` does nothing here. Use <pre> or <syntaxhighlight>.
  • Every block-mode snippet include copy: Use <syntaxhighlight lang="…" copy>, so readers get a copy button.
  • Prefer <syntaxhighlight lang="…"> for anything syntax-highlightable; <pre> for config dumps and logs where colours add noise.

Code-snippet items

Most code is written in-page, with the methods above — that is the default, and it is right for one-off examples, page-specific commands and configuration dumps. A code-snippet item (a semantic code snippet) stores the code instead as an item: the code is kept in one place, with provenance and a semantic link to what it implements, and every embed shows that one copy.

Normally, use in-page code. Reserve Special:AddCodeSnippet for snippets that are susceptible to be reused — most usefully, implementations of known algorithms or techniques (A*, quicksort, …) that several pages may want to display, or that readers should be able to find by what they implement. A snippet that belongs to a single page stays in-page.

Adding a snippet

Open Special:AddCodeSnippet and fill the form:

Field What it is
Label A short title for the snippet (e.g. A* search in Python).
Content The code itself. Paste it as-is — line breaks are preserved on save and shown again when the item is edited.
Programming language The language of the code (the same Pygments list as above).
Implementation of Optional: the known algorithm, technique or concept this snippet implements — search and pick the entity (several allowed, comma-separated). This link is what makes the snippet findable by what it implements.
Attributed to / Source / Source URL / Date Provenance, same as quotations.

Saving creates the item and redirects to it.

From the item page, click Copy embed code and paste the iframe on any page — this wiki or a third-party site. The embed always shows the item's current content: improving the snippet once improves every page that embeds it.

Editing code-snippet items

A stored code-snippet item (created via Special:AddCodeSnippet) is edited from its item page: click Edit content under the title, or go to Special:UpdateCodeSnippet with the item's id (e.g. Special:UpdateCodeSnippet/Q100). The code field shows the stored text exactly as entered (real line breaks); the programming-language picker carries the current value. Fields you leave blank keep their existing values.

See also