mirror of
https://github.com/krzysztofzablocki/Sourcery.git
synced 2026-04-07 19:17:40 +00:00
300 lines
15 KiB
HTML
300 lines
15 KiB
HTML
<!DOCTYPE html>
|
||
<html lang="en">
|
||
<head>
|
||
<title>Equatable 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 title="Equatable Reference"></a>
|
||
<header>
|
||
<div class="content-wrapper">
|
||
<p><a href="index.html">Sourcery 2.3.0 Docs</a> (100% documented)</p>
|
||
<p class="header-right"><a href="https://github.com/krzysztofzablocki/Sourcery"><img src="img/gh.png"/>View on GitHub</a></p>
|
||
<p class="header-right">
|
||
<form role="search" action="search.json">
|
||
<input type="text" placeholder="Search documentation" data-typeahead>
|
||
</form>
|
||
</p>
|
||
</div>
|
||
</header>
|
||
<div class="content-wrapper">
|
||
<p id="breadcrumbs">
|
||
<a href="index.html">Sourcery Reference</a>
|
||
<img id="carat" src="img/carat.png" />
|
||
Equatable Reference
|
||
</p>
|
||
</div>
|
||
<div class="content-wrapper">
|
||
<nav class="sidebar">
|
||
<ul class="nav-groups">
|
||
<li class="nav-group-name">
|
||
<a href="Guides.html">Guides</a>
|
||
<ul class="nav-group-tasks">
|
||
<li class="nav-group-task">
|
||
<a href="installing.html">Installing</a>
|
||
</li>
|
||
<li class="nav-group-task">
|
||
<a href="usage.html">Usage</a>
|
||
</li>
|
||
<li class="nav-group-task">
|
||
<a href="writing-templates.html">Writing templates</a>
|
||
</li>
|
||
</ul>
|
||
</li>
|
||
<li class="nav-group-name">
|
||
<a href="Examples.html">Examples</a>
|
||
<ul class="nav-group-tasks">
|
||
<li class="nav-group-task">
|
||
<a href="equatable.html">Equatable</a>
|
||
</li>
|
||
<li class="nav-group-task">
|
||
<a href="hashable.html">Hashable</a>
|
||
</li>
|
||
<li class="nav-group-task">
|
||
<a href="enum-cases.html">Enum cases</a>
|
||
</li>
|
||
<li class="nav-group-task">
|
||
<a href="lenses.html">Lenses</a>
|
||
</li>
|
||
<li class="nav-group-task">
|
||
<a href="mocks.html">Mocks</a>
|
||
</li>
|
||
<li class="nav-group-task">
|
||
<a href="codable.html">Codable</a>
|
||
</li>
|
||
<li class="nav-group-task">
|
||
<a href="Protocols/Diffable.html">Diffable</a>
|
||
</li>
|
||
<li class="nav-group-task">
|
||
<a href="diffable.html">Diffable</a>
|
||
</li>
|
||
<li class="nav-group-task">
|
||
<a href="linuxmain.html">LinuxMain</a>
|
||
</li>
|
||
<li class="nav-group-task">
|
||
<a href="decorator.html">Decorator</a>
|
||
</li>
|
||
</ul>
|
||
</li>
|
||
<li class="nav-group-name">
|
||
<a href="Types.html">Types</a>
|
||
<ul class="nav-group-tasks">
|
||
<li class="nav-group-task">
|
||
<a href="Classes/Types.html">Types</a>
|
||
</li>
|
||
<li class="nav-group-task">
|
||
<a href="Classes/Type.html">Type</a>
|
||
</li>
|
||
<li class="nav-group-task">
|
||
<a href="Classes/Protocol.html">Protocol</a>
|
||
</li>
|
||
<li class="nav-group-task">
|
||
<a href="Classes/Class.html">Class</a>
|
||
</li>
|
||
<li class="nav-group-task">
|
||
<a href="Classes/Struct.html">Struct</a>
|
||
</li>
|
||
<li class="nav-group-task">
|
||
<a href="Classes/Enum.html">Enum</a>
|
||
</li>
|
||
<li class="nav-group-task">
|
||
<a href="Classes/EnumCase.html">EnumCase</a>
|
||
</li>
|
||
<li class="nav-group-task">
|
||
<a href="Classes/AssociatedValue.html">AssociatedValue</a>
|
||
</li>
|
||
<li class="nav-group-task">
|
||
<a href="Classes/AssociatedType.html">AssociatedType</a>
|
||
</li>
|
||
<li class="nav-group-task">
|
||
<a href="Classes/Variable.html">Variable</a>
|
||
</li>
|
||
<li class="nav-group-task">
|
||
<a href="Classes/Method.html">Method</a>
|
||
</li>
|
||
<li class="nav-group-task">
|
||
<a href="Classes/MethodParameter.html">MethodParameter</a>
|
||
</li>
|
||
<li class="nav-group-task">
|
||
<a href="Classes/Subscript.html">Subscript</a>
|
||
</li>
|
||
<li class="nav-group-task">
|
||
<a href="Classes/TypeName.html">TypeName</a>
|
||
</li>
|
||
<li class="nav-group-task">
|
||
<a href="Classes/TupleType.html">TupleType</a>
|
||
</li>
|
||
<li class="nav-group-task">
|
||
<a href="Classes/TupleElement.html">TupleElement</a>
|
||
</li>
|
||
<li class="nav-group-task">
|
||
<a href="Classes/ArrayType.html">ArrayType</a>
|
||
</li>
|
||
<li class="nav-group-task">
|
||
<a href="Classes/DictionaryType.html">DictionaryType</a>
|
||
</li>
|
||
<li class="nav-group-task">
|
||
<a href="Classes/ClosureType.html">ClosureType</a>
|
||
</li>
|
||
<li class="nav-group-task">
|
||
<a href="Classes/GenericType.html">GenericType</a>
|
||
</li>
|
||
<li class="nav-group-task">
|
||
<a href="Classes/GenericTypeParameter.html">GenericTypeParameter</a>
|
||
</li>
|
||
<li class="nav-group-task">
|
||
<a href="Classes/Attribute.html">Attribute</a>
|
||
</li>
|
||
<li class="nav-group-task">
|
||
<a href="Classes/ProtocolComposition.html">ProtocolComposition</a>
|
||
</li>
|
||
</ul>
|
||
</li>
|
||
<li class="nav-group-name">
|
||
<a href="Other%20Classes.html">Other Classes</a>
|
||
<ul class="nav-group-tasks">
|
||
<li class="nav-group-task">
|
||
<a href="Classes/Actor.html">Actor</a>
|
||
</li>
|
||
<li class="nav-group-task">
|
||
<a href="Classes/ClosureParameter.html">ClosureParameter</a>
|
||
</li>
|
||
<li class="nav-group-task">
|
||
<a href="Classes/DiffableResult.html">DiffableResult</a>
|
||
</li>
|
||
<li class="nav-group-task">
|
||
<a href="Classes/GenericParameter.html">GenericParameter</a>
|
||
</li>
|
||
<li class="nav-group-task">
|
||
<a href="Classes/GenericRequirement.html">GenericRequirement</a>
|
||
</li>
|
||
<li class="nav-group-task">
|
||
<a href="Classes/GenericRequirement/Relationship.html">– Relationship</a>
|
||
</li>
|
||
<li class="nav-group-task">
|
||
<a href="Classes/Import.html">Import</a>
|
||
</li>
|
||
<li class="nav-group-task">
|
||
<a href="Classes/Modifier.html">Modifier</a>
|
||
</li>
|
||
<li class="nav-group-task">
|
||
<a href="Classes/SetType.html">SetType</a>
|
||
</li>
|
||
</ul>
|
||
</li>
|
||
<li class="nav-group-name">
|
||
<a href="Other%20Enums.html">Other Enumerations</a>
|
||
<ul class="nav-group-tasks">
|
||
<li class="nav-group-task">
|
||
<a href="Enums/Composer.html">Composer</a>
|
||
</li>
|
||
</ul>
|
||
</li>
|
||
<li class="nav-group-name">
|
||
<a href="Other%20Extensions.html">Other Extensions</a>
|
||
<ul class="nav-group-tasks">
|
||
<li class="nav-group-task">
|
||
<a href="Extensions/Array.html">Array</a>
|
||
</li>
|
||
<li class="nav-group-task">
|
||
<a href="Other%20Extensions.html#/c:@M@SourceryRuntime@objc(cs)BytesRange">BytesRange</a>
|
||
</li>
|
||
<li class="nav-group-task">
|
||
<a href="Other%20Extensions.html#/c:@M@SourceryRuntime@objc(cs)FileParserResult">FileParserResult</a>
|
||
</li>
|
||
<li class="nav-group-task">
|
||
<a href="Extensions/String.html">String</a>
|
||
</li>
|
||
<li class="nav-group-task">
|
||
<a href="Extensions/StringProtocol.html">StringProtocol</a>
|
||
</li>
|
||
<li class="nav-group-task">
|
||
<a href="Extensions/Typealias.html">Typealias</a>
|
||
</li>
|
||
</ul>
|
||
</li>
|
||
<li class="nav-group-name">
|
||
<a href="Other%20Protocols.html">Other Protocols</a>
|
||
<ul class="nav-group-tasks">
|
||
<li class="nav-group-task">
|
||
<a href="Protocols/Annotated.html">Annotated</a>
|
||
</li>
|
||
<li class="nav-group-task">
|
||
<a href="Protocols/Definition.html">Definition</a>
|
||
</li>
|
||
<li class="nav-group-task">
|
||
<a href="Protocols/Documented.html">Documented</a>
|
||
</li>
|
||
<li class="nav-group-task">
|
||
<a href="Protocols/Typed.html">Typed</a>
|
||
</li>
|
||
</ul>
|
||
</li>
|
||
<li class="nav-group-name">
|
||
<a href="Other%20Typealiases.html">Other Type Aliases</a>
|
||
<ul class="nav-group-tasks">
|
||
<li class="nav-group-task">
|
||
<a href="Other%20Typealiases.html#/s:15SourceryRuntime11Annotationsa">Annotations</a>
|
||
</li>
|
||
<li class="nav-group-task">
|
||
<a href="Other%20Typealiases.html#/s:15SourceryRuntime13Documentationa">Documentation</a>
|
||
</li>
|
||
<li class="nav-group-task">
|
||
<a href="Other%20Typealiases.html#/s:15SourceryRuntime0A8Modifiera">SourceryModifier</a>
|
||
</li>
|
||
</ul>
|
||
</li>
|
||
</ul>
|
||
</nav>
|
||
<article class="main-content">
|
||
<section>
|
||
<section class="section">
|
||
|
||
<h2 id='i-want-to-generate-code-equatable-code-implementation' class='heading'>I want to generate <code>Equatable</code> implementation</h2>
|
||
|
||
<p>Template used to generate equality for all types that either conform to the <code>AutoEquatable</code> protocol or are <a href="Writing%20templates.md#using-source-annotations">annotated</a> with <code>AutoEquatable</code> annotation, allowing us to avoid writing boilerplate code.</p>
|
||
|
||
<p>It adds <code>:Equatable</code> conformance to all types, except protocols (because it would require turning them into PAT’s).
|
||
For protocols it’s just generating <code>func ==</code>.</p>
|
||
<h3 id='a-href-https-github-com-krzysztofzablocki-sourcery-blob-master-templates-templates-autoequatable-stencil-stencil-template-a' class='heading'><a href="https://github.com/krzysztofzablocki/Sourcery/blob/master/Templates/Templates/AutoEquatable.stencil">Stencil template</a></h3>
|
||
<h4 id='available-variable-annotations' class='heading'>Available variable annotations:</h4>
|
||
|
||
<ul>
|
||
<li><code>skipEquality</code> allows you to skip variable from being compared.</li>
|
||
<li><code>arrayEquality</code> mark this to use array comparsion for variables that have array of items that don’t implement <code>Equatable</code> but have <code>==</code> operator e.g. Protocols</li>
|
||
</ul>
|
||
<h4 id='example-output' class='heading'>Example output:</h4>
|
||
<pre class="highlight swift"><code><span class="c1">// MARK: - AdNodeViewModel AutoEquatable</span>
|
||
<span class="kd">extension</span> <span class="kt">AdNodeViewModel</span><span class="p">:</span> <span class="kt">Equatable</span> <span class="p">{}</span>
|
||
|
||
<span class="kd">internal</span> <span class="kd">func</span> <span class="o">==</span> <span class="p">(</span><span class="nv">lhs</span><span class="p">:</span> <span class="kt">AdNodeViewModel</span><span class="p">,</span> <span class="nv">rhs</span><span class="p">:</span> <span class="kt">AdNodeViewModel</span><span class="p">)</span> <span class="o">-></span> <span class="kt">Bool</span> <span class="p">{</span>
|
||
<span class="k">guard</span> <span class="n">lhs</span><span class="o">.</span><span class="n">remoteAdView</span> <span class="o">==</span> <span class="n">rhs</span><span class="o">.</span><span class="n">remoteAdView</span> <span class="k">else</span> <span class="p">{</span> <span class="k">return</span> <span class="kc">false</span> <span class="p">}</span>
|
||
<span class="k">guard</span> <span class="n">lhs</span><span class="o">.</span><span class="n">hidesDisclaimer</span> <span class="o">==</span> <span class="n">rhs</span><span class="o">.</span><span class="n">hidesDisclaimer</span> <span class="k">else</span> <span class="p">{</span> <span class="k">return</span> <span class="kc">false</span> <span class="p">}</span>
|
||
<span class="k">guard</span> <span class="n">lhs</span><span class="o">.</span><span class="n">type</span> <span class="o">==</span> <span class="n">rhs</span><span class="o">.</span><span class="n">type</span> <span class="k">else</span> <span class="p">{</span> <span class="k">return</span> <span class="kc">false</span> <span class="p">}</span>
|
||
<span class="k">guard</span> <span class="n">lhs</span><span class="o">.</span><span class="n">height</span> <span class="o">==</span> <span class="n">rhs</span><span class="o">.</span><span class="n">height</span> <span class="k">else</span> <span class="p">{</span> <span class="k">return</span> <span class="kc">false</span> <span class="p">}</span>
|
||
|
||
<span class="k">guard</span> <span class="n">lhs</span><span class="o">.</span><span class="n">attributedDisclaimer</span> <span class="o">==</span> <span class="n">rhs</span><span class="o">.</span><span class="n">attributedDisclaimer</span> <span class="k">else</span> <span class="p">{</span> <span class="k">return</span> <span class="kc">false</span> <span class="p">}</span>
|
||
|
||
<span class="k">return</span> <span class="kc">true</span>
|
||
<span class="p">}</span>
|
||
</code></pre>
|
||
|
||
</section>
|
||
</section>
|
||
<section id="footer">
|
||
<p>Copyright © 2016-2021 Pixle. All rights reserved.</p>
|
||
<p>Generated by <a class="link" href="https://github.com/realm/jazzy" target="_blank" rel="noopener" rel="external">jazzy ♪♫ v0.14.0</a>, a <a class="link" href="https://realm.io" target="_blank" rel="noopener" rel="external">Realm</a> project.</p>
|
||
</section>
|
||
</article>
|
||
</div>
|
||
</body>
|
||
</html>
|