Files
SwiftLint/Macros.html
2025-06-22 14:27:57 +00:00

523 lines
30 KiB
HTML
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<!DOCTYPE html>
<html lang="en">
<head>
<title>Macros Reference</title>
<link rel="stylesheet" type="text/css" href="css/jazzy.css" />
<link rel="stylesheet" type="text/css" href="css/highlight.css" />
<meta charset="utf-8">
<script src="js/jquery.min.js" defer></script>
<script src="js/jazzy.js" defer></script>
<script src="js/lunr.min.js" defer></script>
<script src="js/typeahead.jquery.js" defer></script>
<script src="js/jazzy.search.js" defer></script>
</head>
<body>
<a name="//apple_ref/swift/Section/Macros" class="dashAnchor"></a>
<a title="Macros Reference"></a>
<header class="header">
<p class="header-col header-col--primary">
<a class="header-link" href="index.html">
SwiftLintCore 0.59.1 Docs
</a>
(100% documented)
</p>
<div class="header-col--secondary">
<form role="search" action="search.json">
<input type="text" placeholder="Search documentation" data-typeahead>
</form>
</div>
<p class="header-col header-col--secondary">
<a class="header-link" href="https://github.com/realm/SwiftLint">
<img class="header-icon" src="img/gh.png" alt="GitHub"/>
View on GitHub
</a>
</p>
<p class="header-col header-col--secondary">
<a class="header-link" href="dash-feed://https%3A%2F%2Frealm.github.io%2FSwiftLint%2Fdocsets%2FSwiftLintCore.xml">
<img class="header-icon" src="img/dash.png" alt="Dash"/>
Install in Dash
</a>
</p>
</header>
<p class="breadcrumbs">
<a class="breadcrumb" href="index.html">SwiftLintCore</a>
<img class="carat" src="img/carat.png" alt=""/>
Macros Reference
</p>
<div class="content-wrapper">
<nav class="navigation">
<ul class="nav-groups">
<li class="nav-group-name">
<a class="nav-group-name-link" href="Rules.html">Rules</a>
<ul class="nav-group-tasks">
<li class="nav-group-task">
<a class="nav-group-task-link" href="rule-directory.html">Rule Directory</a>
</li>
</ul>
</li>
<li class="nav-group-name">
<a class="nav-group-name-link" href="Classes.html">Classes</a>
<ul class="nav-group-tasks">
<li class="nav-group-task">
<a class="nav-group-task-link" href="Classes/BodyLengthVisitor.html">BodyLengthVisitor</a>
</li>
<li class="nav-group-task">
<a class="nav-group-task-link" href="Classes/CodeBlockVisitor.html">CodeBlockVisitor</a>
</li>
<li class="nav-group-task">
<a class="nav-group-task-link" href="Classes/CodeIndentingRewriter.html">CodeIndentingRewriter</a>
</li>
<li class="nav-group-task">
<a class="nav-group-task-link" href="Classes/CodeIndentingRewriter/IndentationStyle.html"> IndentationStyle</a>
</li>
<li class="nav-group-task">
<a class="nav-group-task-link" href="Classes/DeclaredIdentifiersTrackingVisitor.html">DeclaredIdentifiersTrackingVisitor</a>
</li>
<li class="nav-group-task">
<a class="nav-group-task-link" href="Classes/RuleRegistry.html">RuleRegistry</a>
</li>
<li class="nav-group-task">
<a class="nav-group-task-link" href="Classes/RuleStorage.html">RuleStorage</a>
</li>
<li class="nav-group-task">
<a class="nav-group-task-link" href="Classes/SwiftLintFile.html">SwiftLintFile</a>
</li>
<li class="nav-group-task">
<a class="nav-group-task-link" href="Classes/ViolationsSyntaxRewriter.html">ViolationsSyntaxRewriter</a>
</li>
<li class="nav-group-task">
<a class="nav-group-task-link" href="Classes/ViolationsSyntaxVisitor.html">ViolationsSyntaxVisitor</a>
</li>
</ul>
</li>
<li class="nav-group-name">
<a class="nav-group-name-link" href="Enums.html">Enumerations</a>
<ul class="nav-group-tasks">
<li class="nav-group-task">
<a class="nav-group-task-link" href="Enums/AccessControlLevel.html">AccessControlLevel</a>
</li>
<li class="nav-group-task">
<a class="nav-group-task-link" href="Enums/CurrentRule.html">CurrentRule</a>
</li>
<li class="nav-group-task">
<a class="nav-group-task-link" href="Enums/IdentifierDeclaration.html">IdentifierDeclaration</a>
</li>
<li class="nav-group-task">
<a class="nav-group-task-link" href="Enums/Issue.html">Issue</a>
</li>
<li class="nav-group-task">
<a class="nav-group-task-link" href="Enums/OptionType.html">OptionType</a>
</li>
<li class="nav-group-task">
<a class="nav-group-task-link" href="Enums/RuleIdentifier.html">RuleIdentifier</a>
</li>
<li class="nav-group-task">
<a class="nav-group-task-link" href="Enums/RuleKind.html">RuleKind</a>
</li>
<li class="nav-group-task">
<a class="nav-group-task-link" href="Enums/RuleListError.html">RuleListError</a>
</li>
<li class="nav-group-task">
<a class="nav-group-task-link" href="Enums/SwiftExpressionKind.html">SwiftExpressionKind</a>
</li>
<li class="nav-group-task">
<a class="nav-group-task-link" href="Enums/SwiftSyntaxKindBridge.html">SwiftSyntaxKindBridge</a>
</li>
<li class="nav-group-task">
<a class="nav-group-task-link" href="Enums/ViolationSeverity.html">ViolationSeverity</a>
</li>
</ul>
</li>
<li class="nav-group-name">
<a class="nav-group-name-link" href="Extensions.html">Extensions</a>
<ul class="nav-group-tasks">
<li class="nav-group-task">
<a class="nav-group-task-link" href="Extensions/Array.html">Array</a>
</li>
<li class="nav-group-task">
<a class="nav-group-task-link" href="Extensions/Bool.html">Bool</a>
</li>
<li class="nav-group-task">
<a class="nav-group-task-link" href="Extensions/Double.html">Double</a>
</li>
<li class="nav-group-task">
<a class="nav-group-task-link" href="Extensions/Int.html">Int</a>
</li>
<li class="nav-group-task">
<a class="nav-group-task-link" href="Extensions/Optional.html">Optional</a>
</li>
<li class="nav-group-task">
<a class="nav-group-task-link" href="Extensions/Set.html">Set</a>
</li>
<li class="nav-group-task">
<a class="nav-group-task-link" href="Extensions/String.html">String</a>
</li>
</ul>
</li>
<li class="nav-group-name">
<a class="nav-group-name-link" href="Protocols.html">Protocols</a>
<ul class="nav-group-tasks">
<li class="nav-group-task">
<a class="nav-group-task-link" href="Protocols/ASTRule.html">ASTRule</a>
</li>
<li class="nav-group-task">
<a class="nav-group-task-link" href="Protocols/AcceptableByConfigurationElement.html">AcceptableByConfigurationElement</a>
</li>
<li class="nav-group-task">
<a class="nav-group-task-link" href="Protocols/AnalyzerRule.html">AnalyzerRule</a>
</li>
<li class="nav-group-task">
<a class="nav-group-task-link" href="Protocols.html#/s:13SwiftLintCore17AnyCollectingRuleP">AnyCollectingRule</a>
</li>
<li class="nav-group-task">
<a class="nav-group-task-link" href="Protocols/CacheDescriptionProvider.html">CacheDescriptionProvider</a>
</li>
<li class="nav-group-task">
<a class="nav-group-task-link" href="Protocols/CollectingRule.html">CollectingRule</a>
</li>
<li class="nav-group-task">
<a class="nav-group-task-link" href="Protocols/ConditionallySourceKitFree.html">ConditionallySourceKitFree</a>
</li>
<li class="nav-group-task">
<a class="nav-group-task-link" href="Protocols/CorrectableRule.html">CorrectableRule</a>
</li>
<li class="nav-group-task">
<a class="nav-group-task-link" href="Protocols/Documentable.html">Documentable</a>
</li>
<li class="nav-group-task">
<a class="nav-group-task-link" href="Protocols.html#/s:13SwiftLintCore19InlinableOptionTypeP">InlinableOptionType</a>
</li>
<li class="nav-group-task">
<a class="nav-group-task-link" href="Protocols.html#/s:13SwiftLintCore9OptInRuleP">OptInRule</a>
</li>
<li class="nav-group-task">
<a class="nav-group-task-link" href="Protocols/Rule.html">Rule</a>
</li>
<li class="nav-group-task">
<a class="nav-group-task-link" href="Protocols/RuleConfiguration.html">RuleConfiguration</a>
</li>
<li class="nav-group-task">
<a class="nav-group-task-link" href="Protocols/SeverityBasedRuleConfiguration.html">SeverityBasedRuleConfiguration</a>
</li>
<li class="nav-group-task">
<a class="nav-group-task-link" href="Protocols.html#/s:13SwiftLintCore17SourceKitFreeRuleP">SourceKitFreeRule</a>
</li>
<li class="nav-group-task">
<a class="nav-group-task-link" href="Protocols/SubstitutionCorrectableRule.html">SubstitutionCorrectableRule</a>
</li>
<li class="nav-group-task">
<a class="nav-group-task-link" href="Protocols/SwiftSyntaxCorrectableRule.html">SwiftSyntaxCorrectableRule</a>
</li>
<li class="nav-group-task">
<a class="nav-group-task-link" href="Protocols/SwiftSyntaxRule.html">SwiftSyntaxRule</a>
</li>
<li class="nav-group-task">
<a class="nav-group-task-link" href="Protocols/VersionComparable.html">VersionComparable</a>
</li>
</ul>
</li>
<li class="nav-group-name">
<a class="nav-group-name-link" href="Structs.html">Structures</a>
<ul class="nav-group-tasks">
<li class="nav-group-task">
<a class="nav-group-task-link" href="Structs/Baseline.html">Baseline</a>
</li>
<li class="nav-group-task">
<a class="nav-group-task-link" href="Structs/ChildOptionSeverityConfiguration.html">ChildOptionSeverityConfiguration</a>
</li>
<li class="nav-group-task">
<a class="nav-group-task-link" href="Structs/Command.html">Command</a>
</li>
<li class="nav-group-task">
<a class="nav-group-task-link" href="Structs/Command/Action.html"> Action</a>
</li>
<li class="nav-group-task">
<a class="nav-group-task-link" href="Structs/Command/Modifier.html"> Modifier</a>
</li>
<li class="nav-group-task">
<a class="nav-group-task-link" href="Structs/ConfigurationElement.html">ConfigurationElement</a>
</li>
<li class="nav-group-task">
<a class="nav-group-task-link" href="Structs/ConfigurationElement/DeprecationNotice.html"> DeprecationNotice</a>
</li>
<li class="nav-group-task">
<a class="nav-group-task-link" href="Structs/Correction.html">Correction</a>
</li>
<li class="nav-group-task">
<a class="nav-group-task-link" href="Structs/Example.html">Example</a>
</li>
<li class="nav-group-task">
<a class="nav-group-task-link" href="Structs/Location.html">Location</a>
</li>
<li class="nav-group-task">
<a class="nav-group-task-link" href="Structs/ReasonedRuleViolation.html">ReasonedRuleViolation</a>
</li>
<li class="nav-group-task">
<a class="nav-group-task-link" href="Structs/ReasonedRuleViolation/ViolationCorrection.html"> ViolationCorrection</a>
</li>
<li class="nav-group-task">
<a class="nav-group-task-link" href="Structs/RegexConfiguration.html">RegexConfiguration</a>
</li>
<li class="nav-group-task">
<a class="nav-group-task-link" href="Structs/RegexConfiguration/ExecutionMode.html"> ExecutionMode</a>
</li>
<li class="nav-group-task">
<a class="nav-group-task-link" href="Structs/Region.html">Region</a>
</li>
<li class="nav-group-task">
<a class="nav-group-task-link" href="Structs/RuleConfigurationDescription.html">RuleConfigurationDescription</a>
</li>
<li class="nav-group-task">
<a class="nav-group-task-link" href="Structs.html#/s:13SwiftLintCore35RuleConfigurationDescriptionBuilderV">RuleConfigurationDescriptionBuilder</a>
</li>
<li class="nav-group-task">
<a class="nav-group-task-link" href="Structs/RuleConfigurationOption.html">RuleConfigurationOption</a>
</li>
<li class="nav-group-task">
<a class="nav-group-task-link" href="Structs/RuleDescription.html">RuleDescription</a>
</li>
<li class="nav-group-task">
<a class="nav-group-task-link" href="Structs/RuleList.html">RuleList</a>
</li>
<li class="nav-group-task">
<a class="nav-group-task-link" href="Structs/RuleParameter.html">RuleParameter</a>
</li>
<li class="nav-group-task">
<a class="nav-group-task-link" href="Structs/SeverityConfiguration.html">SeverityConfiguration</a>
</li>
<li class="nav-group-task">
<a class="nav-group-task-link" href="Structs/SeverityLevelsConfiguration.html">SeverityLevelsConfiguration</a>
</li>
<li class="nav-group-task">
<a class="nav-group-task-link" href="Structs/Stack.html">Stack</a>
</li>
<li class="nav-group-task">
<a class="nav-group-task-link" href="Structs/StyleViolation.html">StyleViolation</a>
</li>
<li class="nav-group-task">
<a class="nav-group-task-link" href="Structs/SwiftLintSyntaxMap.html">SwiftLintSyntaxMap</a>
</li>
<li class="nav-group-task">
<a class="nav-group-task-link" href="Structs/SwiftLintSyntaxToken.html">SwiftLintSyntaxToken</a>
</li>
<li class="nav-group-task">
<a class="nav-group-task-link" href="Structs/SwiftVersion.html">SwiftVersion</a>
</li>
</ul>
</li>
<li class="nav-group-name">
<a class="nav-group-name-link" href="Macros.html">Macros</a>
<ul class="nav-group-tasks">
<li class="nav-group-task">
<a class="nav-group-task-link" href="Macros.html#/s:13SwiftLintCore32AcceptableByConfigurationElementyycfm">AcceptableByConfigurationElement()</a>
</li>
<li class="nav-group-task">
<a class="nav-group-task-link" href="Macros.html#/s:13SwiftLintCore16AutoConfigParseryycfm">AutoConfigParser()</a>
</li>
<li class="nav-group-task">
<a class="nav-group-task-link" href="Macros.html#/s:13SwiftLintCore0A10SyntaxRule15foldExpressions16explicitRewriter11correctable5optInySb_S3btcfm">SwiftSyntaxRule(foldExpressions:explicitRewriter:correctable:optIn:)</a>
</li>
</ul>
</li>
</ul>
</nav>
<article class="main-content">
<section class="section">
<div class="section-content top-matter">
<h1>Macros</h1>
<p>The following macros are available globally.</p>
</div>
</section>
<section class="section">
<div class="section-content">
<div class="task-group">
<ul class="item-container">
<li class="item">
<div>
<code>
<a name="/s:13SwiftLintCore16AutoConfigParseryycfm"></a>
<a name="//apple_ref/swift/Macro/AutoConfigParser()" class="dashAnchor"></a>
<a class="token" href="#/s:13SwiftLintCore16AutoConfigParseryycfm">AutoConfigParser()</a>
</code>
</div>
<div class="height-container">
<div class="pointer-container"></div>
<section class="section">
<div class="pointer"></div>
<div class="abstract">
<p>Macro to be attached to rule configurations. It generates the configuration parsing logic
automatically based on the defined <code><a href="Structs/ConfigurationElement.html">@ConfigurationElement</a></code>s.</p>
</div>
<div class="declaration">
<h4>Declaration</h4>
<div class="language">
<p class="aside-title">Swift</p>
<pre class="highlight swift"><code><span class="kd">@attached</span><span class="p">(</span><span class="n">member</span><span class="p">,</span> <span class="nv">names</span><span class="p">:</span> <span class="nf">named</span><span class="p">(</span><span class="n">apply</span><span class="p">)</span>
<span class="p">)</span> <span class="kd">public</span> <span class="kd">macro</span> <span class="kt">AutoConfigParser</span><span class="p">()</span> <span class="o">=</span> <span class="k">#externalMacro</span><span class="p">(</span>
<span class="nv">module</span><span class="p">:</span> <span class="s">"SwiftLintCoreMacros"</span><span class="p">,</span>
<span class="nv">type</span><span class="p">:</span> <span class="s">"AutoConfigParser"</span>
<span class="p">)</span></code></pre>
</div>
</div>
<div class="slightly-smaller">
<a href="https://github.com/realm/SwiftLint/tree/main/Source/SwiftLintCore/Helpers/Macros.swift#L7">Show on GitHub</a>
</div>
</section>
</div>
</li>
<li class="item">
<div>
<code>
<a name="/s:13SwiftLintCore32AcceptableByConfigurationElementyycfm"></a>
<a name="//apple_ref/swift/Macro/AcceptableByConfigurationElement()" class="dashAnchor"></a>
<a class="token" href="#/s:13SwiftLintCore32AcceptableByConfigurationElementyycfm">AcceptableByConfigurationElement()</a>
</code>
</div>
<div class="height-container">
<div class="pointer-container"></div>
<section class="section">
<div class="pointer"></div>
<div class="abstract">
<p>Macro that lets an enum with a <code>String</code> raw type automatically conform to <code><a href="Protocols/AcceptableByConfigurationElement.html">AcceptableByConfigurationElement</a></code>.</p>
</div>
<div class="declaration">
<h4>Declaration</h4>
<div class="language">
<p class="aside-title">Swift</p>
<pre class="highlight swift"><code><span class="kd">@attached</span><span class="p">(</span><span class="kd">extension</span><span class="p">,</span> <span class="nv">conformances</span><span class="p">:</span> <span class="kt"><a href="Protocols/AcceptableByConfigurationElement.html">AcceptableByConfigurationElement</a></span><span class="p">,</span> <span class="nv">names</span><span class="p">:</span> <span class="nf">named</span><span class="p">(</span><span class="nf">init</span><span class="p">(</span><span class="nv">fromAny</span><span class="p">:</span><span class="nv">context</span><span class="p">:)</span>
<span class="p">),</span> <span class="nf">named</span><span class="p">(</span><span class="n">asOption</span><span class="p">))</span> <span class="kd">public</span> <span class="kd">macro</span> <span class="kt"><a href="Protocols/AcceptableByConfigurationElement.html">AcceptableByConfigurationElement</a></span><span class="p">()</span> <span class="o">=</span> <span class="k">#externalMacro</span><span class="p">(</span>
<span class="nv">module</span><span class="p">:</span> <span class="s">"SwiftLintCoreMacros"</span><span class="p">,</span>
<span class="nv">type</span><span class="p">:</span> <span class="s">"AcceptableByConfigurationElement"</span>
<span class="p">)</span></code></pre>
</div>
</div>
<div class="slightly-smaller">
<a href="https://github.com/realm/SwiftLint/tree/main/Source/SwiftLintCore/Helpers/Macros.swift#L29">Show on GitHub</a>
</div>
</section>
</div>
</li>
<li class="item">
<div>
<code>
<a name="/s:13SwiftLintCore0A10SyntaxRule15foldExpressions16explicitRewriter11correctable5optInySb_S3btcfm"></a>
<a name="//apple_ref/swift/Macro/SwiftSyntaxRule(foldExpressions:explicitRewriter:correctable:optIn:)" class="dashAnchor"></a>
<a class="token" href="#/s:13SwiftLintCore0A10SyntaxRule15foldExpressions16explicitRewriter11correctable5optInySb_S3btcfm">SwiftSyntaxRule(foldExpressions:<wbr>explicitRewriter:<wbr>correctable:<wbr>optIn:<wbr>)</a>
</code>
</div>
<div class="height-container">
<div class="pointer-container"></div>
<section class="section">
<div class="pointer"></div>
<div class="abstract">
<p>Macro that adds a conformance to the <code><a href="Protocols/SwiftSyntaxRule.html">SwiftSyntaxRule</a></code> protocol and a default <code>makeVisitor(file:)</code> implementation
that creates a visitor defined in the rule struct.</p>
</div>
<div class="declaration">
<h4>Declaration</h4>
<div class="language">
<p class="aside-title">Swift</p>
<pre class="highlight swift"><code><span class="kd">@attached</span><span class="p">(</span><span class="kd">extension</span><span class="p">,</span> <span class="nv">conformances</span><span class="p">:</span> <span class="kt"><a href="Protocols/SwiftSyntaxRule.html">SwiftSyntaxRule</a></span><span class="p">,</span> <span class="kt"><a href="Protocols/SwiftSyntaxCorrectableRule.html">SwiftSyntaxCorrectableRule</a></span><span class="p">,</span> <span class="kt"><a href="Protocols.html#/s:13SwiftLintCore9OptInRuleP">OptInRule</a></span><span class="p">,</span> <span class="kt"><a href="Protocols/Rule.html">Rule</a></span><span class="p">,</span> <span class="nv">names</span><span class="p">:</span> <span class="nf">named</span><span class="p">(</span><span class="nf">makeVisitor</span><span class="p">(</span><span class="nv">file</span><span class="p">:)</span>
<span class="p">),</span> <span class="nf">named</span><span class="p">(</span><span class="nf">preprocess</span><span class="p">(</span><span class="nv">file</span><span class="p">:)),</span> <span class="nf">named</span><span class="p">(</span><span class="nf">makeRewriter</span><span class="p">(</span><span class="nv">file</span><span class="p">:)))</span> <span class="kd">public</span> <span class="kd">macro</span> <span class="kt"><a href="Protocols/SwiftSyntaxRule.html">SwiftSyntaxRule</a></span><span class="p">(</span><span class="nv">foldExpressions</span><span class="p">:</span> <span class="kt">Bool</span> <span class="o">=</span> <span class="kc">false</span><span class="p">,</span> <span class="nv">explicitRewriter</span><span class="p">:</span> <span class="kt">Bool</span> <span class="o">=</span> <span class="kc">false</span><span class="p">,</span> <span class="nv">correctable</span><span class="p">:</span> <span class="kt">Bool</span> <span class="o">=</span> <span class="kc">false</span><span class="p">,</span> <span class="nv">optIn</span><span class="p">:</span> <span class="kt">Bool</span> <span class="o">=</span> <span class="kc">false</span><span class="p">)</span> <span class="o">=</span> <span class="k">#externalMacro</span><span class="p">(</span>
<span class="nv">module</span><span class="p">:</span> <span class="s">"SwiftLintCoreMacros"</span><span class="p">,</span>
<span class="nv">type</span><span class="p">:</span> <span class="s">"SwiftSyntaxRule"</span>
<span class="p">)</span></code></pre>
</div>
</div>
<div>
<h4>Parameters</h4>
<table class="graybox">
<tbody>
<tr>
<td>
<code>
<em>foldExpressions</em>
</code>
</td>
<td>
<div>
<p>Setting it to <code>true</code> adds an implementation of <code>preprocess(file:)</code> which folds expressions
before they are passed to the visitor.</p>
</div>
</td>
</tr>
<tr>
<td>
<code>
<em>explicitRewriter</em>
</code>
</td>
<td>
<div>
<p>Set it to <code>true</code> to add a <code>makeRewriter(file:)</code> implementation which creates a rewriter
defined in the rule struct. In this case, the rule automatically conforms to
<code><a href="Protocols/SwiftSyntaxCorrectableRule.html">SwiftSyntaxCorrectableRule</a></code>.</p>
</div>
</td>
</tr>
<tr>
<td>
<code>
<em>correctable</em>
</code>
</td>
<td>
<div>
<p>Set it to <code>true</code> to make the rule conform to <code><a href="Protocols/SwiftSyntaxCorrectableRule.html">SwiftSyntaxCorrectableRule</a></code> without an explicit
rewriter.</p>
</div>
</td>
</tr>
<tr>
<td>
<code>
<em>optIn</em>
</code>
</td>
<td>
<div>
<p>Set it to <code>true</code> to make the rule conform to <code><a href="Protocols.html#/s:13SwiftLintCore9OptInRuleP">OptInRule</a></code>.</p>
</div>
</td>
</tr>
</tbody>
</table>
</div>
<div class="slightly-smaller">
<a href="https://github.com/realm/SwiftLint/tree/main/Source/SwiftLintCore/Helpers/Macros.swift#L63">Show on GitHub</a>
</div>
</section>
</div>
</li>
</ul>
</div>
</div>
</section>
</article>
</div>
<section class="footer">
<p>© 2023 <a class="link" href="https://jpsim.com" target="_blank" rel="external noopener">JP Simard</a> under MIT.</p>
<p>Generated by <a class="link" href="https://github.com/realm/jazzy" target="_blank" rel="external noopener">jazzy ♪♫ v0.15.3</a>, a <a class="link" href="https://realm.io" target="_blank" rel="external noopener">Realm</a> project.</p>
</section>
</body>
</html>