");
+ $input.on("blur.tt", function($e) {
+ var active, isActive, hasActive;
+ active = document.activeElement;
+ isActive = $menu.is(active);
+ hasActive = $menu.has(active).length > 0;
+ if (_.isMsie() && (isActive || hasActive)) {
+ $e.preventDefault();
+ $e.stopImmediatePropagation();
+ _.defer(function() {
+ $input.focus();
+ });
+ }
+ });
+ $menu.on("mousedown.tt", function($e) {
+ $e.preventDefault();
+ });
+ },
+ _onSelectableClicked: function onSelectableClicked(type, $el) {
+ this.select($el);
+ },
+ _onDatasetCleared: function onDatasetCleared() {
+ this._updateHint();
+ },
+ _onDatasetRendered: function onDatasetRendered(type, suggestions, async, dataset) {
+ this._updateHint();
+ if (this.autoselect) {
+ var cursorClass = this.selectors.cursor.substr(1);
+ this.menu.$node.find(this.selectors.suggestion).first().addClass(cursorClass);
+ }
+ this.eventBus.trigger("render", suggestions, async, dataset);
+ },
+ _onAsyncRequested: function onAsyncRequested(type, dataset, query) {
+ this.eventBus.trigger("asyncrequest", query, dataset);
+ },
+ _onAsyncCanceled: function onAsyncCanceled(type, dataset, query) {
+ this.eventBus.trigger("asynccancel", query, dataset);
+ },
+ _onAsyncReceived: function onAsyncReceived(type, dataset, query) {
+ this.eventBus.trigger("asyncreceive", query, dataset);
+ },
+ _onFocused: function onFocused() {
+ this._minLengthMet() && this.menu.update(this.input.getQuery());
+ },
+ _onBlurred: function onBlurred() {
+ if (this.input.hasQueryChangedSinceLastFocus()) {
+ this.eventBus.trigger("change", this.input.getQuery());
+ }
+ },
+ _onEnterKeyed: function onEnterKeyed(type, $e) {
+ var $selectable;
+ if ($selectable = this.menu.getActiveSelectable()) {
+ if (this.select($selectable)) {
+ $e.preventDefault();
+ $e.stopPropagation();
+ }
+ } else if (this.autoselect) {
+ if (this.select(this.menu.getTopSelectable())) {
+ $e.preventDefault();
+ $e.stopPropagation();
+ }
+ }
+ },
+ _onTabKeyed: function onTabKeyed(type, $e) {
+ var $selectable;
+ if ($selectable = this.menu.getActiveSelectable()) {
+ this.select($selectable) && $e.preventDefault();
+ } else if (this.autoselect) {
+ if ($selectable = this.menu.getTopSelectable()) {
+ this.autocomplete($selectable) && $e.preventDefault();
+ }
+ }
+ },
+ _onEscKeyed: function onEscKeyed() {
+ this.close();
+ },
+ _onUpKeyed: function onUpKeyed() {
+ this.moveCursor(-1);
+ },
+ _onDownKeyed: function onDownKeyed() {
+ this.moveCursor(+1);
+ },
+ _onLeftKeyed: function onLeftKeyed() {
+ if (this.dir === "rtl" && this.input.isCursorAtEnd()) {
+ this.autocomplete(this.menu.getActiveSelectable() || this.menu.getTopSelectable());
+ }
+ },
+ _onRightKeyed: function onRightKeyed() {
+ if (this.dir === "ltr" && this.input.isCursorAtEnd()) {
+ this.autocomplete(this.menu.getActiveSelectable() || this.menu.getTopSelectable());
+ }
+ },
+ _onQueryChanged: function onQueryChanged(e, query) {
+ this._minLengthMet(query) ? this.menu.update(query) : this.menu.empty();
+ },
+ _onWhitespaceChanged: function onWhitespaceChanged() {
+ this._updateHint();
+ },
+ _onLangDirChanged: function onLangDirChanged(e, dir) {
+ if (this.dir !== dir) {
+ this.dir = dir;
+ this.menu.setLanguageDirection(dir);
+ }
+ },
+ _openIfActive: function openIfActive() {
+ this.isActive() && this.open();
+ },
+ _minLengthMet: function minLengthMet(query) {
+ query = _.isString(query) ? query : this.input.getQuery() || "";
+ return query.length >= this.minLength;
+ },
+ _updateHint: function updateHint() {
+ var $selectable, data, val, query, escapedQuery, frontMatchRegEx, match;
+ $selectable = this.menu.getTopSelectable();
+ data = this.menu.getSelectableData($selectable);
+ val = this.input.getInputValue();
+ if (data && !_.isBlankString(val) && !this.input.hasOverflow()) {
+ query = Input.normalizeQuery(val);
+ escapedQuery = _.escapeRegExChars(query);
+ frontMatchRegEx = new RegExp("^(?:" + escapedQuery + ")(.+$)", "i");
+ match = frontMatchRegEx.exec(data.val);
+ match && this.input.setHint(val + match[1]);
+ } else {
+ this.input.clearHint();
+ }
+ },
+ isEnabled: function isEnabled() {
+ return this.enabled;
+ },
+ enable: function enable() {
+ this.enabled = true;
+ },
+ disable: function disable() {
+ this.enabled = false;
+ },
+ isActive: function isActive() {
+ return this.active;
+ },
+ activate: function activate() {
+ if (this.isActive()) {
+ return true;
+ } else if (!this.isEnabled() || this.eventBus.before("active")) {
+ return false;
+ } else {
+ this.active = true;
+ this.eventBus.trigger("active");
+ return true;
+ }
+ },
+ deactivate: function deactivate() {
+ if (!this.isActive()) {
+ return true;
+ } else if (this.eventBus.before("idle")) {
+ return false;
+ } else {
+ this.active = false;
+ this.close();
+ this.eventBus.trigger("idle");
+ return true;
+ }
+ },
+ isOpen: function isOpen() {
+ return this.menu.isOpen();
+ },
+ open: function open() {
+ if (!this.isOpen() && !this.eventBus.before("open")) {
+ this.input.setAriaExpanded(true);
+ this.menu.open();
+ this._updateHint();
+ this.eventBus.trigger("open");
+ }
+ return this.isOpen();
+ },
+ close: function close() {
+ if (this.isOpen() && !this.eventBus.before("close")) {
+ this.input.setAriaExpanded(false);
+ this.menu.close();
+ this.input.clearHint();
+ this.input.resetInputValue();
+ this.eventBus.trigger("close");
+ }
+ return !this.isOpen();
+ },
+ setVal: function setVal(val) {
+ this.input.setQuery(_.toStr(val));
+ },
+ getVal: function getVal() {
+ return this.input.getQuery();
+ },
+ select: function select($selectable) {
+ var data = this.menu.getSelectableData($selectable);
+ if (data && !this.eventBus.before("select", data.obj, data.dataset)) {
+ this.input.setQuery(data.val, true);
+ this.eventBus.trigger("select", data.obj, data.dataset);
+ this.close();
+ return true;
+ }
+ return false;
+ },
+ autocomplete: function autocomplete($selectable) {
+ var query, data, isValid;
+ query = this.input.getQuery();
+ data = this.menu.getSelectableData($selectable);
+ isValid = data && query !== data.val;
+ if (isValid && !this.eventBus.before("autocomplete", data.obj, data.dataset)) {
+ this.input.setQuery(data.val);
+ this.eventBus.trigger("autocomplete", data.obj, data.dataset);
+ return true;
+ }
+ return false;
+ },
+ moveCursor: function moveCursor(delta) {
+ var query, $candidate, data, suggestion, datasetName, cancelMove, id;
+ query = this.input.getQuery();
+ $candidate = this.menu.selectableRelativeToCursor(delta);
+ data = this.menu.getSelectableData($candidate);
+ suggestion = data ? data.obj : null;
+ datasetName = data ? data.dataset : null;
+ id = $candidate ? $candidate.attr("id") : null;
+ this.input.trigger("cursorchange", id);
+ cancelMove = this._minLengthMet() && this.menu.update(query);
+ if (!cancelMove && !this.eventBus.before("cursorchange", suggestion, datasetName)) {
+ this.menu.setCursor($candidate);
+ if (data) {
+ if (typeof data.val === "string") {
+ this.input.setInputValue(data.val);
+ }
+ } else {
+ this.input.resetInputValue();
+ this._updateHint();
+ }
+ this.eventBus.trigger("cursorchange", suggestion, datasetName);
+ return true;
+ }
+ return false;
+ },
+ destroy: function destroy() {
+ this.input.destroy();
+ this.menu.destroy();
+ }
+ });
+ return Typeahead;
+ function c(ctx) {
+ var methods = [].slice.call(arguments, 1);
+ return function() {
+ var args = [].slice.call(arguments);
+ _.each(methods, function(method) {
+ return ctx[method].apply(ctx, args);
+ });
+ };
+ }
+ }();
+ (function() {
+ "use strict";
+ var old, keys, methods;
+ old = $.fn.typeahead;
+ keys = {
+ www: "tt-www",
+ attrs: "tt-attrs",
+ typeahead: "tt-typeahead"
+ };
+ methods = {
+ initialize: function initialize(o, datasets) {
+ var www;
+ datasets = _.isArray(datasets) ? datasets : [].slice.call(arguments, 1);
+ o = o || {};
+ www = WWW(o.classNames);
+ return this.each(attach);
+ function attach() {
+ var $input, $wrapper, $hint, $menu, defaultHint, defaultMenu, eventBus, input, menu, status, typeahead, MenuConstructor;
+ _.each(datasets, function(d) {
+ d.highlight = !!o.highlight;
+ });
+ $input = $(this);
+ $wrapper = $(www.html.wrapper);
+ $hint = $elOrNull(o.hint);
+ $menu = $elOrNull(o.menu);
+ defaultHint = o.hint !== false && !$hint;
+ defaultMenu = o.menu !== false && !$menu;
+ defaultHint && ($hint = buildHintFromInput($input, www));
+ defaultMenu && ($menu = $(www.html.menu).css(www.css.menu));
+ $hint && $hint.val("");
+ $input = prepInput($input, www);
+ if (defaultHint || defaultMenu) {
+ $wrapper.css(www.css.wrapper);
+ $input.css(defaultHint ? www.css.input : www.css.inputWithNoHint);
+ $input.wrap($wrapper).parent().prepend(defaultHint ? $hint : null).append(defaultMenu ? $menu : null);
+ }
+ MenuConstructor = defaultMenu ? DefaultMenu : Menu;
+ eventBus = new EventBus({
+ el: $input
+ });
+ input = new Input({
+ hint: $hint,
+ input: $input,
+ menu: $menu
+ }, www);
+ menu = new MenuConstructor({
+ node: $menu,
+ datasets: datasets
+ }, www);
+ status = new Status({
+ $input: $input,
+ menu: menu
+ });
+ typeahead = new Typeahead({
+ input: input,
+ menu: menu,
+ eventBus: eventBus,
+ minLength: o.minLength,
+ autoselect: o.autoselect
+ }, www);
+ $input.data(keys.www, www);
+ $input.data(keys.typeahead, typeahead);
+ }
+ },
+ isEnabled: function isEnabled() {
+ var enabled;
+ ttEach(this.first(), function(t) {
+ enabled = t.isEnabled();
+ });
+ return enabled;
+ },
+ enable: function enable() {
+ ttEach(this, function(t) {
+ t.enable();
+ });
+ return this;
+ },
+ disable: function disable() {
+ ttEach(this, function(t) {
+ t.disable();
+ });
+ return this;
+ },
+ isActive: function isActive() {
+ var active;
+ ttEach(this.first(), function(t) {
+ active = t.isActive();
+ });
+ return active;
+ },
+ activate: function activate() {
+ ttEach(this, function(t) {
+ t.activate();
+ });
+ return this;
+ },
+ deactivate: function deactivate() {
+ ttEach(this, function(t) {
+ t.deactivate();
+ });
+ return this;
+ },
+ isOpen: function isOpen() {
+ var open;
+ ttEach(this.first(), function(t) {
+ open = t.isOpen();
+ });
+ return open;
+ },
+ open: function open() {
+ ttEach(this, function(t) {
+ t.open();
+ });
+ return this;
+ },
+ close: function close() {
+ ttEach(this, function(t) {
+ t.close();
+ });
+ return this;
+ },
+ select: function select(el) {
+ var success = false, $el = $(el);
+ ttEach(this.first(), function(t) {
+ success = t.select($el);
+ });
+ return success;
+ },
+ autocomplete: function autocomplete(el) {
+ var success = false, $el = $(el);
+ ttEach(this.first(), function(t) {
+ success = t.autocomplete($el);
+ });
+ return success;
+ },
+ moveCursor: function moveCursoe(delta) {
+ var success = false;
+ ttEach(this.first(), function(t) {
+ success = t.moveCursor(delta);
+ });
+ return success;
+ },
+ val: function val(newVal) {
+ var query;
+ if (!arguments.length) {
+ ttEach(this.first(), function(t) {
+ query = t.getVal();
+ });
+ return query;
+ } else {
+ ttEach(this, function(t) {
+ t.setVal(_.toStr(newVal));
+ });
+ return this;
+ }
+ },
+ destroy: function destroy() {
+ ttEach(this, function(typeahead, $input) {
+ revert($input);
+ typeahead.destroy();
+ });
+ return this;
+ }
+ };
+ $.fn.typeahead = function(method) {
+ if (methods[method]) {
+ return methods[method].apply(this, [].slice.call(arguments, 1));
+ } else {
+ return methods.initialize.apply(this, arguments);
+ }
+ };
+ $.fn.typeahead.noConflict = function noConflict() {
+ $.fn.typeahead = old;
+ return this;
+ };
+ function ttEach($els, fn) {
+ $els.each(function() {
+ var $input = $(this), typeahead;
+ (typeahead = $input.data(keys.typeahead)) && fn(typeahead, $input);
+ });
+ }
+ function buildHintFromInput($input, www) {
+ return $input.clone().addClass(www.classes.hint).removeData().css(www.css.hint).css(getBackgroundStyles($input)).prop({
+ readonly: true,
+ required: false
+ }).removeAttr("id name placeholder").removeClass("required").attr({
+ spellcheck: "false",
+ tabindex: -1
+ });
+ }
+ function prepInput($input, www) {
+ $input.data(keys.attrs, {
+ dir: $input.attr("dir"),
+ autocomplete: $input.attr("autocomplete"),
+ spellcheck: $input.attr("spellcheck"),
+ style: $input.attr("style")
+ });
+ $input.addClass(www.classes.input).attr({
+ spellcheck: false
+ });
+ try {
+ !$input.attr("dir") && $input.attr("dir", "auto");
+ } catch (e) {}
+ return $input;
+ }
+ function getBackgroundStyles($el) {
+ return {
+ backgroundAttachment: $el.css("background-attachment"),
+ backgroundClip: $el.css("background-clip"),
+ backgroundColor: $el.css("background-color"),
+ backgroundImage: $el.css("background-image"),
+ backgroundOrigin: $el.css("background-origin"),
+ backgroundPosition: $el.css("background-position"),
+ backgroundRepeat: $el.css("background-repeat"),
+ backgroundSize: $el.css("background-size")
+ };
+ }
+ function revert($input) {
+ var www, $wrapper;
+ www = $input.data(keys.www);
+ $wrapper = $input.parent().filter(www.selectors.wrapper);
+ _.each($input.data(keys.attrs), function(val, key) {
+ _.isUndefined(val) ? $input.removeAttr(key) : $input.attr(key, val);
+ });
+ $input.removeData(keys.typeahead).removeData(keys.www).removeData(keys.attr).removeClass(www.classes.input);
+ if ($wrapper.length) {
+ $input.detach().insertAfter($wrapper);
+ $wrapper.remove();
+ }
+ }
+ function $elOrNull(obj) {
+ var isValid, $el;
+ isValid = _.isJQuery(obj) || _.isElement(obj);
+ $el = isValid ? $(obj).first() : [];
+ return $el.length ? $el : null;
+ }
+ })();
+});
\ No newline at end of file
diff --git a/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/large_tuple.html b/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/large_tuple.html
new file mode 100644
index 000000000..ae2cce249
--- /dev/null
+++ b/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/large_tuple.html
@@ -0,0 +1,491 @@
+
+
+
+
large_tuple Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SwiftLintFramework Reference
+
+ large_tuple Reference
+
+
+
+
+
+
+
+
+
+
+
+
Large Tuple
+
+
Tuples shouldn’t have too many members. Create a custom type instead.
+
+
+Identifier: large_tuple
+Enabled by default: Yes
+Supports autocorrection: No
+Kind: metrics
+Analyzer rule: No
+Minimum Swift compiler version: 5.0.0
+Default configuration: warning: 2, error: 3
+
+
Non Triggering Examples
+
let foo : ( Int , Int )
+
+
+
let foo : ( start : Int , end : Int )
+
+
+
let foo : ( Int , ( Int , String ))
+
+
+
func foo () -> ( Int , Int )
+
+
+
func foo () -> ( Int , Int ) {}
+
+
+
func foo ( bar : String ) -> ( Int , Int )
+
+
+
func foo ( bar : String ) -> ( Int , Int ) {}
+
+
+
func foo () throws -> ( Int , Int )
+
+
+
func foo () throws -> ( Int , Int ) {}
+
+
+
let foo : ( Int , Int , Int ) -> Void
+
+
+
let foo : ( Int , Int , Int ) throws -> Void
+
+
+
func foo ( bar : ( Int , String , Float ) -> Void )
+
+
+
func foo ( bar : ( Int , String , Float ) throws -> Void )
+
+
+
var completionHandler : (( _ data : Data ?, _ resp : URLResponse ?, _ e : NSError ?) -> Void ) !
+
+
+
func getDictionaryAndInt () -> ( Dictionary < Int , String > , Int )?
+
+
+
func getGenericTypeAndInt () -> ( Type < Int , String , Float > , Int )?
+
+
+
func foo () async -> ( Int , Int )
+
+
+
func foo () async -> ( Int , Int ) {}
+
+
+
func foo ( bar : String ) async -> ( Int , Int )
+
+
+
func foo ( bar : String ) async -> ( Int , Int ) {}
+
+
+
func foo () async throws -> ( Int , Int )
+
+
+
func foo () async throws -> ( Int , Int ) {}
+
+
+
let foo : ( Int , Int , Int ) async -> Void
+
+
+
let foo : ( Int , Int , Int ) async throws -> Void
+
+
+
func foo ( bar : ( Int , String , Float ) async -> Void )
+
+
+
func foo ( bar : ( Int , String , Float ) async throws -> Void )
+
+
+
func getDictionaryAndInt () async -> ( Dictionary < Int , String > , Int )?
+
+
+
func getGenericTypeAndInt () async -> ( Type < Int , String , Float > , Int )?
+
+
+
Triggering Examples
+
let foo : ↓ ( Int , Int , Int )
+
+
+
let foo : ↓ ( start : Int , end : Int , value : String )
+
+
+
let foo : ( Int , ↓ ( Int , Int , Int ))
+
+
+
func foo ( bar : ↓ ( Int , Int , Int ))
+
+
+
func foo () -> ↓ ( Int , Int , Int )
+
+
+
func foo () -> ↓ ( Int , Int , Int ) {}
+
+
+
func foo ( bar : String ) -> ↓ ( Int , Int , Int )
+
+
+
func foo ( bar : String ) -> ↓ ( Int , Int , Int ) {}
+
+
+
func foo () throws -> ↓ ( Int , Int , Int )
+
+
+
func foo () throws -> ↓ ( Int , Int , Int ) {}
+
+
+
func foo () throws -> ↓ ( Int , ↓ ( String , String , String ), Int ) {}
+
+
+
func getDictionaryAndInt () -> ( Dictionary < Int , ↓ ( String , String , String ) > , Int )?
+
+
+
func foo ( bar : ↓ ( Int , Int , Int )) async
+
+
+
func foo () async -> ↓ ( Int , Int , Int )
+
+
+
func foo () async -> ↓ ( Int , Int , Int ) {}
+
+
+
func foo ( bar : String ) async -> ↓ ( Int , Int , Int )
+
+
+
func foo ( bar : String ) async -> ↓ ( Int , Int , Int ) {}
+
+
+
func foo () async throws -> ↓ ( Int , Int , Int )
+
+
+
func foo () async throws -> ↓ ( Int , Int , Int ) {}
+
+
+
func foo () async throws -> ↓ ( Int , ↓ ( String , String , String ), Int ) {}
+
+
+
func getDictionaryAndInt () async -> ( Dictionary < Int , ↓ ( String , String , String ) > , Int )?
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/last_where.html b/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/last_where.html
new file mode 100644
index 000000000..fe553ec7c
--- /dev/null
+++ b/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/last_where.html
@@ -0,0 +1,380 @@
+
+
+
+
last_where Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SwiftLintFramework Reference
+
+ last_where Reference
+
+
+
+
+
+
+
+
+
+
+
+
Last Where
+
+
Prefer using .last(where:) over .filter { }.last in collections.
+
+
+Identifier: last_where
+Enabled by default: No
+Supports autocorrection: No
+Kind: performance
+Analyzer rule: No
+Minimum Swift compiler version: 5.0.0
+Default configuration: warning
+
+
Non Triggering Examples
+
kinds . filter ( excludingKinds . contains ) . isEmpty && kinds . last == . identifier
+
+
+
myList . last ( where : { $0 % 2 == 0 })
+
+
+
match ( pattern : pattern ) . filter { $0 . last == . identifier }
+
+
+
( myList . filter { $0 == 1 } . suffix ( 2 )) . last
+
+
+
collection . filter ( "stringCol = '3'" ) . last
+
+
Triggering Examples
+
↓ myList . filter { $0 % 2 == 0 } . last
+
+
+
↓ myList . filter ({ $0 % 2 == 0 }) . last
+
+
+
↓ myList . map { $0 + 1 } . filter ({ $0 % 2 == 0 }) . last
+
+
+
↓ myList . map { $0 + 1 } . filter ({ $0 % 2 == 0 }) . last ? . something ()
+
+
+
↓ myList . filter ( someFunction ) . last
+
+
+
↓ myList . filter ({ $0 % 2 == 0 })
+. last
+
+
+
( ↓ myList . filter { $0 == 1 }) . last
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/leading_whitespace.html b/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/leading_whitespace.html
new file mode 100644
index 000000000..37605fb3f
--- /dev/null
+++ b/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/leading_whitespace.html
@@ -0,0 +1,354 @@
+
+
+
+
leading_whitespace Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SwiftLintFramework Reference
+
+ leading_whitespace Reference
+
+
+
+
+
+
+
+
+
+
+
+
Leading Whitespace
+
+
Files should not contain leading whitespace.
+
+
+Identifier: leading_whitespace
+Enabled by default: Yes
+Supports autocorrection: Yes
+Kind: style
+Analyzer rule: No
+Minimum Swift compiler version: 5.0.0
+Default configuration: warning
+
+
Non Triggering Examples
+
//
+
+
+
Triggering Examples
+
+//
+
+
+
//
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/legacy_cggeometry_functions.html b/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/legacy_cggeometry_functions.html
new file mode 100644
index 000000000..ba5058b7a
--- /dev/null
+++ b/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/legacy_cggeometry_functions.html
@@ -0,0 +1,424 @@
+
+
+
+
legacy_cggeometry_functions Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SwiftLintFramework Reference
+
+ legacy_cggeometry_functions Reference
+
+
+
+
+
+
+
+
+
+
+
+
Legacy CGGeometry Functions
+
+
Struct extension properties and methods are preferred over legacy functions
+
+
+Identifier: legacy_cggeometry_functions
+Enabled by default: Yes
+Supports autocorrection: Yes
+Kind: idiomatic
+Analyzer rule: No
+Minimum Swift compiler version: 5.0.0
+Default configuration: warning
+
+
Non Triggering Examples
+
rect . width
+
+
rect . height
+
+
rect . minX
+
+
rect . midX
+
+
rect . maxX
+
+
rect . minY
+
+
rect . midY
+
+
rect . maxY
+
+
rect . isNull
+
+
rect . isEmpty
+
+
rect . isInfinite
+
+
rect . standardized
+
+
rect . integral
+
+
rect . insetBy ( dx : 5.0 , dy : - 7.0 )
+
+
rect . offsetBy ( dx : 5.0 , dy : - 7.0 )
+
+
rect1 . union ( rect2 )
+
+
rect1 . intersect ( rect2 )
+
+
rect1 . contains ( rect2 )
+
+
rect . contains ( point )
+
+
rect1 . intersects ( rect2 )
+
+
Triggering Examples
+
↓ CGRectGetWidth ( rect )
+
+
↓ CGRectGetHeight ( rect )
+
+
↓ CGRectGetMinX ( rect )
+
+
↓ CGRectGetMidX ( rect )
+
+
↓ CGRectGetMaxX ( rect )
+
+
↓ CGRectGetMinY ( rect )
+
+
↓ CGRectGetMidY ( rect )
+
+
↓ CGRectGetMaxY ( rect )
+
+
↓ CGRectIsNull ( rect )
+
+
↓ CGRectIsEmpty ( rect )
+
+
↓ CGRectIsInfinite ( rect )
+
+
↓ CGRectStandardize ( rect )
+
+
↓ CGRectIntegral ( rect )
+
+
↓ CGRectInset ( rect , 10 , 5 )
+
+
↓ CGRectOffset ( rect , - 2 , 8.3 )
+
+
↓ CGRectUnion ( rect1 , rect2 )
+
+
↓ CGRectIntersection ( rect1 , rect2 )
+
+
↓ CGRectContainsRect ( rect1 , rect2 )
+
+
↓ CGRectContainsPoint ( rect , point )
+
+
↓ CGRectIntersectsRect ( rect1 , rect2 )
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/legacy_constant.html b/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/legacy_constant.html
new file mode 100644
index 000000000..2c26f355b
--- /dev/null
+++ b/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/legacy_constant.html
@@ -0,0 +1,384 @@
+
+
+
+
legacy_constant Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SwiftLintFramework Reference
+
+ legacy_constant Reference
+
+
+
+
+
+
+
+
+
+
+
+
Legacy Constant
+
+
Struct-scoped constants are preferred over legacy global constants.
+
+
+Identifier: legacy_constant
+Enabled by default: Yes
+Supports autocorrection: Yes
+Kind: idiomatic
+Analyzer rule: No
+Minimum Swift compiler version: 5.0.0
+Default configuration: warning
+
+
Non Triggering Examples
+
CGRect . infinite
+
+
CGPoint . zero
+
+
CGRect . zero
+
+
CGSize . zero
+
+
NSPoint . zero
+
+
NSRect . zero
+
+
NSSize . zero
+
+
CGRect . null
+
+
CGFloat . pi
+
+
Float . pi
+
+
Triggering Examples
+
↓ CGRectInfinite
+
+
↓ CGPointZero
+
+
↓ CGRectZero
+
+
↓ CGSizeZero
+
+
↓ NSZeroPoint
+
+
↓ NSZeroRect
+
+
↓ NSZeroSize
+
+
↓ CGRectNull
+
+
↓ CGFloat ( M_PI )
+
+
↓ Float ( M_PI )
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/legacy_constructor.html b/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/legacy_constructor.html
new file mode 100644
index 000000000..97323339b
--- /dev/null
+++ b/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/legacy_constructor.html
@@ -0,0 +1,438 @@
+
+
+
+
legacy_constructor Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SwiftLintFramework Reference
+
+ legacy_constructor Reference
+
+
+
+
+
+
+
+
+
+
+
+
Legacy Constructor
+
+
Swift constructors are preferred over legacy convenience functions.
+
+
+Identifier: legacy_constructor
+Enabled by default: Yes
+Supports autocorrection: Yes
+Kind: idiomatic
+Analyzer rule: No
+Minimum Swift compiler version: 5.0.0
+Default configuration: warning
+
+
Non Triggering Examples
+
CGPoint ( x : 10 , y : 10 )
+
+
CGPoint ( x : xValue , y : yValue )
+
+
CGSize ( width : 10 , height : 10 )
+
+
CGSize ( width : aWidth , height : aHeight )
+
+
CGRect ( x : 0 , y : 0 , width : 10 , height : 10 )
+
+
CGRect ( x : xVal , y : yVal , width : aWidth , height : aHeight )
+
+
CGVector ( dx : 10 , dy : 10 )
+
+
CGVector ( dx : deltaX , dy : deltaY )
+
+
NSPoint ( x : 10 , y : 10 )
+
+
NSPoint ( x : xValue , y : yValue )
+
+
NSSize ( width : 10 , height : 10 )
+
+
NSSize ( width : aWidth , height : aHeight )
+
+
NSRect ( x : 0 , y : 0 , width : 10 , height : 10 )
+
+
NSRect ( x : xVal , y : yVal , width : aWidth , height : aHeight )
+
+
NSRange ( location : 10 , length : 1 )
+
+
NSRange ( location : loc , length : len )
+
+
UIEdgeInsets ( top : 0 , left : 0 , bottom : 10 , right : 10 )
+
+
UIEdgeInsets ( top : aTop , left : aLeft , bottom : aBottom , right : aRight )
+
+
NSEdgeInsets ( top : 0 , left : 0 , bottom : 10 , right : 10 )
+
+
NSEdgeInsets ( top : aTop , left : aLeft , bottom : aBottom , right : aRight )
+
+
UIOffset ( horizontal : 0 , vertical : 10 )
+
+
UIOffset ( horizontal : horizontal , vertical : vertical )
+
+
Triggering Examples
+
↓ CGPointMake ( 10 , 10 )
+
+
↓ CGPointMake ( xVal , yVal )
+
+
↓ CGPointMake ( calculateX (), 10 )
+
+
+
↓ CGSizeMake ( 10 , 10 )
+
+
↓ CGSizeMake ( aWidth , aHeight )
+
+
↓ CGRectMake ( 0 , 0 , 10 , 10 )
+
+
↓ CGRectMake ( xVal , yVal , width , height )
+
+
↓ CGVectorMake ( 10 , 10 )
+
+
↓ CGVectorMake ( deltaX , deltaY )
+
+
↓ NSMakePoint ( 10 , 10 )
+
+
↓ NSMakePoint ( xVal , yVal )
+
+
↓ NSMakeSize ( 10 , 10 )
+
+
↓ NSMakeSize ( aWidth , aHeight )
+
+
↓ NSMakeRect ( 0 , 0 , 10 , 10 )
+
+
↓ NSMakeRect ( xVal , yVal , width , height )
+
+
↓ NSMakeRange ( 10 , 1 )
+
+
↓ NSMakeRange ( loc , len )
+
+
↓ UIEdgeInsetsMake ( 0 , 0 , 10 , 10 )
+
+
↓ UIEdgeInsetsMake ( top , left , bottom , right )
+
+
↓ NSEdgeInsetsMake ( 0 , 0 , 10 , 10 )
+
+
↓ NSEdgeInsetsMake ( top , left , bottom , right )
+
+
↓ CGVectorMake ( 10 , 10 )
+↓ NSMakeRange ( 10 , 1 )
+
+
↓ UIOffsetMake ( 0 , 10 )
+
+
↓ UIOffsetMake ( horizontal , vertical )
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/legacy_hashing.html b/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/legacy_hashing.html
new file mode 100644
index 000000000..8b56b11e5
--- /dev/null
+++ b/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/legacy_hashing.html
@@ -0,0 +1,397 @@
+
+
+
+
legacy_hashing Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SwiftLintFramework Reference
+
+ legacy_hashing Reference
+
+
+
+
+
+
+
+
+
+
+
+
Legacy Hashing
+
+
Prefer using the hash(into:) function instead of overriding hashValue
+
+
+Identifier: legacy_hashing
+Enabled by default: Yes
+Supports autocorrection: No
+Kind: idiomatic
+Analyzer rule: No
+Minimum Swift compiler version: 5.0.0
+Default configuration: warning
+
+
Non Triggering Examples
+
struct Foo : Hashable {
+ let bar : Int = 10
+
+ func hash ( into hasher : inout Hasher ) {
+ hasher . combine ( bar )
+ }
+}
+
+
class Foo : Hashable {
+ let bar : Int = 10
+
+ func hash ( into hasher : inout Hasher ) {
+ hasher . combine ( bar )
+ }
+}
+
+
var hashValue : Int { return 1 }
+class Foo : Hashable {
+ }
+
+
class Foo : Hashable {
+ let bar : String = "Foo"
+
+ public var hashValue : String {
+ return bar
+ }
+}
+
+
class Foo : Hashable {
+ let bar : String = "Foo"
+
+ public var hashValue : String {
+ get { return bar }
+ set { bar = newValue }
+ }
+}
+
+
Triggering Examples
+
struct Foo : Hashable {
+ let bar : Int = 10
+
+ public ↓ var hashValue : Int {
+ return bar
+ }
+}
+
+
class Foo : Hashable {
+ let bar : Int = 10
+
+ public ↓ var hashValue : Int {
+ return bar
+ }
+}
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/legacy_multiple.html b/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/legacy_multiple.html
new file mode 100644
index 000000000..5f5d7a029
--- /dev/null
+++ b/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/legacy_multiple.html
@@ -0,0 +1,375 @@
+
+
+
+
legacy_multiple Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SwiftLintFramework Reference
+
+ legacy_multiple Reference
+
+
+
+
+
+
+
+
+
+
+
+
Legacy Multiple
+
+
Prefer using the isMultiple(of:) function instead of using the remainder operator (%).
+
+
+Identifier: legacy_multiple
+Enabled by default: No
+Supports autocorrection: No
+Kind: idiomatic
+Analyzer rule: No
+Minimum Swift compiler version: 5.0.0
+Default configuration: warning
+
+
Non Triggering Examples
+
cell . contentView . backgroundColor = indexPath . row . isMultiple ( of : 2 ) ? . gray : . white
+
+
guard count . isMultiple ( of : 2 ) else { throw DecodingError . dataCorrupted ( ... ) }
+
+
sanityCheck ( bytes > 0 && bytes . isMultiple ( of : 4 ), "capacity must be multiple of 4 bytes" )
+
+
guard let i = reversedNumbers . firstIndex ( where : { $0 . isMultiple ( of : 2 ) }) else { return }
+
+
let constant = 56
+let isMultiple = value . isMultiple ( of : constant )
+
+
let constant = 56
+let secret = value % constant == 5
+
+
let secretValue = ( value % 3 ) + 2
+
+
Triggering Examples
+
cell . contentView . backgroundColor = indexPath . row ↓ % 2 == 0 ? . gray : . white
+
+
cell . contentView . backgroundColor = 0 == indexPath . row ↓ % 2 ? . gray : . white
+
+
cell . contentView . backgroundColor = indexPath . row ↓ % 2 != 0 ? . gray : . white
+
+
guard count ↓ % 2 == 0 else { throw DecodingError . dataCorrupted ( ... ) }
+
+
sanityCheck ( bytes > 0 && bytes ↓ % 4 == 0 , "capacity must be multiple of 4 bytes" )
+
+
guard let i = reversedNumbers . firstIndex ( where : { $0 ↓ % 2 == 0 }) else { return }
+
+
let constant = 56
+let isMultiple = value ↓ % constant == 0
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/legacy_nsgeometry_functions.html b/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/legacy_nsgeometry_functions.html
new file mode 100644
index 000000000..d9533356e
--- /dev/null
+++ b/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/legacy_nsgeometry_functions.html
@@ -0,0 +1,420 @@
+
+
+
+
legacy_nsgeometry_functions Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SwiftLintFramework Reference
+
+ legacy_nsgeometry_functions Reference
+
+
+
+
+
+
+
+
+
+
+
+
Legacy NSGeometry Functions
+
+
Struct extension properties and methods are preferred over legacy functions
+
+
+Identifier: legacy_nsgeometry_functions
+Enabled by default: Yes
+Supports autocorrection: Yes
+Kind: idiomatic
+Analyzer rule: No
+Minimum Swift compiler version: 5.0.0
+Default configuration: warning
+
+
Non Triggering Examples
+
rect . width
+
+
rect . height
+
+
rect . minX
+
+
rect . midX
+
+
rect . maxX
+
+
rect . minY
+
+
rect . midY
+
+
rect . maxY
+
+
rect . isEmpty
+
+
rect . integral
+
+
rect . insetBy ( dx : 5.0 , dy : - 7.0 )
+
+
rect . offsetBy ( dx : 5.0 , dy : - 7.0 )
+
+
rect1 . union ( rect2 )
+
+
rect1 . intersection ( rect2 )
+
+
rect1 . contains ( rect2 )
+
+
rect . contains ( point )
+
+
rect1 . intersects ( rect2 )
+
+
Triggering Examples
+
↓ NSWidth ( rect )
+
+
↓ NSHeight ( rect )
+
+
↓ NSMinX ( rect )
+
+
↓ NSMidX ( rect )
+
+
↓ NSMaxX ( rect )
+
+
↓ NSMinY ( rect )
+
+
↓ NSMidY ( rect )
+
+
↓ NSMaxY ( rect )
+
+
↓ NSEqualRects ( rect1 , rect2 )
+
+
↓ NSEqualSizes ( size1 , size2 )
+
+
↓ NSEqualPoints ( point1 , point2 )
+
+
↓ NSEdgeInsetsEqual ( insets2 , insets2 )
+
+
↓ NSIsEmptyRect ( rect )
+
+
↓ NSIntegralRect ( rect )
+
+
↓ NSInsetRect ( rect , 10 , 5 )
+
+
↓ NSOffsetRect ( rect , - 2 , 8.3 )
+
+
↓ NSUnionRect ( rect1 , rect2 )
+
+
↓ NSIntersectionRect ( rect1 , rect2 )
+
+
↓ NSContainsRect ( rect1 , rect2 )
+
+
↓ NSPointInRect ( rect , point )
+
+
↓ NSIntersectsRect ( rect1 , rect2 )
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/legacy_objc_type.html b/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/legacy_objc_type.html
new file mode 100644
index 000000000..434968d14
--- /dev/null
+++ b/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/legacy_objc_type.html
@@ -0,0 +1,377 @@
+
+
+
+
legacy_objc_type Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SwiftLintFramework Reference
+
+ legacy_objc_type Reference
+
+
+
+
+
+
+
+
+
+
+
+
Legacy Objective-C Reference Type
+
+
Prefer Swift value types to bridged Objective-C reference types
+
+
+Identifier: legacy_objc_type
+Enabled by default: No
+Supports autocorrection: No
+Kind: idiomatic
+Analyzer rule: No
+Minimum Swift compiler version: 5.0.0
+Default configuration: warning
+
+
Non Triggering Examples
+
var array = Array < Int > ()
+
+
+
var calendar : Calendar ? = nil
+
+
var formatter : NSDataDetector
+
+
var className : String = NSStringFromClass ( MyClass . self )
+
+
_ = URLRequest . CachePolicy . reloadIgnoringLocalCacheData
+
+
_ = Notification . Name ( "com.apple.Music.playerInfo" )
+
+
Triggering Examples
+
var array = ↓ NSArray ()
+
+
var calendar : ↓ NSCalendar ? = nil
+
+
_ = ↓ NSURLRequest . CachePolicy . reloadIgnoringLocalCacheData
+
+
_ = ↓ NSNotification . Name ( "com.apple.Music.playerInfo" )
+
+
let keyValuePair : ( Int ) -> ( ↓ NSString , ↓ NSString ) = {
+ let n = " \( $0 ) " as ↓ NSString ; return ( n , n )
+}
+dictionary = [ ↓ NSString : ↓ NSString ]( uniqueKeysWithValues :
+ ( 1 ... 10_000 ) . lazy . map ( keyValuePair ))
+
+
extension Foundation . Notification . Name {
+ static var reachabilityChanged : Foundation . ↓ NSNotification . Name {
+ return Foundation . Notification . Name ( "org.wordpress.reachability.changed" )
+ }
+}
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/legacy_random.html b/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/legacy_random.html
new file mode 100644
index 000000000..98a8e92e3
--- /dev/null
+++ b/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/legacy_random.html
@@ -0,0 +1,362 @@
+
+
+
+
legacy_random Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SwiftLintFramework Reference
+
+ legacy_random Reference
+
+
+
+
+
+
+
+
+
+
+
+
Legacy Random
+
+
Prefer using type.random(in:) over legacy functions.
+
+
+Identifier: legacy_random
+Enabled by default: Yes
+Supports autocorrection: No
+Kind: idiomatic
+Analyzer rule: No
+Minimum Swift compiler version: 5.0.0
+Default configuration: warning
+
+
Non Triggering Examples
+
Int . random ( in : 0 ..< 10 )
+
+
+
Double . random ( in : 8.6 ... 111.34 )
+
+
+
Float . random ( in : 0 ..< 1 )
+
+
+
Triggering Examples
+
↓ arc4random ( 10 )
+
+
+
↓ arc4random_uniform ( 83 )
+
+
+
↓ drand48 ( 52 )
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/let_var_whitespace.html b/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/let_var_whitespace.html
new file mode 100644
index 000000000..ae1e8cab7
--- /dev/null
+++ b/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/let_var_whitespace.html
@@ -0,0 +1,472 @@
+
+
+
+
let_var_whitespace Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SwiftLintFramework Reference
+
+ let_var_whitespace Reference
+
+
+
+
+
+
+
+
+
+
+
+
Variable Declaration Whitespace
+
+
Let and var should be separated from other statements by a blank line.
+
+
+Identifier: let_var_whitespace
+Enabled by default: No
+Supports autocorrection: No
+Kind: style
+Analyzer rule: No
+Minimum Swift compiler version: 5.0.0
+Default configuration: warning
+
+
Non Triggering Examples
+
let a = 0
+var x = 1
+
+x = 2
+
+
+
a = 5
+
+var x = 1
+
+
+
struct X {
+ var a = 0
+}
+
+
+
let a = 1 +
+ 2
+let b = 5
+
+
+
var x : Int {
+ return 0
+}
+
+
+
var x : Int {
+ let a = 0
+
+ return a
+}
+
+
+
#if os(macOS)
+let a = 0
+#endif
+
+
+
#warning("TODO: remove it")
+let a = 0
+
+
+
#error("TODO: remove it")
+let a = 0
+
+
+
@available ( swift 4 )
+let a = 0
+
+
+
class C {
+ @objc
+ var s : String = ""
+}
+
+
class C {
+ @objc
+ func a () {}
+}
+
+
class C {
+ var x = 0
+ lazy
+ var y = 0
+}
+
+
+
@available ( OSX , introduced : 10.6 )
+@available ( * , deprecated )
+var x = 0
+
+
+
// swiftlint:disable superfluous_disable_command
+// swiftlint:disable force_cast
+
+let x = bar as! Bar
+
+
@available ( swift 4 )
+ @UserDefault ( "param" , defaultValue : true )
+ var isEnabled = true
+
+ @Attribute
+ func f () {}
+
+
var x : Int {
+ let a = 0
+ return a
+}
+
+
+
Triggering Examples
+
var x = 1
+↓ x = 2
+
+
+
+a = 5
+↓ var x = 1
+
+
+
struct X {
+ let a
+ ↓ func x () {}
+}
+
+
+
var x = 0
+↓ @objc func f () {}
+
+
+
var x = 0
+↓ @objc
+ func f () {}
+
+
+
@objc func f () {
+}
+↓ var x = 0
+
+
+
struct S {
+ func f () {}
+ ↓ @Wapper
+ let isNumber = false
+ @Wapper
+ var isEnabled = true
+ ↓ func g () {}
+ }
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/line_length.html b/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/line_length.html
new file mode 100644
index 000000000..b359bf394
--- /dev/null
+++ b/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/line_length.html
@@ -0,0 +1,362 @@
+
+
+
+
line_length Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SwiftLintFramework Reference
+
+ line_length Reference
+
+
+
+
+
+
+
+
+
+
+
+
Line Length
+
+
Lines should not span too many characters.
+
+
+Identifier: line_length
+Enabled by default: Yes
+Supports autocorrection: No
+Kind: metrics
+Analyzer rule: No
+Minimum Swift compiler version: 5.0.0
+Default configuration: warning: 120, error: 200, ignores urls: false, ignores function declarations: false, ignores comments: false, ignores interpolated strings: false
+
+
Non Triggering Examples
+
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+
+
#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)
+
+
+
#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")
+
+
+
Triggering Examples
+
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+
+
#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)
+
+
+
#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/literal_expression_end_indentation.html b/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/literal_expression_end_indentation.html
new file mode 100644
index 000000000..730272b2f
--- /dev/null
+++ b/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/literal_expression_end_indentation.html
@@ -0,0 +1,389 @@
+
+
+
+
literal_expression_end_indentation Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SwiftLintFramework Reference
+
+ literal_expression_end_indentation Reference
+
+
+
+
+
+
+
+
+
+
+
+
Literal Expression End Indentation
+
+
Array and dictionary literal end should have the same indentation as the line that started it.
+
+
+Identifier: literal_expression_end_indentation
+Enabled by default: No
+Supports autocorrection: Yes
+Kind: style
+Analyzer rule: No
+Minimum Swift compiler version: 5.0.0
+Default configuration: warning
+
+
Non Triggering Examples
+
[ 1 , 2 , 3 ]
+
+
[ 1 ,
+ 2
+]
+
+
[
+ 1 ,
+ 2
+]
+
+
[
+ 1 ,
+ 2 ]
+
+
let x = [
+ 1 ,
+ 2
+ ]
+
+
[ key : 2 , key2 : 3 ]
+
+
[ key : 1 ,
+ key2 : 2
+]
+
+
[
+ key : 0 ,
+ key2 : 20
+]
+
+
Triggering Examples
+
let x = [
+ 1 ,
+ 2
+ ↓ ]
+
+
let x = [
+ 1 ,
+ 2
+↓ ]
+
+
let x = [
+ key : value
+ ↓ ]
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/local_doc_comment.html b/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/local_doc_comment.html
new file mode 100644
index 000000000..2edde5755
--- /dev/null
+++ b/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/local_doc_comment.html
@@ -0,0 +1,364 @@
+
+
+
+
local_doc_comment Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SwiftLintFramework Reference
+
+ local_doc_comment Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Doc comments shouldn’t be used in local scopes. Use regular comments.
+
+
+Identifier: local_doc_comment
+Enabled by default: No
+Supports autocorrection: No
+Kind: lint
+Analyzer rule: No
+Minimum Swift compiler version: 5.0.0
+Default configuration: warning
+
+
Non Triggering Examples
+
func foo () {
+ // Local scope documentation should use normal comments.
+ print ( "foo" )
+}
+
+
/// My great property
+var myGreatProperty : String !
+
+
/// Look here for more info: https://github.com.
+var myGreatProperty : String !
+
+
/// Look here for more info:
+/// https://github.com.
+var myGreatProperty : String !
+
+
Triggering Examples
+
func foo () {
+ ↓ /// Docstring inside a function declaration
+ print ( "foo" )
+}
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/lower_acl_than_parent.html b/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/lower_acl_than_parent.html
new file mode 100644
index 000000000..c1a6e0a60
--- /dev/null
+++ b/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/lower_acl_than_parent.html
@@ -0,0 +1,416 @@
+
+
+
+
lower_acl_than_parent Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SwiftLintFramework Reference
+
+ lower_acl_than_parent Reference
+
+
+
+
+
+
+
+
+
+
+
+
Lower ACL than parent
+
+
Ensure declarations have a lower access control level than their enclosing parent
+
+
+Identifier: lower_acl_than_parent
+Enabled by default: No
+Supports autocorrection: Yes
+Kind: lint
+Analyzer rule: No
+Minimum Swift compiler version: 5.0.0
+Default configuration: warning
+
+
Non Triggering Examples
+
public struct Foo { public func bar () {} }
+
+
internal struct Foo { func bar () {} }
+
+
struct Foo { func bar () {} }
+
+
struct Foo { internal func bar () {} }
+
+
open class Foo { public func bar () {} }
+
+
open class Foo { open func bar () {} }
+
+
fileprivate struct Foo { private func bar () {} }
+
+
private struct Foo { private func bar ( id : String ) }
+
+
extension Foo { public func bar () {} }
+
+
private struct Foo { fileprivate func bar () {} }
+
+
private func foo ( id : String ) {}
+
+
private class Foo { func bar () {} }
+
+
public extension Foo { struct Bar { public func baz () {} }}
+
+
public extension Foo { struct Bar { internal func baz () {} }}
+
+
internal extension Foo { struct Bar { internal func baz () {} }}
+
+
extension Foo { struct Bar { internal func baz () {} }}
+
+
Triggering Examples
+
struct Foo { ↓ public func bar () {} }
+
+
enum Foo { ↓ public func bar () {} }
+
+
public class Foo { ↓ open func bar () }
+
+
class Foo { ↓ public private(set) var bar : String ? }
+
+
private struct Foo { ↓ public func bar () {} }
+
+
private class Foo { ↓ public func bar () {} }
+
+
private actor Foo { ↓ public func bar () {} }
+
+
fileprivate struct Foo { ↓ public func bar () {} }
+
+
class Foo { ↓ public func bar () {} }
+
+
actor Foo { ↓ public func bar () {} }
+
+
private struct Foo { ↓ internal func bar () {} }
+
+
fileprivate struct Foo { ↓ internal func bar () {} }
+
+
extension Foo { struct Bar { ↓ public func baz () {} }}
+
+
internal extension Foo { struct Bar { ↓ public func baz () {} }}
+
+
private extension Foo { struct Bar { ↓ public func baz () {} }}
+
+
fileprivate extension Foo { struct Bar { ↓ public func baz () {} }}
+
+
private extension Foo { struct Bar { ↓ internal func baz () {} }}
+
+
fileprivate extension Foo { struct Bar { ↓ internal func baz () {} }}
+
+
public extension Foo { struct Bar { struct Baz { ↓ public func qux () {} }}}
+
+
final class Foo { ↓ public func bar () {} }
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/mark.html b/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/mark.html
new file mode 100644
index 000000000..ef972bf8c
--- /dev/null
+++ b/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/mark.html
@@ -0,0 +1,419 @@
+
+
+
+
mark Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SwiftLintFramework Reference
+
+ mark Reference
+
+
+
+
+
+
+
+
+
+
+
+
Mark
+
+
MARK comment should be in valid format. e.g. ‘// MARK: …’ or ‘// MARK: - …’
+
+
+Identifier: mark
+Enabled by default: Yes
+Supports autocorrection: Yes
+Kind: lint
+Analyzer rule: No
+Minimum Swift compiler version: 5.0.0
+Default configuration: warning
+
+
Non Triggering Examples
+
// MARK: good
+
+
+
// MARK: - good
+
+
+
// MARK: -
+
+
+
// BOOKMARK
+
+
//BOOKMARK
+
+
// BOOKMARKS
+
+
/*
+func test1() {
+}
+//MARK: mark
+func test2() {
+}
+*/
+
+
Triggering Examples
+
↓ //MARK: bad
+
+
↓ // MARK:bad
+
+
↓ //MARK:bad
+
+
↓ // MARK: bad
+
+
↓ // MARK: bad
+
+
↓ // MARK: -bad
+
+
↓ // MARK:- bad
+
+
↓ // MARK:-bad
+
+
↓ //MARK: - bad
+
+
↓ //MARK:- bad
+
+
↓ //MARK: -bad
+
+
↓ //MARK:-bad
+
+
↓ //Mark: bad
+
+
↓ // Mark: bad
+
+
↓ // MARK bad
+
+
↓ //MARK bad
+
+
↓ // MARK - bad
+
+
↓ //MARK : bad
+
+
↓ // MARKL:
+
+
↓ // MARKR
+
+
↓ // MARKK -
+
+
↓ /// MARK:
+
+
↓ /// MARK bad
+
+
↓ //MARK:- Top-Level bad mark
+↓ //MARK:- Another bad mark
+struct MarkTest {}
+↓ // MARK:- Bad mark
+extension MarkTest {}
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/missing_docs.html b/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/missing_docs.html
new file mode 100644
index 000000000..dc393a872
--- /dev/null
+++ b/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/missing_docs.html
@@ -0,0 +1,396 @@
+
+
+
+
missing_docs Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SwiftLintFramework Reference
+
+ missing_docs Reference
+
+
+
+
+
+
+
+
+
+
+
+
Missing Docs
+
+
Declarations should be documented.
+
+
+Identifier: missing_docs
+Enabled by default: No
+Supports autocorrection: No
+Kind: lint
+Analyzer rule: No
+Minimum Swift compiler version: 5.0.0
+Default configuration: warning: open, public, excludes_extensions: true, excludes_inherited_types: true, excludes_trivial_init: false
+
+
Non Triggering Examples
+
/// docs
+public class A {
+/// docs
+public func b () {}
+}
+// no docs
+public class B : A { override public func b () {} }
+
+
import Foundation
+// no docs
+public class B : NSObject {
+// no docs
+override public var description : String { fatalError () } }
+
+
/// docs
+public class A {
+ deinit {}
+}
+
+
public extension A {}
+
+
/// docs
+public class A {
+ public init () {}
+}
+
+
Triggering Examples
+
public func a () {}
+
+
+
// regular comment
+public func a () {}
+
+
+
/* regular comment */
+public func a () {}
+
+
+
/// docs
+public protocol A {
+// no docs
+var b : Int { get } }
+/// docs
+public struct C : A {
+
+public let b : Int
+}
+
+
/// docs
+public class A {
+ public init ( argument : String ) {}
+}
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/modifier_order.html b/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/modifier_order.html
new file mode 100644
index 000000000..6bb2d5d57
--- /dev/null
+++ b/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/modifier_order.html
@@ -0,0 +1,531 @@
+
+
+
+
modifier_order Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SwiftLintFramework Reference
+
+ modifier_order Reference
+
+
+
+
+
+
+
+
+
+
+
+
Modifier Order
+
+
Modifier order should be consistent.
+
+
+Identifier: modifier_order
+Enabled by default: No
+Supports autocorrection: Yes
+Kind: style
+Analyzer rule: No
+Minimum Swift compiler version: 5.0.0
+Default configuration: warning, preferred_modifier_order: [override, acl, setterACL, dynamic, mutators, lazy, final, required, convenience, typeMethods, owned]
+
+
Non Triggering Examples
+
public class Foo {
+ public required convenience init () {}
+}
+
+
public class Foo {
+ public static let bar = 42
+}
+
+
public class Foo {
+ public static var bar : Int {
+ return
+ }
+}
+
+
public class Foo {
+ public class var bar : Int {
+ return 42
+ }
+}
+
+
public class Bar {
+ public class var foo : String {
+ return "foo"
+ }
+}
+public class Foo : Bar {
+ override public final class var foo : String {
+ return "bar"
+ }
+}
+
+
open class Bar {
+ public var foo : Int ? {
+ return 42
+ }
+}
+open class Foo : Bar {
+ override public var foo : Int ? {
+ return 43
+ }
+}
+
+
open class Bar {
+ open class func foo () -> Int {
+ return 42
+ }
+}
+class Foo : Bar {
+ override open class func foo () -> Int {
+ return 43
+ }
+}
+
+
protocol Foo : class {}
+class Bar {
+ public private(set) weak var foo : Foo ?
+}
+
+
@objc
+public final class Foo : NSObject {}
+
+
@objcMembers
+public final class Foo : NSObject {}
+
+
@objc
+override public private(set) weak var foo : Bar ?
+
+
@objc
+public final class Foo : NSObject {}
+
+
@objc
+open final class Foo : NSObject {
+ open weak var weakBar : NSString ? = nil
+}
+
+
public final class Foo {}
+
+
class Bar {
+ func bar () {}
+}
+
+
internal class Foo : Bar {
+ override internal func bar () {}
+}
+
+
public struct Foo {
+ internal weak var weakBar : NSObject ? = nil
+}
+
+
class Foo {
+ internal lazy var bar : String = "foo"
+}
+
+
Triggering Examples
+
class Foo {
+ convenience required public init () {}
+}
+
+
public class Foo {
+ static public let bar = 42
+}
+
+
public class Foo {
+ static public var bar : Int {
+ return 42
+ }
+}
+
+
public class Foo {
+ class public var bar : Int {
+ return 42
+ }
+}
+
+
public class RootFoo {
+ class public var foo : String {
+ return "foo"
+ }
+}
+public class Foo : RootFoo {
+ override final class public var foo : String
+ return "bar"
+ }
+}
+
+
open class Bar {
+ public var foo : Int ? {
+ return 42
+ }
+}
+open class Foo : Bar {
+ public override var foo : Int ? {
+ return 43
+ }
+}
+
+
protocol Foo : class {}
+ class Bar {
+ private(set) public weak var foo : Foo ?
+}
+
+
open class Bar {
+ open class func foo () -> Int {
+ return 42
+ }
+}
+class Foo : Bar {
+ class open override func foo () -> Int {
+ return 43
+ }
+}
+
+
open class Bar {
+ open class func foo () -> Int {
+ return 42
+ }
+}
+class Foo : Bar {
+ open override class func foo () -> Int {
+ return 43
+ }
+}
+
+
@objc
+final public class Foo : NSObject {}
+
+
@objcMembers
+final public class Foo : NSObject {}
+
+
@objc
+final open class Foo : NSObject {
+ weak open var weakBar : NSString ? = nil
+}
+
+
final public class Foo {}
+
+
internal class Foo : Bar {
+ internal override func bar () {}
+}
+
+
public struct Foo {
+ weak internal var weakBar : NSObjetc ? = nil
+}
+
+
class Foo {
+ lazy internal var bar : String = "foo"
+}
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/multiline_arguments.html b/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/multiline_arguments.html
new file mode 100644
index 000000000..bcd5571de
--- /dev/null
+++ b/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/multiline_arguments.html
@@ -0,0 +1,405 @@
+
+
+
+
multiline_arguments Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SwiftLintFramework Reference
+
+ multiline_arguments Reference
+
+
+
+
+
+
+
+
+
+
+
+
Multiline Arguments
+
+
Arguments should be either on the same line, or one per line.
+
+
+Identifier: multiline_arguments
+Enabled by default: No
+Supports autocorrection: No
+Kind: style
+Analyzer rule: No
+Minimum Swift compiler version: 5.0.0
+Default configuration: warning, first_argument_location: any_line, only_enforce_after_first_closure_on_first_line: false
+
+
Non Triggering Examples
+
foo ()
+
+
foo (
+)
+
+
foo { }
+
+
foo {
+
+}
+
+
foo ( 0 )
+
+
foo ( 0 , 1 )
+
+
foo ( 0 , 1 ) { }
+
+
foo ( 0 , param1 : 1 )
+
+
foo ( 0 , param1 : 1 ) { }
+
+
foo ( param1 : 1 )
+
+
foo ( param1 : 1 ) { }
+
+
foo ( param1 : 1 , param2 : true ) { }
+
+
foo ( param1 : 1 , param2 : true , param3 : [ 3 ]) { }
+
+
foo ( param1 : 1 , param2 : true , param3 : [ 3 ]) {
+ bar ()
+}
+
+
foo ( param1 : 1 ,
+ param2 : true ,
+ param3 : [ 3 ])
+
+
foo (
+ param1 : 1 , param2 : true , param3 : [ 3 ]
+)
+
+
foo (
+ param1 : 1 ,
+ param2 : true ,
+ param3 : [ 3 ]
+)
+
+
Triggering Examples
+
foo ( 0 ,
+ param1 : 1 , ↓ param2 : true , ↓ param3 : [ 3 ])
+
+
foo ( 0 , ↓ param1 : 1 ,
+ param2 : true , ↓ param3 : [ 3 ])
+
+
foo ( 0 , ↓ param1 : 1 , ↓ param2 : true ,
+ param3 : [ 3 ])
+
+
foo (
+ 0 , ↓ param1 : 1 ,
+ param2 : true , ↓ param3 : [ 3 ]
+)
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/multiline_arguments_brackets.html b/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/multiline_arguments_brackets.html
new file mode 100644
index 000000000..e526f1369
--- /dev/null
+++ b/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/multiline_arguments_brackets.html
@@ -0,0 +1,452 @@
+
+
+
+
multiline_arguments_brackets Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SwiftLintFramework Reference
+
+ multiline_arguments_brackets Reference
+
+
+
+
+
+
+
+
+
+
+
+
Multiline Arguments Brackets
+
+
Multiline arguments should have their surrounding brackets in a new line.
+
+
+Identifier: multiline_arguments_brackets
+Enabled by default: No
+Supports autocorrection: No
+Kind: style
+Analyzer rule: No
+Minimum Swift compiler version: 5.0.0
+Default configuration: warning
+
+
Non Triggering Examples
+
foo ( param1 : "Param1" , param2 : "Param2" , param3 : "Param3" )
+
+
foo (
+ param1 : "Param1" , param2 : "Param2" , param3 : "Param3"
+)
+
+
func foo (
+ param1 : "Param1" ,
+ param2 : "Param2" ,
+ param3 : "Param3"
+)
+
+
foo { param1 , param2 in
+ print ( "hello world" )
+}
+
+
foo (
+ bar (
+ x : 5 ,
+ y : 7
+ )
+)
+
+
AlertViewModel . AlertAction ( title : "some title" , style : . default ) {
+ AlertManager . shared . presentNextDebugAlert ()
+}
+
+
public final class Logger {
+ public static let shared = Logger ( outputs : [
+ OSLoggerOutput (),
+ ErrorLoggerOutput ()
+ ])
+}
+
+
let errors = try self . download ([
+ ( description : description , priority : priority ),
+])
+
+
return SignalProducer ({ observer , _ in
+ observer . sendCompleted ()
+}) . onMainQueue ()
+
+
SomeType ( a : [
+ 1 , 2 , 3
+], b : [ 1 , 2 ])
+
+
SomeType (
+ a : 1
+) { print ( "completion" ) }
+
+
SomeType (
+ a : 1
+) {
+ print ( "completion" )
+}
+
+
SomeType (
+ a : . init () { print ( "completion" ) }
+)
+
+
SomeType (
+ a : . init () {
+ print ( "completion" )
+ }
+)
+
+
SomeType (
+ a : 1
+) {} onError : {}
+
+
Triggering Examples
+
foo ( ↓ param1 : "Param1" , param2 : "Param2" ,
+ param3 : "Param3"
+)
+
+
foo (
+ param1 : "Param1" ,
+ param2 : "Param2" ,
+ param3 : "Param3" ↓ )
+
+
foo ( ↓ param1 : "Param1" ,
+ param2 : "Param2" ,
+ param3 : "Param3" ↓ )
+
+
foo ( ↓ bar (
+ x : 5 ,
+ y : 7
+)
+)
+
+
foo (
+ bar (
+ x : 5 ,
+ y : 7
+) ↓ )
+
+
SomeOtherType ( ↓ a : [
+ 1 , 2 , 3
+ ],
+ b : "two" ↓ )
+
+
SomeOtherType (
+ a : 1 ↓ ) {}
+
+
SomeOtherType (
+ a : 1 ↓ ) {
+ print ( "completion" )
+}
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/multiline_function_chains.html b/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/multiline_function_chains.html
new file mode 100644
index 000000000..0dec68d4b
--- /dev/null
+++ b/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/multiline_function_chains.html
@@ -0,0 +1,411 @@
+
+
+
+
multiline_function_chains Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SwiftLintFramework Reference
+
+ multiline_function_chains Reference
+
+
+
+
+
+
+
+
+
+
+
+
Multiline Function Chains
+
+
Chained function calls should be either on the same line, or one per line.
+
+
+Identifier: multiline_function_chains
+Enabled by default: No
+Supports autocorrection: No
+Kind: style
+Analyzer rule: No
+Minimum Swift compiler version: 5.0.0
+Default configuration: warning
+
+
Non Triggering Examples
+
let evenSquaresSum = [ 20 , 17 , 35 , 4 ] . filter { $0 % 2 == 0 } . map { $0 * $0 } . reduce ( 0 , + )
+
+
let evenSquaresSum = [ 20 , 17 , 35 , 4 ]
+ . filter { $0 % 2 == 0 } . map { $0 * $0 } . reduce ( 0 , + ) ",
+
+
let chain = a
+ . b ( 1 , 2 , 3 )
+ . c { blah in
+ print ( blah )
+ }
+ . d ()
+
+
let chain = a . b ( 1 , 2 , 3 )
+ . c { blah in
+ print ( blah )
+ }
+ . d ()
+
+
let chain = a . b ( 1 , 2 , 3 )
+ . c { blah in print ( blah ) }
+ . d ()
+
+
let chain = a . b ( 1 , 2 , 3 )
+ . c ( . init (
+ a : 1 ,
+ b , 2 ,
+ c , 3 ))
+ . d ()
+
+
self . viewModel . outputs . postContextualNotification
+ . observeForUI ()
+ . observeValues {
+ NotificationCenter . default . post (
+ Notification (
+ name : . ksr_showNotificationsDialog ,
+ userInfo : [ UserInfoKeys . context : PushNotificationDialog . Context . pledge ,
+ UserInfoKeys . viewController : self ]
+ )
+ )
+ }
+
+
let remainingIDs = Array ( Set ( self . currentIDs ) . subtracting ( Set ( response . ids )))
+
+
self . happeningNewsletterOn = self . updateCurrentUser
+ . map { $0 . newsletters . happening } . skipNil () . skipRepeats ()
+
+
Triggering Examples
+
let evenSquaresSum = [ 20 , 17 , 35 , 4 ]
+ . filter { $0 % 2 == 0 } ↓ . map { $0 * $0 }
+ . reduce ( 0 , + )
+
+
let evenSquaresSum = a . b ( 1 , 2 , 3 )
+ . c { blah in
+ print ( blah )
+ } ↓ . d ()
+
+
let evenSquaresSum = a . b ( 1 , 2 , 3 )
+ . c ( 2 , 3 , 4 ) ↓ . d ()
+
+
let evenSquaresSum = a . b ( 1 , 2 , 3 ) ↓ . c { blah in
+ print ( blah )
+ }
+ . d ()
+
+
a . b {
+// ““
+} ↓ . e ()
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/multiline_literal_brackets.html b/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/multiline_literal_brackets.html
new file mode 100644
index 000000000..76a6c9f44
--- /dev/null
+++ b/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/multiline_literal_brackets.html
@@ -0,0 +1,418 @@
+
+
+
+
multiline_literal_brackets Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SwiftLintFramework Reference
+
+ multiline_literal_brackets Reference
+
+
+
+
+
+
+
+
+
+
+
+
Multiline Literal Brackets
+
+
Multiline literals should have their surrounding brackets in a new line.
+
+
+Identifier: multiline_literal_brackets
+Enabled by default: No
+Supports autocorrection: No
+Kind: style
+Analyzer rule: No
+Minimum Swift compiler version: 5.0.0
+Default configuration: warning
+
+
Non Triggering Examples
+
let trio = [ "harry" , "ronald" , "hermione" ]
+let houseCup = [ "gryffindor" : 460 , "hufflepuff" : 370 , "ravenclaw" : 410 , "slytherin" : 450 ]
+
+
let trio = [
+ "harry" ,
+ "ronald" ,
+ "hermione"
+]
+let houseCup = [
+ "gryffindor" : 460 ,
+ "hufflepuff" : 370 ,
+ "ravenclaw" : 410 ,
+ "slytherin" : 450
+]
+
+
let trio = [
+ "harry" , "ronald" , "hermione"
+]
+let houseCup = [
+ "gryffindor" : 460 , "hufflepuff" : 370 ,
+ "ravenclaw" : 410 , "slytherin" : 450
+]
+
+
_ = [
+ 1 ,
+ 2 ,
+ 3 ,
+ 4 ,
+ 5 , 6 ,
+ 7 , 8 , 9
+ ]
+
+
Triggering Examples
+
let trio = [ ↓ "harry" ,
+ "ronald" ,
+ "hermione"
+]
+
+
let houseCup = [ ↓ "gryffindor" : 460 , "hufflepuff" : 370 ,
+ "ravenclaw" : 410 , "slytherin" : 450
+]
+
+
let houseCup = [ ↓ "gryffindor" : 460 ,
+ "hufflepuff" : 370 ,
+ "ravenclaw" : 410 ,
+ "slytherin" : 450 ↓ ]
+
+
let trio = [
+ "harry" ,
+ "ronald" ,
+ "hermione" ↓ ]
+
+
let houseCup = [
+ "gryffindor" : 460 , "hufflepuff" : 370 ,
+ "ravenclaw" : 410 , "slytherin" : 450 ↓ ]
+
+
class Hogwarts {
+ let houseCup = [
+ "gryffindor" : 460 , "hufflepuff" : 370 ,
+ "ravenclaw" : 410 , "slytherin" : 450 ↓ ]
+}
+
+
_ = [
+ 1 ,
+ 2 ,
+ 3 ,
+ 4 ,
+ 5 , 6 ,
+ 7 , 8 , 9 ↓ ]
+
+
_ = [ ↓ 1 , 2 , 3 ,
+ 4 , 5 , 6 ,
+ 7 , 8 , 9
+ ]
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/multiline_parameters.html b/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/multiline_parameters.html
new file mode 100644
index 000000000..4fe2d1e02
--- /dev/null
+++ b/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/multiline_parameters.html
@@ -0,0 +1,702 @@
+
+
+
+
multiline_parameters Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SwiftLintFramework Reference
+
+ multiline_parameters Reference
+
+
+
+
+
+
+
+
+
+
+
+
Multiline Parameters
+
+
Functions and methods parameters should be either on the same line, or one per line.
+
+
+Identifier: multiline_parameters
+Enabled by default: No
+Supports autocorrection: No
+Kind: style
+Analyzer rule: No
+Minimum Swift compiler version: 5.0.0
+Default configuration: warning, allowsSingleLine: true
+
+
Non Triggering Examples
+
func foo () { }
+
+
func foo ( param1 : Int ) { }
+
+
func foo ( param1 : Int , param2 : Bool ) { }
+
+
func foo ( param1 : Int , param2 : Bool , param3 : [ String ]) { }
+
+
func foo ( param1 : Int ,
+ param2 : Bool ,
+ param3 : [ String ]) { }
+
+
func foo ( _ param1 : Int , param2 : Int , param3 : Int ) -> ( Int ) -> Int {
+ return { x in x + param1 + param2 + param3 }
+}
+
+
static func foo () { }
+
+
static func foo ( param1 : Int ) { }
+
+
static func foo ( param1 : Int , param2 : Bool ) { }
+
+
static func foo ( param1 : Int , param2 : Bool , param3 : [ String ]) { }
+
+
static func foo ( param1 : Int ,
+ param2 : Bool ,
+ param3 : [ String ]) { }
+
+
protocol Foo {
+ func foo () { }
+}
+
+
protocol Foo {
+ func foo ( param1 : Int ) { }
+}
+
+
protocol Foo {
+ func foo ( param1 : Int , param2 : Bool ) { }
+}
+
+
protocol Foo {
+ func foo ( param1 : Int , param2 : Bool , param3 : [ String ]) { }
+}
+
+
protocol Foo {
+ func foo ( param1 : Int ,
+ param2 : Bool ,
+ param3 : [ String ]) { }
+}
+
+
protocol Foo {
+ static func foo ( param1 : Int , param2 : Bool , param3 : [ String ]) { }
+}
+
+
protocol Foo {
+ static func foo ( param1 : Int ,
+ param2 : Bool ,
+ param3 : [ String ]) { }
+}
+
+
protocol Foo {
+ class func foo ( param1 : Int , param2 : Bool , param3 : [ String ]) { }
+}
+
+
protocol Foo {
+ class func foo ( param1 : Int ,
+ param2 : Bool ,
+ param3 : [ String ]) { }
+}
+
+
enum Foo {
+ func foo () { }
+}
+
+
enum Foo {
+ func foo ( param1 : Int ) { }
+}
+
+
enum Foo {
+ func foo ( param1 : Int , param2 : Bool ) { }
+}
+
+
enum Foo {
+ func foo ( param1 : Int , param2 : Bool , param3 : [ String ]) { }
+}
+
+
enum Foo {
+ func foo ( param1 : Int ,
+ param2 : Bool ,
+ param3 : [ String ]) { }
+}
+
+
enum Foo {
+ static func foo ( param1 : Int , param2 : Bool , param3 : [ String ]) { }
+}
+
+
enum Foo {
+ static func foo ( param1 : Int ,
+ param2 : Bool ,
+ param3 : [ String ]) { }
+}
+
+
struct Foo {
+ func foo () { }
+}
+
+
struct Foo {
+ func foo ( param1 : Int ) { }
+}
+
+
struct Foo {
+ func foo ( param1 : Int , param2 : Bool ) { }
+}
+
+
struct Foo {
+ func foo ( param1 : Int , param2 : Bool , param3 : [ String ]) { }
+}
+
+
struct Foo {
+ func foo ( param1 : Int ,
+ param2 : Bool ,
+ param3 : [ String ]) { }
+}
+
+
struct Foo {
+ static func foo ( param1 : Int , param2 : Bool , param3 : [ String ]) { }
+}
+
+
struct Foo {
+ static func foo ( param1 : Int ,
+ param2 : Bool ,
+ param3 : [ String ]) { }
+}
+
+
class Foo {
+ func foo () { }
+}
+
+
class Foo {
+ func foo ( param1 : Int ) { }
+}
+
+
class Foo {
+ func foo ( param1 : Int , param2 : Bool ) { }
+}
+
+
class Foo {
+ func foo ( param1 : Int , param2 : Bool , param3 : [ String ]) { }
+ }
+
+
class Foo {
+ func foo ( param1 : Int ,
+ param2 : Bool ,
+ param3 : [ String ]) { }
+}
+
+
class Foo {
+ class func foo ( param1 : Int , param2 : Bool , param3 : [ String ]) { }
+}
+
+
class Foo {
+ class func foo ( param1 : Int ,
+ param2 : Bool ,
+ param3 : [ String ]) { }
+}
+
+
class Foo {
+ class func foo ( param1 : Int ,
+ param2 : Bool ,
+ param3 : @escaping ( Int , Int ) -> Void = { _ , _ in }) { }
+}
+
+
class Foo {
+ class func foo ( param1 : Int ,
+ param2 : Bool ,
+ param3 : @escaping ( Int ) -> Void = { _ in }) { }
+}
+
+
class Foo {
+ class func foo ( param1 : Int ,
+ param2 : Bool ,
+ param3 : @escaping (( Int ) -> Void )? = nil ) { }
+}
+
+
class Foo {
+ class func foo ( param1 : Int ,
+ param2 : Bool ,
+ param3 : @escaping (( Int ) -> Void )? = { _ in }) { }
+}
+
+
class Foo {
+ class func foo ( param1 : Int ,
+ param2 : @escaping (( Int ) -> Void )? = { _ in },
+ param3 : Bool ) { }
+}
+
+
class Foo {
+ class func foo ( param1 : Int ,
+ param2 : @escaping (( Int ) -> Void )? = { _ in },
+ param3 : @escaping ( Int , Int ) -> Void = { _ , _ in }) { }
+}
+
+
class Foo {
+ class func foo ( param1 : Int ,
+ param2 : Bool ,
+ param3 : @escaping ( Int ) -> Void = { ( x : Int ) in }) { }
+}
+
+
class Foo {
+ class func foo ( param1 : Int ,
+ param2 : Bool ,
+ param3 : @escaping ( Int , ( Int ) -> Void ) -> Void = { ( x : Int , f : ( Int ) -> Void ) in }) { }
+}
+
+
class Foo {
+ init ( param1 : Int ,
+ param2 : Bool ,
+ param3 : @escaping (( Int ) -> Void )? = { _ in }) { }
+}
+
+
func foo () { }
+
+
func foo ( param1 : Int ) { }
+
+
protocol Foo {
+ func foo ( param1 : Int ,
+ param2 : Bool ,
+ param3 : [ String ]) { }
+}
+
+
protocol Foo {
+ func foo (
+ param1 : Int
+ ) { }
+}
+
+
protocol Foo {
+ func foo (
+ param1 : Int ,
+ param2 : Bool ,
+ param3 : [ String ]
+ ) { }
+}
+
+
Triggering Examples
+
func ↓ foo ( _ param1 : Int ,
+ param2 : Int , param3 : Int ) -> ( Int ) -> Int {
+ return { x in x + param1 + param2 + param3 }
+}
+
+
protocol Foo {
+ func ↓ foo ( param1 : Int ,
+ param2 : Bool , param3 : [ String ]) { }
+}
+
+
protocol Foo {
+ func ↓ foo ( param1 : Int , param2 : Bool ,
+ param3 : [ String ]) { }
+}
+
+
protocol Foo {
+ static func ↓ foo ( param1 : Int ,
+ param2 : Bool , param3 : [ String ]) { }
+}
+
+
protocol Foo {
+ static func ↓ foo ( param1 : Int , param2 : Bool ,
+ param3 : [ String ]) { }
+}
+
+
protocol Foo {
+ class func ↓ foo ( param1 : Int ,
+ param2 : Bool , param3 : [ String ]) { }
+}
+
+
protocol Foo {
+ class func ↓ foo ( param1 : Int , param2 : Bool ,
+ param3 : [ String ]) { }
+}
+
+
enum Foo {
+ func ↓ foo ( param1 : Int ,
+ param2 : Bool , param3 : [ String ]) { }
+}
+
+
enum Foo {
+ func ↓ foo ( param1 : Int , param2 : Bool ,
+ param3 : [ String ]) { }
+}
+
+
enum Foo {
+ static func ↓ foo ( param1 : Int ,
+ param2 : Bool , param3 : [ String ]) { }
+}
+
+
enum Foo {
+ static func ↓ foo ( param1 : Int , param2 : Bool ,
+ param3 : [ String ]) { }
+}
+
+
struct Foo {
+ func ↓ foo ( param1 : Int ,
+ param2 : Bool , param3 : [ String ]) { }
+}
+
+
struct Foo {
+ func ↓ foo ( param1 : Int , param2 : Bool ,
+ param3 : [ String ]) { }
+}
+
+
struct Foo {
+ static func ↓ foo ( param1 : Int ,
+ param2 : Bool , param3 : [ String ]) { }
+}
+
+
struct Foo {
+ static func ↓ foo ( param1 : Int , param2 : Bool ,
+ param3 : [ String ]) { }
+}
+
+
class Foo {
+ func ↓ foo ( param1 : Int ,
+ param2 : Bool , param3 : [ String ]) { }
+}
+
+
class Foo {
+ func ↓ foo ( param1 : Int , param2 : Bool ,
+ param3 : [ String ]) { }
+}
+
+
class Foo {
+ class func ↓ foo ( param1 : Int ,
+ param2 : Bool , param3 : [ String ]) { }
+}
+
+
class Foo {
+ class func ↓ foo ( param1 : Int , param2 : Bool ,
+ param3 : [ String ]) { }
+}
+
+
class Foo {
+ class func ↓ foo ( param1 : Int ,
+ param2 : Bool , param3 : @escaping ( Int , Int ) -> Void = { _ , _ in }) { }
+}
+
+
class Foo {
+ class func ↓ foo ( param1 : Int ,
+ param2 : Bool , param3 : @escaping ( Int ) -> Void = { ( x : Int ) in }) { }
+}
+
+
class Foo {
+ ↓ init ( param1 : Int , param2 : Bool ,
+ param3 : @escaping (( Int ) -> Void )? = { _ in }) { }
+}
+
+
func ↓ foo ( param1 : Int , param2 : Bool ) { }
+
+
func ↓ foo ( param1 : Int , param2 : Bool , param3 : [ String ]) { }
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/multiline_parameters_brackets.html b/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/multiline_parameters_brackets.html
new file mode 100644
index 000000000..a57dfcfec
--- /dev/null
+++ b/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/multiline_parameters_brackets.html
@@ -0,0 +1,406 @@
+
+
+
+
multiline_parameters_brackets Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SwiftLintFramework Reference
+
+ multiline_parameters_brackets Reference
+
+
+
+
+
+
+
+
+
+
+
+
Multiline Parameters Brackets
+
+
Multiline parameters should have their surrounding brackets in a new line.
+
+
+Identifier: multiline_parameters_brackets
+Enabled by default: No
+Supports autocorrection: No
+Kind: style
+Analyzer rule: No
+Minimum Swift compiler version: 5.0.0
+Default configuration: warning
+
+
Non Triggering Examples
+
func foo ( param1 : String , param2 : String , param3 : String )
+
+
func foo (
+ param1 : String , param2 : String , param3 : String
+)
+
+
func foo (
+ param1 : String ,
+ param2 : String ,
+ param3 : String
+)
+
+
class SomeType {
+ func foo ( param1 : String , param2 : String , param3 : String )
+}
+
+
class SomeType {
+ func foo (
+ param1 : String , param2 : String , param3 : String
+ )
+}
+
+
class SomeType {
+ func foo (
+ param1 : String ,
+ param2 : String ,
+ param3 : String
+ )
+}
+
+
func foo < T > ( param1 : T , param2 : String , param3 : String ) -> T { /* some code */ }
+
+
func foo ( a : [ Int ] = [
+ 1
+ ])
+
+
Triggering Examples
+
func foo ( ↓ param1 : String , param2 : String ,
+ param3 : String
+)
+
+
func foo (
+ param1 : String ,
+ param2 : String ,
+ param3 : String ↓ )
+
+
class SomeType {
+ func foo ( ↓ param1 : String , param2 : String ,
+ param3 : String
+ )
+}
+
+
class SomeType {
+ func foo (
+ param1 : String ,
+ param2 : String ,
+ param3 : String ↓ )
+}
+
+
func foo < T > ( ↓ param1 : T , param2 : String ,
+ param3 : String
+) -> T
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/multiple_closures_with_trailing_closure.html b/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/multiple_closures_with_trailing_closure.html
new file mode 100644
index 000000000..2a4006682
--- /dev/null
+++ b/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/multiple_closures_with_trailing_closure.html
@@ -0,0 +1,378 @@
+
+
+
+
multiple_closures_with_trailing_closure Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SwiftLintFramework Reference
+
+ multiple_closures_with_trailing_closure Reference
+
+
+
+
+
+
+
+
+
+
+
+
Multiple Closures with Trailing Closure
+
+
Trailing closure syntax should not be used when passing more than one closure argument.
+
+
+Identifier: multiple_closures_with_trailing_closure
+Enabled by default: Yes
+Supports autocorrection: No
+Kind: style
+Analyzer rule: No
+Minimum Swift compiler version: 5.0.0
+Default configuration: warning
+
+
Non Triggering Examples
+
foo . map { $0 + 1 }
+
+
+
foo . reduce ( 0 ) { $0 + $1 }
+
+
+
if let foo = bar . map ({ $0 + 1 }) {
+
+}
+
+
+
foo . something ( param1 : { $0 }, param2 : { $0 + 1 })
+
+
+
UIView . animate ( withDuration : 1.0 ) {
+ someView . alpha = 0.0
+}
+
+
foo . method { print ( 0 ) } arg2 : { print ( 1 ) }
+
+
foo . methodWithParenArgs (( 0 , 1 ), arg2 : ( 0 , 1 , 2 )) { $0 } arg4 : { $0 }
+
+
Triggering Examples
+
foo . something ( param1 : { $0 }) ↓ { $0 + 1 }
+
+
UIView . animate ( withDuration : 1.0 , animations : {
+ someView . alpha = 0.0
+}) ↓ { _ in
+ someView . removeFromSuperview ()
+}
+
+
foo . multipleTrailing ( arg1 : { $0 }) { $0 } arg3 : { $0 }
+
+
foo . methodWithParenArgs ( param1 : { $0 }, param2 : ( 0 , 1 ), ( 0 , 1 )) { $0 }
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/nesting.html b/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/nesting.html
new file mode 100644
index 000000000..848645a68
--- /dev/null
+++ b/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/nesting.html
@@ -0,0 +1,1033 @@
+
+
+
+
nesting Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SwiftLintFramework Reference
+
+ nesting Reference
+
+
+
+
+
+
+
+
+
+
+
+
Nesting
+
+
Types should be nested at most 1 level deep, and functions should be nested at most 2 levels deep.
+
+
+Identifier: nesting
+Enabled by default: Yes
+Supports autocorrection: No
+Kind: metrics
+Analyzer rule: No
+Minimum Swift compiler version: 5.0.0
+Default configuration: (type_level) w: 1, (function_level) w: 2, (check_nesting_in_closures_and_statements) true, (always_allow_one_type_in_functions) false
+
+
Non Triggering Examples
+
class Example_0 {
+ class Example_1 {}
+ }
+
+
var example : Int {
+ class Example_0 {
+ class Example_1 {}
+ }
+ return 5
+ }
+
+
var example : Int = 5 {
+ didSet {
+ class Example_0 {
+ class Example_1 {}
+ }
+ }
+ }
+
+
extension Example_0 {
+ class Example_1 {}
+ }
+
+
struct Example_0 {
+ struct Example_1 {}
+ }
+
+
var example : Int {
+ struct Example_0 {
+ struct Example_1 {}
+ }
+ return 5
+ }
+
+
var example : Int = 5 {
+ didSet {
+ struct Example_0 {
+ struct Example_1 {}
+ }
+ }
+ }
+
+
extension Example_0 {
+ struct Example_1 {}
+ }
+
+
enum Example_0 {
+ enum Example_1 {}
+ }
+
+
var example : Int {
+ enum Example_0 {
+ enum Example_1 {}
+ }
+ return 5
+ }
+
+
var example : Int = 5 {
+ didSet {
+ enum Example_0 {
+ enum Example_1 {}
+ }
+ }
+ }
+
+
extension Example_0 {
+ enum Example_1 {}
+ }
+
+
func f_0 () {
+ func f_1 () {
+ func f_2 () {}
+ }
+ }
+
+
var example : Int {
+ func f_0 () {
+ func f_1 () {
+ func f_2 () {}
+ }
+ }
+ return 5
+ }
+
+
var example : Int = 5 {
+ didSet {
+ func f_0 () {
+ func f_1 () {
+ func f_2 () {}
+ }
+ }
+ }
+ }
+
+
extension Example_0 {
+ func f_0 () {
+ func f_1 () {
+ func f_2 () {}
+ }
+ }
+ }
+
+
switch example {
+ case . exampleCase :
+ class Example_0 {
+ class Example_1 {}
+ }
+ default :
+ func f_0 () {
+ func f_1 () {
+ func f_2 () {}
+ }
+ }
+ }
+
+
var exampleClosure : () -> Void = {
+ class Example_0 {
+ class Example_1 {}
+ }
+ func f_0 () {
+ func f_1 () {
+ func f_2 () {}
+ }
+ }
+ }
+
+
exampleFunc ( closure : {
+ class Example_0 {
+ class Example_1 {}
+ }
+ func f_0 () {
+ func f_1 () {
+ func f_2 () {}
+ }
+ }
+ })
+
+
switch example {
+ case . exampleCase :
+ struct Example_0 {
+ struct Example_1 {}
+ }
+ default :
+ func f_0 () {
+ func f_1 () {
+ func f_2 () {}
+ }
+ }
+ }
+
+
var exampleClosure : () -> Void = {
+ struct Example_0 {
+ struct Example_1 {}
+ }
+ func f_0 () {
+ func f_1 () {
+ func f_2 () {}
+ }
+ }
+ }
+
+
exampleFunc ( closure : {
+ struct Example_0 {
+ struct Example_1 {}
+ }
+ func f_0 () {
+ func f_1 () {
+ func f_2 () {}
+ }
+ }
+ })
+
+
switch example {
+ case . exampleCase :
+ enum Example_0 {
+ enum Example_1 {}
+ }
+ default :
+ func f_0 () {
+ func f_1 () {
+ func f_2 () {}
+ }
+ }
+ }
+
+
var exampleClosure : () -> Void = {
+ enum Example_0 {
+ enum Example_1 {}
+ }
+ func f_0 () {
+ func f_1 () {
+ func f_2 () {}
+ }
+ }
+ }
+
+
exampleFunc ( closure : {
+ enum Example_0 {
+ enum Example_1 {}
+ }
+ func f_0 () {
+ func f_1 () {
+ func f_2 () {}
+ }
+ }
+ })
+
+
class Example_0 {
+ func f_0 () {
+ class Example_1 {
+ func f_1 () {
+ func f_2 () {}
+ }
+ }
+ }
+ }
+
+
class Example_0 {
+ func f_0 () {
+ switch example {
+ case . exampleCase :
+ class Example_1 {
+ func f_1 () {
+ func f_2 () {}
+ }
+ }
+ default :
+ exampleFunc ( closure : {
+ class Example_1 {
+ func f_1 () {
+ func f_2 () {}
+ }
+ }
+ })
+ }
+ }
+ }
+
+
struct Example_0 {
+ func f_0 () {
+ struct Example_1 {
+ func f_1 () {
+ func f_2 () {}
+ }
+ }
+ }
+ }
+
+
struct Example_0 {
+ func f_0 () {
+ switch example {
+ case . exampleCase :
+ struct Example_1 {
+ func f_1 () {
+ func f_2 () {}
+ }
+ }
+ default :
+ exampleFunc ( closure : {
+ struct Example_1 {
+ func f_1 () {
+ func f_2 () {}
+ }
+ }
+ })
+ }
+ }
+ }
+
+
enum Example_0 {
+ func f_0 () {
+ enum Example_1 {
+ func f_1 () {
+ func f_2 () {}
+ }
+ }
+ }
+ }
+
+
enum Example_0 {
+ func f_0 () {
+ switch example {
+ case . exampleCase :
+ enum Example_1 {
+ func f_1 () {
+ func f_2 () {}
+ }
+ }
+ default :
+ exampleFunc ( closure : {
+ enum Example_1 {
+ func f_1 () {
+ func f_2 () {}
+ }
+ }
+ })
+ }
+ }
+ }
+
+
Triggering Examples
+
class Example_0 {
+ class Example_1 {
+ ↓ class Example_2 {}
+ }
+ }
+
+
var example : Int {
+ class Example_0 {
+ class Example_1 {
+ ↓ class Example_2 {}
+ }
+ }
+ return 5
+ }
+
+
var example : Int = 5 {
+ didSet {
+ class Example_0 {
+ class Example_1 {
+ ↓ class Example_2 {}
+ }
+ }
+ }
+ }
+
+
extension Example_0 {
+ class Example_1 {
+ ↓ class Example_2 {}
+ }
+ }
+
+
struct Example_0 {
+ struct Example_1 {
+ ↓ struct Example_2 {}
+ }
+ }
+
+
var example : Int {
+ struct Example_0 {
+ struct Example_1 {
+ ↓ struct Example_2 {}
+ }
+ }
+ return 5
+ }
+
+
var example : Int = 5 {
+ didSet {
+ struct Example_0 {
+ struct Example_1 {
+ ↓ struct Example_2 {}
+ }
+ }
+ }
+ }
+
+
extension Example_0 {
+ struct Example_1 {
+ ↓ struct Example_2 {}
+ }
+ }
+
+
enum Example_0 {
+ enum Example_1 {
+ ↓ enum Example_2 {}
+ }
+ }
+
+
var example : Int {
+ enum Example_0 {
+ enum Example_1 {
+ ↓ enum Example_2 {}
+ }
+ }
+ return 5
+ }
+
+
var example : Int = 5 {
+ didSet {
+ enum Example_0 {
+ enum Example_1 {
+ ↓ enum Example_2 {}
+ }
+ }
+ }
+ }
+
+
extension Example_0 {
+ enum Example_1 {
+ ↓ enum Example_2 {}
+ }
+ }
+
+
func f_0 () {
+ func f_1 () {
+ func f_2 () {
+ ↓ func f_3 () {}
+ }
+ }
+ }
+
+
var example : Int {
+ func f_0 () {
+ func f_1 () {
+ func f_2 () {
+ ↓ func f_3 () {}
+ }
+ }
+ }
+ return 5
+ }
+
+
var example : Int = 5 {
+ didSet {
+ func f_0 () {
+ func f_1 () {
+ func f_2 () {
+ ↓ func f_3 () {}
+ }
+ }
+ }
+ }
+ }
+
+
extension Example_0 {
+ func f_0 () {
+ func f_1 () {
+ func f_2 () {
+ ↓ func f_3 () {}
+ }
+ }
+ }
+ }
+
+
switch example {
+ case . exampleCase :
+ class Example_0 {
+ class Example_1 {
+ ↓ class Example_2 {}
+ }
+ }
+ default :
+ func f_0 () {
+ func f_1 () {
+ func f_2 () {
+ ↓ func f_3 () {}
+ }
+ }
+ }
+ }
+
+
var exampleClosure : () -> Void = {
+ class Example_0 {
+ class Example_1 {
+ ↓ class Example_2 {}
+ }
+ }
+ func f_0 () {
+ func f_1 () {
+ func f_2 () {
+ ↓ func f_3 () {}
+ }
+ }
+ }
+ }
+
+
exampleFunc ( closure : {
+ class Example_0 {
+ class Example_1 {}
+ }
+ func f_0 () {
+ func f_1 () {
+ func f_2 () {
+ ↓ func f_3 () {}
+ }
+ }
+ }
+ })
+
+
switch example {
+ case . exampleCase :
+ struct Example_0 {
+ struct Example_1 {
+ ↓ struct Example_2 {}
+ }
+ }
+ default :
+ func f_0 () {
+ func f_1 () {
+ func f_2 () {
+ ↓ func f_3 () {}
+ }
+ }
+ }
+ }
+
+
var exampleClosure : () -> Void = {
+ struct Example_0 {
+ struct Example_1 {
+ ↓ struct Example_2 {}
+ }
+ }
+ func f_0 () {
+ func f_1 () {
+ func f_2 () {
+ ↓ func f_3 () {}
+ }
+ }
+ }
+ }
+
+
exampleFunc ( closure : {
+ struct Example_0 {
+ struct Example_1 {}
+ }
+ func f_0 () {
+ func f_1 () {
+ func f_2 () {
+ ↓ func f_3 () {}
+ }
+ }
+ }
+ })
+
+
switch example {
+ case . exampleCase :
+ enum Example_0 {
+ enum Example_1 {
+ ↓ enum Example_2 {}
+ }
+ }
+ default :
+ func f_0 () {
+ func f_1 () {
+ func f_2 () {
+ ↓ func f_3 () {}
+ }
+ }
+ }
+ }
+
+
var exampleClosure : () -> Void = {
+ enum Example_0 {
+ enum Example_1 {
+ ↓ enum Example_2 {}
+ }
+ }
+ func f_0 () {
+ func f_1 () {
+ func f_2 () {
+ ↓ func f_3 () {}
+ }
+ }
+ }
+ }
+
+
exampleFunc ( closure : {
+ enum Example_0 {
+ enum Example_1 {}
+ }
+ func f_0 () {
+ func f_1 () {
+ func f_2 () {
+ ↓ func f_3 () {}
+ }
+ }
+ }
+ })
+
+
class Example_0 {
+ func f_0 () {
+ class Example_1 {
+ func f_1 () {
+ func f_2 () {
+ ↓ class Example_2 {}
+ ↓ func f_3 () {}
+ }
+ }
+ }
+ }
+ }
+
+
class Example_0 {
+ func f_0 () {
+ switch example {
+ case . exampleCase :
+ class Example_1 {
+ func f_1 () {
+ func f_2 () {
+ ↓ class Example_2 {}
+ ↓ func f_3 () {}
+ }
+ }
+ }
+ default :
+ exampleFunc ( closure : {
+ class Example_1 {
+ func f_1 () {
+ func f_2 () {
+ ↓ class Example_2 {}
+ ↓ func f_3 () {}
+ }
+ }
+ }
+ })
+ }
+ }
+ }
+
+
struct Example_0 {
+ func f_0 () {
+ struct Example_1 {
+ func f_1 () {
+ func f_2 () {
+ ↓ struct Example_2 {}
+ ↓ func f_3 () {}
+ }
+ }
+ }
+ }
+ }
+
+
struct Example_0 {
+ func f_0 () {
+ switch example {
+ case . exampleCase :
+ struct Example_1 {
+ func f_1 () {
+ func f_2 () {
+ ↓ struct Example_2 {}
+ ↓ func f_3 () {}
+ }
+ }
+ }
+ default :
+ exampleFunc ( closure : {
+ struct Example_1 {
+ func f_1 () {
+ func f_2 () {
+ ↓ struct Example_2 {}
+ ↓ func f_3 () {}
+ }
+ }
+ }
+ })
+ }
+ }
+ }
+
+
enum Example_0 {
+ func f_0 () {
+ enum Example_1 {
+ func f_1 () {
+ func f_2 () {
+ ↓ enum Example_2 {}
+ ↓ func f_3 () {}
+ }
+ }
+ }
+ }
+ }
+
+
enum Example_0 {
+ func f_0 () {
+ switch example {
+ case . exampleCase :
+ enum Example_1 {
+ func f_1 () {
+ func f_2 () {
+ ↓ enum Example_2 {}
+ ↓ func f_3 () {}
+ }
+ }
+ }
+ default :
+ exampleFunc ( closure : {
+ enum Example_1 {
+ func f_1 () {
+ func f_2 () {
+ ↓ enum Example_2 {}
+ ↓ func f_3 () {}
+ }
+ }
+ }
+ })
+ }
+ }
+ }
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/nimble_operator.html b/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/nimble_operator.html
new file mode 100644
index 000000000..f633ad07a
--- /dev/null
+++ b/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/nimble_operator.html
@@ -0,0 +1,426 @@
+
+
+
+
nimble_operator Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SwiftLintFramework Reference
+
+ nimble_operator Reference
+
+
+
+
+
+
+
+
+
+
+
+
Nimble Operator
+
+
Prefer Nimble operator overloads over free matcher functions.
+
+
+Identifier: nimble_operator
+Enabled by default: No
+Supports autocorrection: Yes
+Kind: idiomatic
+Analyzer rule: No
+Minimum Swift compiler version: 5.0.0
+Default configuration: warning
+
+
Non Triggering Examples
+
expect ( seagull . squawk ) != "Hi!"
+
+
+
expect ( "Hi!" ) == "Hi!"
+
+
+
expect ( 10 ) > 2
+
+
+
expect ( 10 ) >= 10
+
+
+
expect ( 10 ) < 11
+
+
+
expect ( 10 ) <= 10
+
+
+
expect ( x ) === x
+
+
expect ( 10 ) == 10
+
+
expect ( success ) == true
+
+
expect ( value ) == nil
+
+
expect ( value ) != nil
+
+
expect ( object . asyncFunction ()) . toEventually ( equal ( 1 ))
+
+
+
expect ( actual ) . to ( haveCount ( expected ))
+
+
+
foo . method {
+ expect ( value ) . to ( equal ( expectedValue ), description : "Failed" )
+ return Bar ( value : ())
+}
+
+
Triggering Examples
+
↓ expect ( seagull . squawk ) . toNot ( equal ( "Hi" ))
+
+
+
↓ expect ( 12 ) . toNot ( equal ( 10 ))
+
+
+
↓ expect ( 10 ) . to ( equal ( 10 ))
+
+
+
↓ expect ( 10 , line : 1 ) . to ( equal ( 10 ))
+
+
+
↓ expect ( 10 ) . to ( beGreaterThan ( 8 ))
+
+
+
↓ expect ( 10 ) . to ( beGreaterThanOrEqualTo ( 10 ))
+
+
+
↓ expect ( 10 ) . to ( beLessThan ( 11 ))
+
+
+
↓ expect ( 10 ) . to ( beLessThanOrEqualTo ( 10 ))
+
+
+
↓ expect ( x ) . to ( beIdenticalTo ( x ))
+
+
+
↓ expect ( success ) . to ( beTrue ())
+
+
+
↓ expect ( success ) . to ( beFalse ())
+
+
+
↓ expect ( value ) . to ( beNil ())
+
+
+
↓ expect ( value ) . toNot ( beNil ())
+
+
+
expect ( 10 ) > 2
+ ↓ expect ( 10 ) . to ( beGreaterThan ( 2 ))
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/no_extension_access_modifier.html b/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/no_extension_access_modifier.html
new file mode 100644
index 000000000..80b6a2791
--- /dev/null
+++ b/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/no_extension_access_modifier.html
@@ -0,0 +1,361 @@
+
+
+
+
no_extension_access_modifier Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SwiftLintFramework Reference
+
+ no_extension_access_modifier Reference
+
+
+
+
+
+
+
+
+
+
+
+
No Extension Access Modifier
+
+
Prefer not to use extension access modifiers
+
+
+Identifier: no_extension_access_modifier
+Enabled by default: No
+Supports autocorrection: No
+Kind: idiomatic
+Analyzer rule: No
+Minimum Swift compiler version: 5.0.0
+Default configuration: error
+
+
Non Triggering Examples
+
extension String {}
+
+
+
+ extension String {}
+
+
Triggering Examples
+
↓ private extension String {}
+
+
↓ public
+ extension String {}
+
+
↓ open extension String {}
+
+
↓ internal extension String {}
+
+
↓ fileprivate extension String {}
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/no_fallthrough_only.html b/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/no_fallthrough_only.html
new file mode 100644
index 000000000..69a96de21
--- /dev/null
+++ b/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/no_fallthrough_only.html
@@ -0,0 +1,480 @@
+
+
+
+
no_fallthrough_only Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SwiftLintFramework Reference
+
+ no_fallthrough_only Reference
+
+
+
+
+
+
+
+
+
+
+
+
No Fallthrough Only
+
+
Fallthroughs can only be used if the case contains at least one other statement.
+
+
+Identifier: no_fallthrough_only
+Enabled by default: Yes
+Supports autocorrection: No
+Kind: idiomatic
+Analyzer rule: No
+Minimum Swift compiler version: 5.0.0
+Default configuration: warning
+
+
Non Triggering Examples
+
switch myvar {
+case 1 :
+ var a = 1
+ fallthrough
+case 2 :
+ var a = 2
+}
+
+
switch myvar {
+case "a" :
+ var one = 1
+ var two = 2
+ fallthrough
+case "b" : /* comment */
+ var three = 3
+}
+
+
switch myvar {
+case 1 :
+ let one = 1
+case 2 :
+ // comment
+ var two = 2
+}
+
+
switch myvar {
+case MyFunc ( x : [ 1 , 2 , YourFunc ( a : 23 )], y : 2 ):
+ var three = 3
+ fallthrough
+default :
+ var three = 4
+}
+
+
switch myvar {
+case . alpha :
+ var one = 1
+case . beta :
+ var three = 3
+ fallthrough
+default :
+ var four = 4
+}
+
+
let aPoint = ( 1 , - 1 )
+switch aPoint {
+case let ( x , y ) where x == y :
+ let A = "A"
+case let ( x , y ) where x == - y :
+ let B = "B"
+ fallthrough
+default :
+ let C = "C"
+}
+
+
switch myvar {
+case MyFun ( with : { $1 }):
+ let one = 1
+ fallthrough
+case "abc" :
+ let two = 2
+}
+
+
switch enumInstance {
+case . caseA :
+ print ( "it's a" )
+case . caseB :
+ fallthrough
+@unknown default :
+ print ( "it's not a" )
+}
+
+
Triggering Examples
+
switch myvar {
+case 1 :
+ ↓ fallthrough
+case 2 :
+ var a = 1
+}
+
+
switch myvar {
+case 1 :
+ var a = 2
+case 2 :
+ ↓ fallthrough
+case 3 :
+ var a = 3
+}
+
+
switch myvar {
+case 1 : // comment
+ ↓ fallthrough
+}
+
+
switch myvar {
+case 1 : /* multi
+ line
+ comment */
+ ↓ fallthrough
+case 2 :
+ var a = 2
+}
+
+
switch myvar {
+case MyFunc ( x : [ 1 , 2 , YourFunc ( a : 23 )], y : 2 ):
+ ↓ fallthrough
+default :
+ var three = 4
+}
+
+
switch myvar {
+case . alpha :
+ var one = 1
+case . beta :
+ ↓ fallthrough
+case . gamma :
+ var three = 3
+default :
+ var four = 4
+}
+
+
let aPoint = ( 1 , - 1 )
+switch aPoint {
+case let ( x , y ) where x == y :
+ let A = "A"
+case let ( x , y ) where x == - y :
+ ↓ fallthrough
+default :
+ let B = "B"
+}
+
+
switch myvar {
+case MyFun ( with : { $1 }):
+ ↓ fallthrough
+case "abc" :
+ let two = 2
+}
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/no_grouping_extension.html b/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/no_grouping_extension.html
new file mode 100644
index 000000000..aa009ed27
--- /dev/null
+++ b/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/no_grouping_extension.html
@@ -0,0 +1,372 @@
+
+
+
+
no_grouping_extension Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SwiftLintFramework Reference
+
+ no_grouping_extension Reference
+
+
+
+
+
+
+
+
+
+
+
+
No Grouping Extension
+
+
Extensions shouldn’t be used to group code within the same source file.
+
+
+Identifier: no_grouping_extension
+Enabled by default: No
+Supports autocorrection: No
+Kind: idiomatic
+Analyzer rule: No
+Minimum Swift compiler version: 5.0.0
+Default configuration: warning
+
+
Non Triggering Examples
+
protocol Food {}
+extension Food {}
+
+
+
class Apples {}
+extension Oranges {}
+
+
+
class Box < T > {}
+extension Box where T : Vegetable {}
+
+
+
Triggering Examples
+
enum Fruit {}
+↓ extension Fruit {}
+
+
+
↓ extension Tea : Error {}
+struct Tea {}
+
+
+
class Ham { class Spam {}}
+↓ extension Ham . Spam {}
+
+
+
extension External { struct Gotcha {}}
+↓ extension External . Gotcha {}
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/no_magic_numbers.html b/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/no_magic_numbers.html
new file mode 100644
index 000000000..5344cc4c2
--- /dev/null
+++ b/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/no_magic_numbers.html
@@ -0,0 +1,388 @@
+
+
+
+
no_magic_numbers Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SwiftLintFramework Reference
+
+ no_magic_numbers Reference
+
+
+
+
+
+
+
+
+
+
+
+
No Magic Numbers
+
+
Magic numbers should be replaced by named constants.
+
+
+Identifier: no_magic_numbers
+Enabled by default: No
+Supports autocorrection: No
+Kind: idiomatic
+Analyzer rule: No
+Minimum Swift compiler version: 5.0.0
+Default configuration: warning
+
+
Non Triggering Examples
+
var foo = 123
+
+
static let bar : Double = 0.123
+
+
let a = b + 1.0
+
+
array [ 0 ] + array [ 1 ]
+
+
let foo = 1_000.000_0 1
+
+
// array[1337]
+
+
baz ( "9999" )
+
+
func foo () {
+ let x : Int = 2
+ let y = 3
+ let vector = [ x , y , - 1 ]
+}
+
+
class A {
+ var foo : Double = 132
+ static let bar : Double = 0.98
+}
+
+
@available ( iOS 13 , * )
+func version () {
+ if #available(iOS 13, OSX 10.10, *) {
+ return
+ }
+}
+
+
Triggering Examples
+
foo ( ↓ 321 )
+
+
bar ( ↓ 1_000.005_0 1 )
+
+
array [ ↓ 42 ]
+
+
let box = array [ ↓ 12 + ↓ 14 ]
+
+
let a = b + ↓ 2.0
+
+
Color . primary . opacity ( isAnimate ? ↓ 0.1 : ↓ 1.5 )
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/no_space_in_method_call.html b/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/no_space_in_method_call.html
new file mode 100644
index 000000000..43fd1a26f
--- /dev/null
+++ b/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/no_space_in_method_call.html
@@ -0,0 +1,378 @@
+
+
+
+
no_space_in_method_call Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SwiftLintFramework Reference
+
+ no_space_in_method_call Reference
+
+
+
+
+
+
+
+
+
+
+
+
No Space in Method Call
+
+
Don’t add a space between the method name and the parentheses.
+
+
+Identifier: no_space_in_method_call
+Enabled by default: Yes
+Supports autocorrection: Yes
+Kind: style
+Analyzer rule: No
+Minimum Swift compiler version: 5.0.0
+Default configuration: warning
+
+
Non Triggering Examples
+
foo ()
+
+
object . foo ()
+
+
object . foo ( 1 )
+
+
object . foo ( value : 1 )
+
+
object . foo { print ( $0 }
+
+
list . sorted { $0 . 0 < $1 . 0 } . map { $0 . value }
+
+
self . init ( rgb : ( Int ) ( colorInt ))
+
+
Button {
+ print ( "Button tapped" )
+} label : {
+ Text ( "Button" )
+}
+
+
Triggering Examples
+
foo ↓ ()
+
+
object . foo ↓ ()
+
+
object . foo ↓ ( 1 )
+
+
object . foo ↓ ( value : 1 )
+
+
object . foo ↓ () {}
+
+
object . foo ↓ ()
+
+
object . foo ↓ ( value : 1 ) { x in print ( x ) }
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/notification_center_detachment.html b/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/notification_center_detachment.html
new file mode 100644
index 000000000..da915cb71
--- /dev/null
+++ b/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/notification_center_detachment.html
@@ -0,0 +1,362 @@
+
+
+
+
notification_center_detachment Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SwiftLintFramework Reference
+
+ notification_center_detachment Reference
+
+
+
+
+
+
+
+
+
+
+
+
Notification Center Detachment
+
+
An object should only remove itself as an observer in deinit.
+
+
+Identifier: notification_center_detachment
+Enabled by default: Yes
+Supports autocorrection: No
+Kind: lint
+Analyzer rule: No
+Minimum Swift compiler version: 5.0.0
+Default configuration: warning
+
+
Non Triggering Examples
+
class Foo {
+ deinit {
+ NotificationCenter . default . removeObserver ( self )
+ }
+}
+
+
class Foo {
+ func bar () {
+ NotificationCenter . default . removeObserver ( otherObject )
+ }
+}
+
+
Triggering Examples
+
class Foo {
+ func bar () {
+ ↓ NotificationCenter . default . removeObserver ( self )
+ }
+}
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/ns_number_init_as_function_reference.html b/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/ns_number_init_as_function_reference.html
new file mode 100644
index 000000000..149983d4c
--- /dev/null
+++ b/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/ns_number_init_as_function_reference.html
@@ -0,0 +1,356 @@
+
+
+
+
ns_number_init_as_function_reference Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SwiftLintFramework Reference
+
+ ns_number_init_as_function_reference Reference
+
+
+
+
+
+
+
+
+
+
+
+
NSNumber Init as Function Reference
+
+
Passing NSNumber.init or NSDecimalNumber.init as a function reference is dangerous as it can cause the wrong initializer to be used, causing crashes. Use .init(value:) instead.
+
+
+Identifier: ns_number_init_as_function_reference
+Enabled by default: Yes
+Supports autocorrection: No
+Kind: lint
+Analyzer rule: No
+Minimum Swift compiler version: 5.0.0
+Default configuration: warning
+
+
Non Triggering Examples
+
[ 0 , 0.2 ] . map ( NSNumber . init ( value :))
+
+
[ 0 , 0.2 ] . map { NSNumber ( value : $0 ) }
+
+
[ 0 , 0.2 ] . map ( NSDecimalNumber . init ( value :))
+
+
[ 0 , 0.2 ] . map { NSDecimalNumber ( value : $0 ) }
+
+
Triggering Examples
+
[ 0 , 0.2 ] . map ( ↓ NSNumber . init )
+
+
[ 0 , 0.2 ] . map ( ↓ NSDecimalNumber . init )
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/nslocalizedstring_key.html b/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/nslocalizedstring_key.html
new file mode 100644
index 000000000..7529ac5db
--- /dev/null
+++ b/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/nslocalizedstring_key.html
@@ -0,0 +1,365 @@
+
+
+
+
nslocalizedstring_key Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SwiftLintFramework Reference
+
+ nslocalizedstring_key Reference
+
+
+
+
+
+
+
+
+
+
+
+
NSLocalizedString Key
+
+
Static strings should be used as key/comment in NSLocalizedString in order for genstrings to work.
+
+
+Identifier: nslocalizedstring_key
+Enabled by default: No
+Supports autocorrection: No
+Kind: lint
+Analyzer rule: No
+Minimum Swift compiler version: 5.0.0
+Default configuration: warning
+
+
Non Triggering Examples
+
NSLocalizedString ( "key" , comment : "" )
+
+
NSLocalizedString ( "key" + "2" , comment : "" )
+
+
NSLocalizedString ( "key" , comment : "comment" )
+
+
NSLocalizedString ( "This is a multi-" +
+ "line string" , comment : "" )
+
+
let format = NSLocalizedString ( "%@, %@." , comment : "Accessibility label for a post in the post list." +
+" The parameters are the title, and date respectively." +
+" For example, " Let it Go , 1 hour ago . "" )
+
+
Triggering Examples
+
NSLocalizedString ( ↓ method (), comment : "" )
+
+
NSLocalizedString ( ↓ "key_ \( param ) " , comment : "" )
+
+
NSLocalizedString ( "key" , comment : ↓ "comment with \( param ) " )
+
+
NSLocalizedString ( ↓ "key_ \( param ) " , comment : ↓ method ())
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/nslocalizedstring_require_bundle.html b/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/nslocalizedstring_require_bundle.html
new file mode 100644
index 000000000..0f49d7600
--- /dev/null
+++ b/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/nslocalizedstring_require_bundle.html
@@ -0,0 +1,363 @@
+
+
+
+
nslocalizedstring_require_bundle Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SwiftLintFramework Reference
+
+ nslocalizedstring_require_bundle Reference
+
+
+
+
+
+
+
+
+
+
+
+
NSLocalizedString Require Bundle
+
+
Calls to NSLocalizedString should specify the bundle which contains the strings file.
+
+
+Identifier: nslocalizedstring_require_bundle
+Enabled by default: No
+Supports autocorrection: No
+Kind: lint
+Analyzer rule: No
+Minimum Swift compiler version: 5.0.0
+Default configuration: warning
+
+
Non Triggering Examples
+
NSLocalizedString ( "someKey" , bundle : . main , comment : "test" )
+
+
NSLocalizedString ( "someKey" , tableName : "a" ,
+ bundle : Bundle ( for : A . self ),
+ comment : "test" )
+
+
NSLocalizedString ( "someKey" , tableName : "xyz" ,
+ bundle : someBundle , value : "test"
+ comment : "test" )
+
+
arbitraryFunctionCall ( "something" )
+
+
Triggering Examples
+
↓ NSLocalizedString ( "someKey" , comment : "test" )
+
+
↓ NSLocalizedString ( "someKey" , tableName : "a" , comment : "test" )
+
+
↓ NSLocalizedString ( "someKey" , tableName : "xyz" ,
+ value : "test" , comment : "test" )
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/nsobject_prefer_isequal.html b/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/nsobject_prefer_isequal.html
new file mode 100644
index 000000000..209eaa362
--- /dev/null
+++ b/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/nsobject_prefer_isequal.html
@@ -0,0 +1,416 @@
+
+
+
+
nsobject_prefer_isequal Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SwiftLintFramework Reference
+
+ nsobject_prefer_isequal Reference
+
+
+
+
+
+
+
+
+
+
+
+
NSObject Prefer isEqual
+
+
NSObject subclasses should implement isEqual instead of ==.
+
+
+Identifier: nsobject_prefer_isequal
+Enabled by default: Yes
+Supports autocorrection: No
+Kind: lint
+Analyzer rule: No
+Minimum Swift compiler version: 5.0.0
+Default configuration: warning
+
+
Non Triggering Examples
+
class AClass : NSObject {
+}
+
+
@objc class AClass : SomeNSObjectSubclass {
+}
+
+
class AClass : Equatable {
+ static func == ( lhs : AClass , rhs : AClass ) -> Bool {
+ return true
+ }
+
+
class AClass : NSObject {
+ override func isEqual ( _ object : Any ?) -> Bool {
+ return true
+ }
+}
+
+
@objc class AClass : SomeNSObjectSubclass {
+ override func isEqual ( _ object : Any ?) -> Bool {
+ return false
+ }
+}
+
+
class AClass : NSObject {
+ static func == ( lhs : AClass , rhs : BClass ) -> Bool {
+ return true
+ }
+}
+
+
struct AStruct : Equatable {
+ static func == ( lhs : AStruct , rhs : AStruct ) -> Bool {
+ return false
+ }
+}
+
+
enum AnEnum : Equatable {
+ static func == ( lhs : AnEnum , rhs : AnEnum ) -> Bool {
+ return true
+ }
+}
+
+
Triggering Examples
+
class AClass : NSObject {
+ ↓ static func == ( lhs : AClass , rhs : AClass ) -> Bool {
+ return false
+ }
+}
+
+
@objc class AClass : SomeOtherNSObjectSubclass {
+ ↓ static func == ( lhs : AClass , rhs : AClass ) -> Bool {
+ return true
+ }
+}
+
+
class AClass : NSObject , Equatable {
+ ↓ static func == ( lhs : AClass , rhs : AClass ) -> Bool {
+ return false
+ }
+}
+
+
class AClass : NSObject {
+ override func isEqual ( _ object : Any ?) -> Bool {
+ guard let other = object as? AClass else {
+ return false
+ }
+ return true
+ }
+
+ ↓ static func == ( lhs : AClass , rhs : AClass ) -> Bool {
+ return false
+ }
+}
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/number_separator.html b/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/number_separator.html
new file mode 100644
index 000000000..12d147303
--- /dev/null
+++ b/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/number_separator.html
@@ -0,0 +1,506 @@
+
+
+
+
number_separator Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SwiftLintFramework Reference
+
+ number_separator Reference
+
+
+
+
+
+
+
+
+
+
+
+
Number Separator
+
+
Underscores should be used as thousand separator in large decimal numbers.
+
+
+Identifier: number_separator
+Enabled by default: No
+Supports autocorrection: Yes
+Kind: style
+Analyzer rule: No
+Minimum Swift compiler version: 5.0.0
+Default configuration: warning, minimum_length: 0, minimum_fraction_length: none
+
+
Non Triggering Examples
+
let foo = - 100
+
+
let foo = - 1_000
+
+
let foo = - 1_000_000
+
+
let foo = - 1.0001
+
+
let foo = - 1_000_000.0000001
+
+
let binary = - 0b10000
+
+
let binary = - 0b1000_0001
+
+
let hex = - 0xA
+
+
let hex = - 0xAA_BB
+
+
let octal = - 0o21
+
+
let octal = - 0o21_1
+
+
let exp = - 1_000_000.000000e2
+
+
let foo : Double = - ( 200 )
+
+
let foo : Double = - ( 200 / 447.214 )
+
+
let foo = - 6.2832e-6
+
+
let foo = + 100
+
+
let foo = + 1_000
+
+
let foo = + 1_000_000
+
+
let foo = + 1.0001
+
+
let foo = + 1_000_000.0000001
+
+
let binary = + 0b10000
+
+
let binary = + 0b1000_0001
+
+
let hex = + 0xA
+
+
let hex = + 0xAA_BB
+
+
let octal = + 0o21
+
+
let octal = + 0o21_1
+
+
let exp = + 1_000_000.000000e2
+
+
let foo : Double = + ( 200 )
+
+
let foo : Double = + ( 200 / 447.214 )
+
+
let foo = + 6.2832e-6
+
+
let foo = 100
+
+
let foo = 1_000
+
+
let foo = 1_000_000
+
+
let foo = 1.0001
+
+
let foo = 1_000_000.0000001
+
+
let binary = 0b10000
+
+
let binary = 0b1000_0001
+
+
let hex = 0xA
+
+
let hex = 0xAA_BB
+
+
let octal = 0o21
+
+
let octal = 0o21_1
+
+
let exp = 1_000_000.000000e2
+
+
let foo : Double = ( 200 )
+
+
let foo : Double = ( 200 / 447.214 )
+
+
let foo = 6.2832e-6
+
+
Triggering Examples
+
let foo = - ↓ 10_0
+
+
let foo = - ↓ 1000
+
+
let foo = - ↓ 1000e2
+
+
let foo = - ↓ 1000E2
+
+
let foo = - ↓ 1 __000
+
+
let foo = - ↓ 1.0001
+
+
let foo = - ↓ 1_000_000.000000_1
+
+
let foo = - ↓ 1000000.000000_1
+
+
let foo = - ↓ 6.2832e-6
+
+
let foo = + ↓ 10_0
+
+
let foo = + ↓ 1000
+
+
let foo = + ↓ 1000e2
+
+
let foo = + ↓ 1000E2
+
+
let foo = + ↓ 1 __000
+
+
let foo = + ↓ 1.0001
+
+
let foo = + ↓ 1_000_000.000000_1
+
+
let foo = + ↓ 1000000.000000_1
+
+
let foo = + ↓ 6.2832e-6
+
+
let foo = ↓ 10_0
+
+
let foo = ↓ 1000
+
+
let foo = ↓ 1000e2
+
+
let foo = ↓ 1000E2
+
+
let foo = ↓ 1 __000
+
+
let foo = ↓ 1.0001
+
+
let foo = ↓ 1_000_000.000000_1
+
+
let foo = ↓ 1000000.000000_1
+
+
let foo = ↓ 6.2832e-6
+
+
let foo : Double = - ( ↓ 100000 )
+
+
let foo : Double = - ( ↓ 10.000000_1 )
+
+
let foo : Double = - ( ↓ 123456 / ↓ 447.214214 )
+
+
let foo : Double = + ( ↓ 100000 )
+
+
let foo : Double = + ( ↓ 10.000000_1 )
+
+
let foo : Double = + ( ↓ 123456 / ↓ 447.214214 )
+
+
let foo : Double = ( ↓ 100000 )
+
+
let foo : Double = ( ↓ 10.000000_1 )
+
+
let foo : Double = ( ↓ 123456 / ↓ 447.214214 )
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/object_literal.html b/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/object_literal.html
new file mode 100644
index 000000000..fb2d19578
--- /dev/null
+++ b/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/object_literal.html
@@ -0,0 +1,392 @@
+
+
+
+
object_literal Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SwiftLintFramework Reference
+
+ object_literal Reference
+
+
+
+
+
+
+
+
+
+
+
+
Object Literal
+
+
Prefer object literals over image and color inits.
+
+
+Identifier: object_literal
+Enabled by default: No
+Supports autocorrection: No
+Kind: idiomatic
+Analyzer rule: No
+Minimum Swift compiler version: 5.0.0
+Default configuration: warning, image_literal: true, color_literal: true
+
+
Non Triggering Examples
+
let image = # imageLiteral ( resourceName : "image.jpg" )
+
+
let color = # colorLiteral ( red : 0.9607843161 , green : 0.7058823705 , blue : 0.200000003 , alpha : 1 )
+
+
let image = UIImage ( named : aVariable )
+
+
let image = UIImage ( named : "interpolated \( variable ) " )
+
+
let color = UIColor ( red : value , green : value , blue : value , alpha : 1 )
+
+
let image = NSImage ( named : aVariable )
+
+
let image = NSImage ( named : "interpolated \( variable ) " )
+
+
let color = NSColor ( red : value , green : value , blue : value , alpha : 1 )
+
+
Triggering Examples
+
let image = ↓ UIImage ( named : "foo" )
+
+
let color = ↓ UIColor ( red : 0.3 , green : 0.3 , blue : 0.3 , alpha : 1 )
+
+
let color = ↓ UIColor ( red : 100 / 255.0 , green : 50 / 255.0 , blue : 0 , alpha : 1 )
+
+
let color = ↓ UIColor ( white : 0.5 , alpha : 1 )
+
+
let image = ↓ NSImage ( named : "foo" )
+
+
let color = ↓ NSColor ( red : 0.3 , green : 0.3 , blue : 0.3 , alpha : 1 )
+
+
let color = ↓ NSColor ( red : 100 / 255.0 , green : 50 / 255.0 , blue : 0 , alpha : 1 )
+
+
let color = ↓ NSColor ( white : 0.5 , alpha : 1 )
+
+
let image = ↓ UIImage . init ( named : "foo" )
+
+
let color = ↓ UIColor . init ( red : 0.3 , green : 0.3 , blue : 0.3 , alpha : 1 )
+
+
let color = ↓ UIColor . init ( red : 100 / 255.0 , green : 50 / 255.0 , blue : 0 , alpha : 1 )
+
+
let color = ↓ UIColor . init ( white : 0.5 , alpha : 1 )
+
+
let image = ↓ NSImage . init ( named : "foo" )
+
+
let color = ↓ NSColor . init ( red : 0.3 , green : 0.3 , blue : 0.3 , alpha : 1 )
+
+
let color = ↓ NSColor . init ( red : 100 / 255.0 , green : 50 / 255.0 , blue : 0 , alpha : 1 )
+
+
let color = ↓ NSColor . init ( white : 0.5 , alpha : 1 )
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/opening_brace.html b/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/opening_brace.html
new file mode 100644
index 000000000..e6acfb21d
--- /dev/null
+++ b/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/opening_brace.html
@@ -0,0 +1,484 @@
+
+
+
+
opening_brace Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SwiftLintFramework Reference
+
+ opening_brace Reference
+
+
+
+
+
+
+
+
+
+
+
+
Opening Brace Spacing
+
+
Opening braces should be preceded by a single space and on the same line as the declaration.
+
+
+Identifier: opening_brace
+Enabled by default: Yes
+Supports autocorrection: Yes
+Kind: style
+Analyzer rule: No
+Minimum Swift compiler version: 5.0.0
+Default configuration: warning, allowMultilineFunc: false
+
+
Non Triggering Examples
+
func abc () {
+}
+
+
[] . map () { $0 }
+
+
[] . map ({ })
+
+
if let a = b { }
+
+
while a == b { }
+
+
guard let a = b else { }
+
+
if
+ let a = b ,
+ let c = d
+ where a == c
+{ }
+
+
while
+ let a = b ,
+ let c = d
+ where a == c
+{ }
+
+
guard
+ let a = b ,
+ let c = d
+ where a == c else
+{ }
+
+
struct Rule {}
+
+
+
struct Parent {
+ struct Child {
+ let foo : Int
+ }
+}
+
+
+
func f ( rect : CGRect ) {
+ {
+ let centre = CGPoint ( x : rect . midX , y : rect . midY )
+ print ( centre )
+ }()
+}
+
+
func f ( rect : CGRect ) -> () -> Void {
+ {
+ let centre = CGPoint ( x : rect . midX , y : rect . midY )
+ print ( centre )
+ }
+}
+
+
func f () -> () -> Void {
+ {}
+}
+
+
Triggering Examples
+
func abc () ↓ {
+}
+
+
func abc ()
+ ↓ { }
+
+
func abc ( a : A
+ b : B )
+↓ {
+
+
[] . map () ↓ { $0 }
+
+
[] . map ( ↓ { } )
+
+
if let a = b ↓ { }
+
+
while a == b ↓ { }
+
+
guard let a = b else ↓ { }
+
+
if
+ let a = b ,
+ let c = d
+ where a == c ↓ { }
+
+
while
+ let a = b ,
+ let c = d
+ where a == c ↓ { }
+
+
guard
+ let a = b ,
+ let c = d
+ where a == c else ↓ { }
+
+
struct Rule ↓ {}
+
+
+
struct Rule
+↓ {
+}
+
+
+
struct Rule
+
+ ↓ {
+}
+
+
+
struct Parent {
+ struct Child
+ ↓ {
+ let foo : Int
+ }
+}
+
+
+
// Get the current thread's TLS pointer. On first call for a given thread,
+// creates and initializes a new one.
+internal static func getPointer ()
+ -> UnsafeMutablePointer < _ThreadLocalStorage >
+{ // <- here
+ return _swift_stdlib_threadLocalStorageGet () . assumingMemoryBound (
+ to : _ThreadLocalStorage . self )
+}
+
+
func run_Array_method1x ( _ N : Int ) {
+ let existentialArray = array !
+ for _ in 0 ..< N * 100 {
+ for elt in existentialArray {
+ if ! elt . doIt () {
+ fatalError ( "expected true" )
+ }
+ }
+ }
+}
+
+func run_Array_method2x ( _ N : Int ) {
+
+}
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/operator_usage_whitespace.html b/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/operator_usage_whitespace.html
new file mode 100644
index 000000000..139f83e4e
--- /dev/null
+++ b/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/operator_usage_whitespace.html
@@ -0,0 +1,528 @@
+
+
+
+
operator_usage_whitespace Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SwiftLintFramework Reference
+
+ operator_usage_whitespace Reference
+
+
+
+
+
+
+
+
+
+
+
+
Operator Usage Whitespace
+
+
Operators should be surrounded by a single whitespace when they are being used.
+
+
+Identifier: operator_usage_whitespace
+Enabled by default: No
+Supports autocorrection: Yes
+Kind: style
+Analyzer rule: No
+Minimum Swift compiler version: 5.0.0
+Default configuration: warning, lines_look_around: 2, skip_aligned_constants: true, allowed_no_space_operators: [“…”, “..<”]
+
+
Non Triggering Examples
+
let foo = 1 + 2
+
+
+
let foo = 1 > 2
+
+
+
let foo = ! false
+
+
+
let foo : Int ?
+
+
+
let foo : Array < String >
+
+
+
let model = CustomView < Container < Button > , NSAttributedString > ()
+
+
+
let foo : [ String ]
+
+
+
let foo = 1 +
+ 2
+
+
+
let range = 1 ... 3
+
+
+
let range = 1 ... 3
+
+
+
let range = 1 ..< 3
+
+
+
#if swift(>=3.0)
+ foo ()
+#endif
+
+
+
array . removeAtIndex ( - 200 )
+
+
+
let name = "image-1"
+
+
+
button . setImage ( # imageLiteral ( resourceName : "image-1" ), for : . normal )
+
+
+
let doubleValue = - 9e-11
+
+
+
let foo = GenericType < ( UIViewController ) -> Void > ()
+
+
+
let foo = Foo < Bar < T > , Baz > ()
+
+
+
let foo = SignalProducer < Signal < Value , Error > , Error > ([ self . signal , next ]) . flatten ( . concat )
+
+
+
"let foo = 1"
+
+
enum Enum {
+ case hello = 1
+ case hello2 = 1
+ }
+
+
let something = Something < GenericParameter1 ,
+ GenericParameter2 > ()
+
+
return path . flatMap { path in
+ return compileCommands [ path ] ??
+ compileCommands [ path . path ( relativeTo : FileManager . default . currentDirectoryPath )]
+}
+
+
internal static func == ( lhs : Vertix , rhs : Vertix ) -> Bool {
+ return lhs . filePath == rhs . filePath
+ && lhs . originalRemoteString == rhs . originalRemoteString
+ && lhs . rootDirectory == rhs . rootDirectory
+}
+
+
internal static func == ( lhs : Vertix , rhs : Vertix ) -> Bool {
+ return lhs . filePath == rhs . filePath &&
+ lhs . originalRemoteString == rhs . originalRemoteString &&
+ lhs . rootDirectory == rhs . rootDirectory
+}
+
+
private static let pattern =
+ " \\ S \( mainPatternGroups ) " + // Regexp will match if expression not begin with comma
+ "|" + // or
+ " \( mainPatternGroups ) " // Regexp will match if expression begins with comma
+
+
private static let pattern =
+ " \\ S \( mainPatternGroups ) " + // Regexp will match if expression not begin with comma
+ "|" + // or
+ " \( mainPatternGroups ) " // Regexp will match if expression begins with comma
+
+
typealias Foo = Bar
+
+
protocol A {
+ associatedtype B = C
+}
+
+
tabbedViewController . title = nil
+
+
Triggering Examples
+
let foo = 1 ↓ + 2
+
+
+
let foo = 1 ↓ + 2
+
+
+
let foo = 1 ↓ + 2
+
+
+
let foo = 1 ↓ + 2
+
+
+
let foo ↓ = 1 ↓ + 2
+
+
+
let foo ↓ = 1 + 2
+
+
+
let foo ↓ = bar
+
+
+
let range = 1 ↓ ..< 3
+
+
+
let foo = bar ↓ ?? 0
+
+
+
let foo = bar ↓ != 0
+
+
+
let foo = bar ↓ !== bar2
+
+
+
let v8 = Int8 ( 1 ) ↓ << 6
+
+
+
let v8 = 1 ↓ << ( 6 )
+
+
+
let v8 = 1 ↓ << ( 6 )
+ let foo = 1 > 2
+
+
+
let foo ↓ = [ 1 ]
+
+
+
let foo ↓ = "1"
+
+
+
let foo ↓ = "1"
+
+
+
enum Enum {
+ case one ↓ = 1
+ case two = 1
+ }
+
+
enum Enum {
+ case one = 1
+ case two ↓ = 1
+ }
+
+
enum Enum {
+ case one ↓ = 1
+ case two ↓ = 1
+ }
+
+
typealias Foo ↓ = Bar
+
+
protocol A {
+ associatedtype B ↓ = C
+}
+
+
tabbedViewController . title ↓ = nil
+
+
let foo = bar ? 0 ↓ : 1
+
+
let foo = bar ↓ ? 0 : 1
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/operator_whitespace.html b/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/operator_whitespace.html
new file mode 100644
index 000000000..acd1c4a51
--- /dev/null
+++ b/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/operator_whitespace.html
@@ -0,0 +1,371 @@
+
+
+
+
operator_whitespace Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SwiftLintFramework Reference
+
+ operator_whitespace Reference
+
+
+
+
+
+
+
+
+
+
+
+
Operator Function Whitespace
+
+
Operators should be surrounded by a single whitespace when defining them.
+
+
+Identifier: operator_whitespace
+Enabled by default: Yes
+Supports autocorrection: No
+Kind: style
+Analyzer rule: No
+Minimum Swift compiler version: 5.0.0
+Default configuration: warning
+
+
Non Triggering Examples
+
func <| ( lhs : Int , rhs : Int ) -> Int {}
+
+
+
func <|< < A > ( lhs : A , rhs : A ) -> A {}
+
+
+
func abc ( lhs : Int , rhs : Int ) -> Int {}
+
+
+
Triggering Examples
+
↓ func <| ( lhs : Int , rhs : Int ) -> Int {}
+
+
+
↓ func <|<< A > ( lhs : A , rhs : A ) -> A {}
+
+
+
↓ func <| ( lhs : Int , rhs : Int ) -> Int {}
+
+
+
↓ func <|< < A > ( lhs : A , rhs : A ) -> A {}
+
+
+
↓ func <| ( lhs : Int , rhs : Int ) -> Int {}
+
+
+
↓ func <|< < A > ( lhs : A , rhs : A ) -> A {}
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/optional_enum_case_matching.html b/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/optional_enum_case_matching.html
new file mode 100644
index 000000000..bf5a910a7
--- /dev/null
+++ b/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/optional_enum_case_matching.html
@@ -0,0 +1,396 @@
+
+
+
+
optional_enum_case_matching Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SwiftLintFramework Reference
+
+ optional_enum_case_matching Reference
+
+
+
+
+
+
+
+
+
+
+
+
Optional Enum Case Match
+
+
Matching an enum case against an optional enum without ‘?’ is supported on Swift 5.1 and above.
+
+
+Identifier: optional_enum_case_matching
+Enabled by default: No
+Supports autocorrection: Yes
+Kind: style
+Analyzer rule: No
+Minimum Swift compiler version: 5.1.0
+Default configuration: warning
+
+
Non Triggering Examples
+
switch foo {
+ case . bar : break
+ case . baz : break
+ default : break
+}
+
+
switch foo {
+ case ( . bar , . baz ): break
+ case ( . bar , _ ): break
+ case ( _ , . baz ): break
+ default : break
+}
+
+
switch ( x , y ) {
+case ( . c , _ ?):
+ break
+case ( . c , nil ):
+ break
+case ( _ , _ ):
+ break
+}
+
+
Triggering Examples
+
switch foo {
+ case . bar ↓ ?: break
+ case . baz : break
+ default : break
+}
+
+
switch foo {
+ case Foo . bar ↓ ?: break
+ case . baz : break
+ default : break
+}
+
+
switch foo {
+ case . bar ↓ ?, . baz ↓ ?: break
+ default : break
+}
+
+
switch foo {
+ case . bar ↓ ? where x > 1 : break
+ case . baz : break
+ default : break
+}
+
+
switch foo {
+ case ( . bar ↓ ?, . baz ↓ ?): break
+ case ( . bar ↓ ?, _ ): break
+ case ( _ , . bar ↓ ?): break
+ default : break
+}
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/orphaned_doc_comment.html b/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/orphaned_doc_comment.html
new file mode 100644
index 000000000..36471f40c
--- /dev/null
+++ b/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/orphaned_doc_comment.html
@@ -0,0 +1,368 @@
+
+
+
+
orphaned_doc_comment Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SwiftLintFramework Reference
+
+ orphaned_doc_comment Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
A doc comment should be attached to a declaration.
+
+
+Identifier: orphaned_doc_comment
+Enabled by default: Yes
+Supports autocorrection: No
+Kind: lint
+Analyzer rule: No
+Minimum Swift compiler version: 5.0.0
+Default configuration: warning
+
+
Non Triggering Examples
+
/// My great property
+var myGreatProperty : String !
+
+
//////////////////////////////////////
+//
+// Copyright header.
+//
+//////////////////////////////////////
+
+
/// Look here for more info: https://github.com.
+var myGreatProperty : String !
+
+
/// Look here for more info:
+/// https://github.com.
+var myGreatProperty : String !
+
+
Triggering Examples
+
↓ /// My great property
+// Not a doc string
+var myGreatProperty : String !
+
+
↓ /// Look here for more info: https://github.com.
+// Not a doc string
+var myGreatProperty : String !
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/overridden_super_call.html b/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/overridden_super_call.html
new file mode 100644
index 000000000..9c3b07992
--- /dev/null
+++ b/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/overridden_super_call.html
@@ -0,0 +1,396 @@
+
+
+
+
overridden_super_call Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SwiftLintFramework Reference
+
+ overridden_super_call Reference
+
+
+
+
+
+
+
+
+
+
+
+
Overridden methods call super
+
+
Some overridden methods should always call super
+
+
+Identifier: overridden_super_call
+Enabled by default: No
+Supports autocorrection: No
+Kind: lint
+Analyzer rule: No
+Minimum Swift compiler version: 5.0.0
+Default configuration: warning, excluded: [], included: [“*”]
+
+
Non Triggering Examples
+
class VC : UIViewController {
+ override func viewWillAppear ( _ animated : Bool ) {
+ super . viewWillAppear ( animated )
+ }
+}
+
+
class VC : UIViewController {
+ override func viewWillAppear ( _ animated : Bool ) {
+ self . method1 ()
+ super . viewWillAppear ( animated )
+ self . method2 ()
+ }
+}
+
+
class VC : UIViewController {
+ override func loadView () {
+ }
+}
+
+
class Some {
+ func viewWillAppear ( _ animated : Bool ) {
+ }
+}
+
+
class VC : UIViewController {
+ override func viewDidLoad () {
+ defer {
+ super . viewDidLoad ()
+ }
+ }
+}
+
+
Triggering Examples
+
class VC : UIViewController {
+ override func viewWillAppear ( _ animated : Bool ) { ↓
+ //Not calling to super
+ self . method ()
+ }
+}
+
+
class VC : UIViewController {
+ override func viewWillAppear ( _ animated : Bool ) { ↓
+ super . viewWillAppear ( animated )
+ //Other code
+ super . viewWillAppear ( animated )
+ }
+}
+
+
class VC : UIViewController {
+ override func didReceiveMemoryWarning () { ↓
+ }
+}
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/override_in_extension.html b/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/override_in_extension.html
new file mode 100644
index 000000000..938f22845
--- /dev/null
+++ b/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/override_in_extension.html
@@ -0,0 +1,381 @@
+
+
+
+
override_in_extension Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SwiftLintFramework Reference
+
+ override_in_extension Reference
+
+
+
+
+
+
+
+
+
+
+
+
Override in Extension
+
+
Extensions shouldn’t override declarations.
+
+
+Identifier: override_in_extension
+Enabled by default: No
+Supports autocorrection: No
+Kind: lint
+Analyzer rule: No
+Minimum Swift compiler version: 5.0.0
+Default configuration: warning
+
+
Non Triggering Examples
+
extension Person {
+ var age : Int { return 42 }
+}
+
+
+
extension Person {
+ func celebrateBirthday () {}
+}
+
+
+
class Employee : Person {
+ override func celebrateBirthday () {}
+}
+
+
+
class Foo : NSObject {}
+extension Foo {
+ override var description : String { return "" }
+}
+
+
struct Foo {
+ class Bar : NSObject {}
+}
+extension Foo . Bar {
+ override var description : String { return "" }
+}
+
+
Triggering Examples
+
extension Person {
+ override ↓ var age : Int { return 42 }
+}
+
+
+
extension Person {
+ override ↓ func celebrateBirthday () {}
+}
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/pattern_matching_keywords.html b/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/pattern_matching_keywords.html
new file mode 100644
index 000000000..b62338a64
--- /dev/null
+++ b/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/pattern_matching_keywords.html
@@ -0,0 +1,420 @@
+
+
+
+
pattern_matching_keywords Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SwiftLintFramework Reference
+
+ pattern_matching_keywords Reference
+
+
+
+
+
+
+
+
+
+
+
+
Pattern Matching Keywords
+
+
Combine multiple pattern matching bindings by moving keywords out of tuples.
+
+
+Identifier: pattern_matching_keywords
+Enabled by default: No
+Supports autocorrection: No
+Kind: idiomatic
+Analyzer rule: No
+Minimum Swift compiler version: 5.0.0
+Default configuration: warning
+
+
Non Triggering Examples
+
switch foo {
+ default : break
+}
+
+
switch foo {
+ case 1 : break
+}
+
+
switch foo {
+ case bar : break
+}
+
+
switch foo {
+ case let ( x , y ): break
+}
+
+
switch foo {
+ case . foo ( let x ): break
+}
+
+
switch foo {
+ case let . foo ( x , y ): break
+}
+
+
switch foo {
+ case . foo ( let x ), . bar ( let x ): break
+}
+
+
switch foo {
+ case . foo ( let x , var y ): break
+}
+
+
switch foo {
+ case var ( x , y ): break
+}
+
+
switch foo {
+ case . foo ( var x ): break
+}
+
+
switch foo {
+ case var . foo ( x , y ): break
+}
+
+
Triggering Examples
+
switch foo {
+ case ( ↓ let x , ↓ let y ): break
+}
+
+
switch foo {
+ case ( ↓ let x , ↓ let y , . foo ): break
+}
+
+
switch foo {
+ case ( ↓ let x , ↓ let y , _ ): break
+}
+
+
switch foo {
+ case . foo ( ↓ let x , ↓ let y ): break
+}
+
+
switch foo {
+ case ( . yamlParsing ( ↓ let x ), . yamlParsing ( ↓ let y )): break
+}
+
+
switch foo {
+ case ( ↓ var x , ↓ var y ): break
+}
+
+
switch foo {
+ case . foo ( ↓ var x , ↓ var y ): break
+}
+
+
switch foo {
+ case ( . yamlParsing ( ↓ var x ), . yamlParsing ( ↓ var y )): break
+}
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/prefer_nimble.html b/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/prefer_nimble.html
new file mode 100644
index 000000000..bd11c7db7
--- /dev/null
+++ b/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/prefer_nimble.html
@@ -0,0 +1,360 @@
+
+
+
+
prefer_nimble Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SwiftLintFramework Reference
+
+ prefer_nimble Reference
+
+
+
+
+
+
+
+
+
+
+
+
Prefer Nimble
+
+
Prefer Nimble matchers over XCTAssert functions.
+
+
+Identifier: prefer_nimble
+Enabled by default: No
+Supports autocorrection: No
+Kind: idiomatic
+Analyzer rule: No
+Minimum Swift compiler version: 5.0.0
+Default configuration: warning
+
+
Non Triggering Examples
+
expect ( foo ) == 1
+
+
expect ( foo ) . to ( equal ( 1 ))
+
+
Triggering Examples
+
↓ XCTAssertTrue ( foo )
+
+
↓ XCTAssertEqual ( foo , 2 )
+
+
↓ XCTAssertNotEqual ( foo , 2 )
+
+
↓ XCTAssertNil ( foo )
+
+
↓ XCTAssert ( foo )
+
+
↓ XCTAssertGreaterThan ( foo , 10 )
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/prefer_self_in_static_references.html b/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/prefer_self_in_static_references.html
new file mode 100644
index 000000000..b2a76922b
--- /dev/null
+++ b/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/prefer_self_in_static_references.html
@@ -0,0 +1,401 @@
+
+
+
+
prefer_self_in_static_references Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SwiftLintFramework Reference
+
+ prefer_self_in_static_references Reference
+
+
+
+
+
+
+
+
+
+
+
+
Prefer Self in Static References
+
+
Use Self to refer to the surrounding type name.
+
+
+Identifier: prefer_self_in_static_references
+Enabled by default: No
+Supports autocorrection: Yes
+Kind: style
+Analyzer rule: No
+Minimum Swift compiler version: 5.0.0
+Default configuration: warning
+
+
Non Triggering Examples
+
class C {
+ static let primes = [ 2 , 3 , 5 , 7 ]
+ func isPrime ( i : Int ) -> Bool { Self . primes . contains ( i ) }
+
+
struct T {
+ static let i = 0
+ }
+ struct S {
+ static let i = 0
+ }
+ extension T {
+ static let j = S . i + T . i
+ static let k = { T . j }()
+ }
+
+
class ` Self ` {
+ static let i = 0
+ func f () -> Int { Self . i }
+ }
+
+
Triggering Examples
+
class C {
+ struct S {
+ static let i = 2
+ let h = ↓ S . i
+ }
+ static let i = 1
+ let h = C . i
+ var j : Int { ↓ C . i }
+ func f () -> Int { ↓ C . i + h }
+ }
+
+
struct S {
+ let j : Int
+ static let i = 1
+ static func f () -> Int { ↓ S . i }
+ func g () -> Any { ↓ S . self }
+ func h () -> S { ↓ S ( j : 2 ) }
+ func i () -> KeyPath < S , Int > { \ ↓ S . j }
+ func j ( @Wrap ( - ↓ S . i , ↓ S . i ) n : Int = ↓ S . i ) {}
+ }
+
+
struct S {
+ struct T {
+ static let i = 3
+ }
+ struct R {
+ static let j = S . T . i
+ }
+ static let h = ↓ S . T . i + ↓ S . R . j
+ }
+
+
enum E {
+ case A
+ static func f () -> E { ↓ E . A }
+ static func g () -> E { ↓ E . f () }
+ }
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/prefer_self_type_over_type_of_self.html b/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/prefer_self_type_over_type_of_self.html
new file mode 100644
index 000000000..1fb565385
--- /dev/null
+++ b/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/prefer_self_type_over_type_of_self.html
@@ -0,0 +1,386 @@
+
+
+
+
prefer_self_type_over_type_of_self Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SwiftLintFramework Reference
+
+ prefer_self_type_over_type_of_self Reference
+
+
+
+
+
+
+
+
+
+
+
+
Prefer Self Type Over Type of Self
+
+
Prefer Self over type(of: self) when accessing properties or calling methods.
+
+
+Identifier: prefer_self_type_over_type_of_self
+Enabled by default: No
+Supports autocorrection: Yes
+Kind: style
+Analyzer rule: No
+Minimum Swift compiler version: 5.1.0
+Default configuration: warning
+
+
Non Triggering Examples
+
class Foo {
+ func bar () {
+ Self . baz ()
+ }
+}
+
+
class Foo {
+ func bar () {
+ print ( Self . baz )
+ }
+}
+
+
class A {
+ func foo ( param : B ) {
+ type ( of : param ) . bar ()
+ }
+}
+
+
class A {
+ func foo () {
+ print ( type ( of : self ))
+ }
+}
+
+
Triggering Examples
+
class Foo {
+ func bar () {
+ ↓ type ( of : self ) . baz ()
+ }
+}
+
+
class Foo {
+ func bar () {
+ print ( ↓ type ( of : self ) . baz )
+ }
+}
+
+
class Foo {
+ func bar () {
+ print ( ↓ Swift . type ( of : self ) . baz )
+ }
+}
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/prefer_zero_over_explicit_init.html b/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/prefer_zero_over_explicit_init.html
new file mode 100644
index 000000000..1603e7bf5
--- /dev/null
+++ b/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/prefer_zero_over_explicit_init.html
@@ -0,0 +1,368 @@
+
+
+
+
prefer_zero_over_explicit_init Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SwiftLintFramework Reference
+
+ prefer_zero_over_explicit_init Reference
+
+
+
+
+
+
+
+
+
+
+
+
Prefer Zero Over Explicit Init
+
+
Prefer .zero over explicit init with zero parameters (e.g. CGPoint(x: 0, y: 0))
+
+
+Identifier: prefer_zero_over_explicit_init
+Enabled by default: No
+Supports autocorrection: Yes
+Kind: idiomatic
+Analyzer rule: No
+Minimum Swift compiler version: 5.0.0
+Default configuration: warning
+
+
Non Triggering Examples
+
CGRect ( x : 0 , y : 0 , width : 0 , height : 1 )
+
+
CGPoint ( x : 0 , y : - 1 )
+
+
CGSize ( width : 2 , height : 4 )
+
+
CGVector ( dx : - 5 , dy : 0 )
+
+
UIEdgeInsets ( top : 0 , left : 1 , bottom : 0 , right : 1 )
+
+
Triggering Examples
+
↓ CGPoint ( x : 0 , y : 0 )
+
+
↓ CGPoint ( x : 0.000000 , y : 0 )
+
+
↓ CGPoint ( x : 0.000000 , y : 0.000 )
+
+
↓ CGRect ( x : 0 , y : 0 , width : 0 , height : 0 )
+
+
↓ CGSize ( width : 0 , height : 0 )
+
+
↓ CGVector ( dx : 0 , dy : 0 )
+
+
↓ UIEdgeInsets ( top : 0 , left : 0 , bottom : 0 , right : 0 )
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/prefixed_toplevel_constant.html b/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/prefixed_toplevel_constant.html
new file mode 100644
index 000000000..2e917b1b6
--- /dev/null
+++ b/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/prefixed_toplevel_constant.html
@@ -0,0 +1,416 @@
+
+
+
+
prefixed_toplevel_constant Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SwiftLintFramework Reference
+
+ prefixed_toplevel_constant Reference
+
+
+
+
+
+
+
+
+
+
+
+
Prefixed Top-Level Constant
+
+
Top-level constants should be prefixed by k.
+
+
+Identifier: prefixed_toplevel_constant
+Enabled by default: No
+Supports autocorrection: No
+Kind: style
+Analyzer rule: No
+Minimum Swift compiler version: 5.0.0
+Default configuration: warning, only_private: false
+
+
Non Triggering Examples
+
private let kFoo = 20.0
+
+
public let kFoo = false
+
+
internal let kFoo = "Foo"
+
+
let kFoo = true
+
+
let Foo = true
+
+
struct Foo {
+ let bar = 20.0
+}
+
+
private var foo = 20.0
+
+
public var foo = false
+
+
internal var foo = "Foo"
+
+
var foo = true
+
+
var foo = true , bar = true
+
+
var foo = true , let kFoo = true
+
+
let
+ kFoo = true
+
+
var foo : Int {
+ return a + b
+}
+
+
let kFoo = {
+ return a + b
+}()
+
+
var foo : String {
+ let bar = ""
+ return bar
+}
+
+
if condition () {
+ let result = somethingElse ()
+ print ( result )
+ exit ()
+}
+
+
[ 1 , 2 , 3 , 1000 , 4000 ] . forEach { number in
+ let isSmall = number < 10
+ if isSmall {
+ print ( " \( number ) is a small number" )
+ }
+}
+
+
Triggering Examples
+
private let ↓ Foo = 20.0
+
+
public let ↓ Foo = false
+
+
internal let ↓ Foo = "Foo"
+
+
let ↓ Foo = true
+
+
let ↓ foo = 2 , ↓ bar = true
+
+
let
+ ↓ foo = true
+
+
let ↓ foo = {
+ return a + b
+}()
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/private_action.html b/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/private_action.html
new file mode 100644
index 000000000..1f2301a26
--- /dev/null
+++ b/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/private_action.html
@@ -0,0 +1,429 @@
+
+
+
+
private_action Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SwiftLintFramework Reference
+
+ private_action Reference
+
+
+
+
+
+
+
+
+
+
+
+
Private Actions
+
+
IBActions should be private.
+
+
+Identifier: private_action
+Enabled by default: No
+Supports autocorrection: No
+Kind: lint
+Analyzer rule: No
+Minimum Swift compiler version: 5.0.0
+Default configuration: warning
+
+
Non Triggering Examples
+
class Foo {
+ @IBAction private func barButtonTapped ( _ sender : UIButton ) {}
+}
+
+
+
struct Foo {
+ @IBAction private func barButtonTapped ( _ sender : UIButton ) {}
+}
+
+
+
class Foo {
+ @IBAction fileprivate func barButtonTapped ( _ sender : UIButton ) {}
+}
+
+
+
struct Foo {
+ @IBAction fileprivate func barButtonTapped ( _ sender : UIButton ) {}
+}
+
+
+
private extension Foo {
+ @IBAction func barButtonTapped ( _ sender : UIButton ) {}
+}
+
+
+
fileprivate extension Foo {
+ @IBAction func barButtonTapped ( _ sender : UIButton ) {}
+}
+
+
+
Triggering Examples
+
class Foo {
+ @IBAction ↓ func barButtonTapped ( _ sender : UIButton ) {}
+}
+
+
+
struct Foo {
+ @IBAction ↓ func barButtonTapped ( _ sender : UIButton ) {}
+}
+
+
+
class Foo {
+ @IBAction public ↓ func barButtonTapped ( _ sender : UIButton ) {}
+}
+
+
+
struct Foo {
+ @IBAction public ↓ func barButtonTapped ( _ sender : UIButton ) {}
+}
+
+
+
class Foo {
+ @IBAction internal ↓ func barButtonTapped ( _ sender : UIButton ) {}
+}
+
+
+
struct Foo {
+ @IBAction internal ↓ func barButtonTapped ( _ sender : UIButton ) {}
+}
+
+
+
extension Foo {
+ @IBAction ↓ func barButtonTapped ( _ sender : UIButton ) {}
+}
+
+
+
extension Foo {
+ @IBAction public ↓ func barButtonTapped ( _ sender : UIButton ) {}
+}
+
+
+
extension Foo {
+ @IBAction internal ↓ func barButtonTapped ( _ sender : UIButton ) {}
+}
+
+
+
public extension Foo {
+ @IBAction ↓ func barButtonTapped ( _ sender : UIButton ) {}
+}
+
+
+
internal extension Foo {
+ @IBAction ↓ func barButtonTapped ( _ sender : UIButton ) {}
+}
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/private_outlet.html b/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/private_outlet.html
new file mode 100644
index 000000000..4a0f3a3ac
--- /dev/null
+++ b/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/private_outlet.html
@@ -0,0 +1,419 @@
+
+
+
+
private_outlet Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SwiftLintFramework Reference
+
+ private_outlet Reference
+
+
+
+
+
+
+
+
+
+
+
+
Private Outlets
+
+
IBOutlets should be private to avoid leaking UIKit to higher layers.
+
+
+Identifier: private_outlet
+Enabled by default: No
+Supports autocorrection: No
+Kind: lint
+Analyzer rule: No
+Minimum Swift compiler version: 5.0.0
+Default configuration: warning, allow_private_set: false
+
+
Non Triggering Examples
+
class Foo {
+ @IBOutlet private var label : UILabel ?
+}
+
+
+
class Foo {
+ @IBOutlet private var label : UILabel !
+}
+
+
+
class Foo {
+ var notAnOutlet : UILabel
+}
+
+
+
class Foo {
+ @IBOutlet weak private var label : UILabel ?
+}
+
+
+
class Foo {
+ @IBOutlet private weak var label : UILabel ?
+}
+
+
+
class Foo {
+ @IBOutlet fileprivate weak var label : UILabel ?
+}
+
+
+
class Foo {
+ @IBOutlet private(set) var label : UILabel ?
+}
+
+
+
class Foo {
+ @IBOutlet private(set) var label : UILabel !
+}
+
+
+
class Foo {
+ @IBOutlet weak private(set) var label : UILabel ?
+}
+
+
+
class Foo {
+ @IBOutlet private(set) weak var label : UILabel ?
+}
+
+
+
class Foo {
+ @IBOutlet fileprivate ( set ) weak var label : UILabel ?
+}
+
+
+
Triggering Examples
+
class Foo {
+ @IBOutlet ↓ var label : UILabel ?
+}
+
+
+
class Foo {
+ @IBOutlet ↓ var label : UILabel !
+}
+
+
+
class Foo {
+ @IBOutlet private(set) ↓ var label : UILabel ?
+}
+
+
+
class Foo {
+ @IBOutlet fileprivate ( set ) ↓ var label : UILabel ?
+}
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/private_over_fileprivate.html b/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/private_over_fileprivate.html
new file mode 100644
index 000000000..79e65a65a
--- /dev/null
+++ b/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/private_over_fileprivate.html
@@ -0,0 +1,380 @@
+
+
+
+
private_over_fileprivate Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SwiftLintFramework Reference
+
+ private_over_fileprivate Reference
+
+
+
+
+
+
+
+
+
+
+
+
Private over fileprivate
+
+
Prefer private over fileprivate declarations.
+
+
+Identifier: private_over_fileprivate
+Enabled by default: Yes
+Supports autocorrection: Yes
+Kind: idiomatic
+Analyzer rule: No
+Minimum Swift compiler version: 5.0.0
+Default configuration: warning, validate_extensions: false
+
+
Non Triggering Examples
+
extension String {}
+
+
private extension String {}
+
+
public
+ enum MyEnum {}
+
+
open extension
+ String {}
+
+
internal extension String {}
+
+
extension String {
+ fileprivate func Something (){}
+}
+
+
class MyClass {
+ fileprivate let myInt = 4
+}
+
+
class MyClass {
+ fileprivate ( set ) var myInt = 4
+}
+
+
struct Outter {
+ struct Inter {
+ fileprivate struct Inner {}
+ }
+}
+
+
Triggering Examples
+
↓ fileprivate enum MyEnum {}
+
+
↓ fileprivate class MyClass {
+ fileprivate ( set ) var myInt = 4
+}
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/private_subject.html b/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/private_subject.html
new file mode 100644
index 000000000..dc9069b42
--- /dev/null
+++ b/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/private_subject.html
@@ -0,0 +1,494 @@
+
+
+
+
private_subject Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SwiftLintFramework Reference
+
+ private_subject Reference
+
+
+
+
+
+
+
+
+
+
+
+
Private Combine Subject
+
+
Combine Subject should be private.
+
+
+Identifier: private_subject
+Enabled by default: No
+Supports autocorrection: No
+Kind: lint
+Analyzer rule: No
+Minimum Swift compiler version: 5.0.0
+Default configuration: warning
+
+
Non Triggering Examples
+
final class Foobar {
+ private let goodSubject = PassthroughSubject < Bool , Never > ()
+}
+
+
final class Foobar {
+ private let goodSubject : PassthroughSubject < Bool , Never >
+}
+
+
final class Foobar {
+ fileprivate let goodSubject : PassthroughSubject < Bool , Never >
+}
+
+
final class Foobar {
+ private let goodSubject : PassthroughSubject < Bool , Never > = . ini ()
+}
+
+
final class Foobar {
+ private let goodSubject = CurrentValueSubject < Bool , Never > ( false )
+}
+
+
final class Foobar {
+ private let goodSubject : CurrentValueSubject < Bool , Never >
+}
+
+
final class Foobar {
+ fileprivate let goodSubject : CurrentValueSubject < String , Never >
+}
+
+
final class Foobar {
+ private let goodSubject : CurrentValueSubject < String , Never > = . ini ( "toto" )
+}
+
+
final class Foobar {
+ private let goodSubject = PassthroughSubject < Set < String > , Never > ()
+}
+
+
final class Foobar {
+ private let goodSubject : PassthroughSubject < Set < String > , Never > = . init ()
+}
+
+
final class Foobar {
+ private let goodSubject : CurrentValueSubject < Set < String > , Never > = . init ([])
+}
+
+
final class Foobar {
+ private let goodSubject =
+ PassthroughSubject < Bool , Never > ()
+}
+
+
final class Foobar {
+ private let goodSubject :
+ PassthroughSubject < Bool , Never > = . ini ()
+}
+
+
final class Foobar {
+ private let goodSubject =
+ CurrentValueSubject < Bool , Never > ( true )
+}
+
+
Triggering Examples
+
final class Foobar {
+ let ↓ badSubject = PassthroughSubject < Bool , Never > ()
+}
+
+
final class Foobar {
+ let ↓ badSubject : PassthroughSubject < Bool , Never >
+}
+
+
final class Foobar {
+ private(set) let ↓ badSubject : PassthroughSubject < Bool , Never >
+}
+
+
final class Foobar {
+ private(set) let ↓ badSubject = PassthroughSubject < Bool , Never > ()
+}
+
+
final class Foobar {
+ let goodSubject : PassthroughSubject < Bool , Never > = . ini ()
+}
+
+
final class Foobar {
+ private let goodSubject : PassthroughSubject < Bool , Never >
+ private(set) let ↓ badSubject = PassthroughSubject < Bool , Never > ()
+ private(set) let ↓ anotherBadSubject = PassthroughSubject < Bool , Never > ()
+}
+
+
final class Foobar {
+ private(set) let ↓ badSubject = PassthroughSubject < Bool , Never > ()
+ private let goodSubject : PassthroughSubject < Bool , Never >
+ private(set) let ↓ anotherBadSubject = PassthroughSubject < Bool , Never > ()
+}
+
+
final class Foobar {
+ let ↓ badSubject = CurrentValueSubject < Bool , Never > ( true )
+}
+
+
final class Foobar {
+ let ↓ badSubject : CurrentValueSubject < Bool , Never >
+}
+
+
final class Foobar {
+ private(set) let ↓ badSubject : CurrentValueSubject < Bool , Never >
+}
+
+
final class Foobar {
+ private(set) let ↓ badSubject = CurrentValueSubject < Bool , Never > ( false )
+}
+
+
final class Foobar {
+ let goodSubject : CurrentValueSubject < String , Never > = . init ( "toto" )
+}
+
+
final class Foobar {
+ private let goodSubject : CurrentValueSubject < Bool , Never >
+ private(set) let ↓ badSubject = CurrentValueSubject < Bool , Never > ( false )
+ private(set) let ↓ anotherBadSubject = CurrentValueSubject < Bool , Never > ( false )
+}
+
+
final class Foobar {
+ private(set) let ↓ badSubject = CurrentValueSubject < Bool , Never > ( false )
+ private let goodSubject : CurrentValueSubject < Bool , Never >
+ private(set) let ↓ anotherBadSubject = CurrentValueSubject < Bool , Never > ( true )
+}
+
+
final class Foobar {
+ let ↓ badSubject = PassthroughSubject < Set < String > , Never > ()
+}
+
+
final class Foobar {
+ let ↓ badSubject : PassthroughSubject < Set < String > , Never > = . init ()
+}
+
+
final class Foobar {
+ let ↓ badSubject : CurrentValueSubject < Set < String > , Never > = . init ([])
+}
+
+
final class Foobar {
+ let ↓ badSubject =
+ PassthroughSubject < Bool , Never > ()
+}
+
+
final class Foobar {
+ let ↓ badSubject :
+ PassthroughSubject < Bool , Never > = . ini ()
+}
+
+
final class Foobar {
+ let ↓ badSubject =
+ CurrentValueSubject < Bool , Never > ( true )
+}
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/private_unit_test.html b/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/private_unit_test.html
new file mode 100644
index 000000000..c10835675
--- /dev/null
+++ b/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/private_unit_test.html
@@ -0,0 +1,415 @@
+
+
+
+
private_unit_test Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SwiftLintFramework Reference
+
+ private_unit_test Reference
+
+
+
+
+
+
+
+
+
+
+
+
Private Unit Test
+
+
Unit tests marked private are silently skipped.
+
+
+Identifier: private_unit_test
+Enabled by default: Yes
+Supports autocorrection: Yes
+Kind: lint
+Analyzer rule: No
+Minimum Swift compiler version: 5.0.0
+Default configuration: warning: XCTestCase
+
+
Non Triggering Examples
+
class FooTest : XCTestCase {
+ func test1 () {}
+ internal func test2 () {}
+ public func test3 () {}
+}
+
+
internal class FooTest : XCTestCase {
+ func test1 () {}
+ internal func test2 () {}
+ public func test3 () {}
+}
+
+
public class FooTest : XCTestCase {
+ func test1 () {}
+ internal func test2 () {}
+ public func test3 () {}
+}
+
+
@objc private class FooTest : XCTestCase {
+ @objc private func test1 () {}
+ internal func test2 () {}
+ public func test3 () {}
+}
+
+
private class Foo : NSObject {
+ func test1 () {}
+ internal func test2 () {}
+ public func test3 () {}
+}
+
+
private class Foo {
+ func test1 () {}
+ internal func test2 () {}
+ public func test3 () {}
+}
+
+
public class FooTest : XCTestCase {
+ private func test1 ( param : Int ) {}
+ private func test2 () -> String { "" }
+ private func atest () {}
+ private static func test3 () {}
+}
+
+
Triggering Examples
+
private ↓ class FooTest : XCTestCase {
+ func test1 () {}
+ internal func test2 () {}
+ public func test3 () {}
+ private func test4 () {}
+}
+
+
class FooTest : XCTestCase {
+ func test1 () {}
+ internal func test2 () {}
+ public func test3 () {}
+ private ↓ func test4 () {}
+}
+
+
internal class FooTest : XCTestCase {
+ func test1 () {}
+ internal func test2 () {}
+ public func test3 () {}
+ private ↓ func test4 () {}
+}
+
+
public class FooTest : XCTestCase {
+ func test1 () {}
+ internal func test2 () {}
+ public func test3 () {}
+ private ↓ func test4 () {}
+}
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/prohibited_interface_builder.html b/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/prohibited_interface_builder.html
new file mode 100644
index 000000000..da5cd8b73
--- /dev/null
+++ b/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/prohibited_interface_builder.html
@@ -0,0 +1,360 @@
+
+
+
+
prohibited_interface_builder Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SwiftLintFramework Reference
+
+ prohibited_interface_builder Reference
+
+
+
+
+
+
+
+
+
+
+
+
Prohibited Interface Builder
+
+
Creating views using Interface Builder should be avoided.
+
+
+Identifier: prohibited_interface_builder
+Enabled by default: No
+Supports autocorrection: No
+Kind: lint
+Analyzer rule: No
+Minimum Swift compiler version: 5.0.0
+Default configuration: warning
+
+
Non Triggering Examples
+
class ViewController : UIViewController {
+ var label : UILabel !
+}
+
+
class ViewController : UIViewController {
+ @objc func buttonTapped ( _ sender : UIButton ) {}
+}
+
+
Triggering Examples
+
class ViewController : UIViewController {
+ @IBOutlet ↓ var label : UILabel !
+}
+
+
class ViewController : UIViewController {
+ @IBAction ↓ func buttonTapped ( _ sender : UIButton ) {}
+}
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/prohibited_super_call.html b/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/prohibited_super_call.html
new file mode 100644
index 000000000..ae9d72340
--- /dev/null
+++ b/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/prohibited_super_call.html
@@ -0,0 +1,393 @@
+
+
+
+
prohibited_super_call Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SwiftLintFramework Reference
+
+ prohibited_super_call Reference
+
+
+
+
+
+
+
+
+
+
+
+
Prohibited calls to super
+
+
Some methods should not call super
+
+
+Identifier: prohibited_super_call
+Enabled by default: No
+Supports autocorrection: No
+Kind: lint
+Analyzer rule: No
+Minimum Swift compiler version: 5.0.0
+Default configuration: warning, excluded: [[]], included: [[“*”]]
+
+
Non Triggering Examples
+
class VC : UIViewController {
+ override func loadView () {
+ }
+}
+
+
class NSView {
+ func updateLayer () {
+ self . method1 ()
+ }
+}
+
+
public class FileProviderExtension : NSFileProviderExtension {
+ override func providePlaceholder ( at url : URL , completionHandler : @escaping ( Error ?) -> Void ) {
+ guard let identifier = persistentIdentifierForItem ( at : url ) else {
+ completionHandler ( NSFileProviderError ( . noSuchItem ))
+ return
+ }
+ }
+}
+
+
Triggering Examples
+
class VC : UIViewController {
+ override func loadView () { ↓
+ super . loadView ()
+ }
+}
+
+
class VC : NSFileProviderExtension {
+ override func providePlaceholder ( at url : URL , completionHandler : @escaping ( Error ?) -> Void ) { ↓
+ self . method1 ()
+ super . providePlaceholder ( at : url , completionHandler : completionHandler )
+ }
+}
+
+
class VC : NSView {
+ override func updateLayer () { ↓
+ self . method1 ()
+ super . updateLayer ()
+ self . method2 ()
+ }
+}
+
+
class VC : NSView {
+ override func updateLayer () { ↓
+ defer {
+ super . updateLayer ()
+ }
+ }
+}
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/protocol_property_accessors_order.html b/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/protocol_property_accessors_order.html
new file mode 100644
index 000000000..564c10362
--- /dev/null
+++ b/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/protocol_property_accessors_order.html
@@ -0,0 +1,360 @@
+
+
+
+
protocol_property_accessors_order Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SwiftLintFramework Reference
+
+ protocol_property_accessors_order Reference
+
+
+
+
+
+
+
+
+
+
+
+
Protocol Property Accessors Order
+
+
When declaring properties in protocols, the order of accessors should be get set.
+
+
+Identifier: protocol_property_accessors_order
+Enabled by default: Yes
+Supports autocorrection: Yes
+Kind: style
+Analyzer rule: No
+Minimum Swift compiler version: 5.0.0
+Default configuration: warning
+
+
Non Triggering Examples
+
protocol Foo {
+ var bar : String { get set }
+ }
+
+
protocol Foo {
+ var bar : String { get }
+ }
+
+
protocol Foo {
+ var bar : String { set }
+ }
+
+
Triggering Examples
+
protocol Foo {
+ var bar : String { ↓ set get }
+ }
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/quick_discouraged_call.html b/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/quick_discouraged_call.html
new file mode 100644
index 000000000..07e7b7001
--- /dev/null
+++ b/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/quick_discouraged_call.html
@@ -0,0 +1,605 @@
+
+
+
+
quick_discouraged_call Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SwiftLintFramework Reference
+
+ quick_discouraged_call Reference
+
+
+
+
+
+
+
+
+
+
+
+
Quick Discouraged Call
+
+
Discouraged call inside ‘describe’ and/or ‘context’ block.
+
+
+Identifier: quick_discouraged_call
+Enabled by default: No
+Supports autocorrection: No
+Kind: lint
+Analyzer rule: No
+Minimum Swift compiler version: 5.0.0
+Default configuration: warning
+
+
Non Triggering Examples
+
class TotoTests : QuickSpec {
+ override func spec () {
+ describe ( "foo" ) {
+ beforeEach {
+ let foo = Foo ()
+ foo . toto ()
+ }
+ }
+ }
+}
+
+
class TotoTests : QuickSpec {
+ override func spec () {
+ describe ( "foo" ) {
+ beforeEach {
+ let foo = Foo ()
+ foo . toto ()
+ }
+ afterEach {
+ let foo = Foo ()
+ foo . toto ()
+ }
+ describe ( "bar" ) {
+ }
+ context ( "bar" ) {
+ }
+ it ( "bar" ) {
+ let foo = Foo ()
+ foo . toto ()
+ }
+ }
+ }
+}
+
+
class TotoTests : QuickSpec {
+ override func spec () {
+ describe ( "foo" ) {
+ itBehavesLike ( "bar" )
+ }
+ }
+}
+
+
class TotoTests : QuickSpec {
+ override func spec () {
+ describe ( "foo" ) {
+ it ( "does something" ) {
+ let foo = Foo ()
+ foo . toto ()
+ }
+ }
+ }
+}
+
+
class TotoTests : QuickSpec {
+ override func spec () {
+ context ( "foo" ) {
+ afterEach { toto . append ( foo ) }
+ }
+ }
+}
+
+
class TotoTests : QuickSpec {
+ override func spec () {
+ xcontext ( "foo" ) {
+ afterEach { toto . append ( foo ) }
+ }
+ }
+}
+
+
class TotoTests : QuickSpec {
+ override func spec () {
+ xdescribe ( "foo" ) {
+ afterEach { toto . append ( foo ) }
+ }
+ }
+}
+
+
class TotoTests : QuickSpec {
+ override func spec () {
+ describe ( "foo" ) {
+ xit ( "does something" ) {
+ let foo = Foo ()
+ foo . toto ()
+ }
+ }
+ }
+}
+
+
class TotoTests : QuickSpec {
+ override func spec () {
+ fcontext ( "foo" ) {
+ afterEach { toto . append ( foo ) }
+ }
+ }
+}
+
+
class TotoTests : QuickSpec {
+ override func spec () {
+ fdescribe ( "foo" ) {
+ afterEach { toto . append ( foo ) }
+ }
+ }
+}
+
+
class TotoTests : QuickSpec {
+ override func spec () {
+ describe ( "foo" ) {
+ fit ( "does something" ) {
+ let foo = Foo ()
+ foo . toto ()
+ }
+ }
+ }
+}
+
+
class TotoTests : QuickSpec {
+ override func spec () {
+ fitBehavesLike ( "foo" )
+ }
+}
+
+
class TotoTests : QuickSpec {
+ override func spec () {
+ xitBehavesLike ( "foo" )
+ }
+}
+
+
Triggering Examples
+
class TotoTests {
+ override func spec () {
+ describe ( "foo" ) {
+ let foo = Foo ()
+ }
+ }
+}
+class TotoTests : QuickSpec {
+ override func spec () {
+ describe ( "foo" ) {
+ let foo = ↓ Foo ()
+ }
+ }
+}
+
+
class TotoTests : QuickSpec {
+ override func spec () {
+ describe ( "foo" ) {
+ let foo = ↓ Foo ()
+ }
+ }
+}
+
+
class TotoTests : QuickSpec {
+ override func spec () {
+ describe ( "foo" ) {
+ context ( "foo" ) {
+ let foo = ↓ Foo ()
+ }
+ context ( "bar" ) {
+ let foo = ↓ Foo ()
+ ↓ foo . bar ()
+ it ( "does something" ) {
+ let foo = Foo ()
+ foo . toto ()
+ }
+ }
+ }
+ }
+}
+
+
class TotoTests : QuickSpec {
+ override func spec () {
+ describe ( "foo" ) {
+ context ( "foo" ) {
+ context ( "foo" ) {
+ beforeEach {
+ let foo = Foo ()
+ foo . toto ()
+ }
+ it ( "bar" ) {
+ }
+ context ( "foo" ) {
+ let foo = ↓ Foo ()
+ }
+ }
+ }
+ }
+ }
+}
+
+
class TotoTests : QuickSpec {
+ override func spec () {
+ context ( "foo" ) {
+ let foo = ↓ Foo ()
+ }
+ }
+}
+
+
class TotoTests : QuickSpec {
+ override func spec () {
+ sharedExamples ( "foo" ) {
+ let foo = ↓ Foo ()
+ }
+ }
+}
+
+
class TotoTests : QuickSpec {
+ override func spec () {
+ describe ( "foo" ) {
+ ↓ foo ()
+ }
+ }
+}
+
+
class TotoTests : QuickSpec {
+ override func spec () {
+ context ( "foo" ) {
+ ↓ foo ()
+ }
+ }
+}
+
+
class TotoTests : QuickSpec {
+ override func spec () {
+ sharedExamples ( "foo" ) {
+ ↓ foo ()
+ }
+ }
+}
+
+
class TotoTests : QuickSpec {
+ override func spec () {
+ xdescribe ( "foo" ) {
+ let foo = ↓ Foo ()
+ }
+ fdescribe ( "foo" ) {
+ let foo = ↓ Foo ()
+ }
+ }
+}
+
+
class TotoTests : QuickSpec {
+ override func spec () {
+ xcontext ( "foo" ) {
+ let foo = ↓ Foo ()
+ }
+ fcontext ( "foo" ) {
+ let foo = ↓ Foo ()
+ }
+ }
+}
+
+
class TotoTests : QuickSpecSubclass {
+ override func spec () {
+ xcontext ( "foo" ) {
+ let foo = ↓ Foo ()
+ }
+ fcontext ( "foo" ) {
+ let foo = ↓ Foo ()
+ }
+ }
+}
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/quick_discouraged_focused_test.html b/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/quick_discouraged_focused_test.html
new file mode 100644
index 000000000..5dc5fa0bb
--- /dev/null
+++ b/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/quick_discouraged_focused_test.html
@@ -0,0 +1,413 @@
+
+
+
+
quick_discouraged_focused_test Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SwiftLintFramework Reference
+
+ quick_discouraged_focused_test Reference
+
+
+
+
+
+
+
+
+
+
+
+
Quick Discouraged Focused Test
+
+
Discouraged focused test. Other tests won’t run while this one is focused.
+
+
+Identifier: quick_discouraged_focused_test
+Enabled by default: No
+Supports autocorrection: No
+Kind: lint
+Analyzer rule: No
+Minimum Swift compiler version: 5.0.0
+Default configuration: warning
+
+
Non Triggering Examples
+
class TotoTests : QuickSpec {
+ override func spec () {
+ describe ( "foo" ) {
+ describe ( "bar" ) { }
+ context ( "bar" ) {
+ it ( "bar" ) { }
+ }
+ it ( "bar" ) { }
+ itBehavesLike ( "bar" )
+ }
+ }
+}
+
+
Triggering Examples
+
class TotoTests : QuickSpec {
+ override func spec () {
+ ↓ fdescribe ( "foo" ) { }
+ }
+}
+
+
class TotoTests : QuickSpec {
+ override func spec () {
+ ↓ fcontext ( "foo" ) { }
+ }
+}
+
+
class TotoTests : QuickSpec {
+ override func spec () {
+ ↓ fit ( "foo" ) { }
+ }
+}
+
+
class TotoTests : QuickSpec {
+ override func spec () {
+ describe ( "foo" ) {
+ ↓ fit ( "bar" ) { }
+ }
+ }
+}
+
+
class TotoTests : QuickSpec {
+ override func spec () {
+ context ( "foo" ) {
+ ↓ fit ( "bar" ) { }
+ }
+ }
+}
+
+
class TotoTests : QuickSpec {
+ override func spec () {
+ describe ( "foo" ) {
+ context ( "bar" ) {
+ ↓ fit ( "toto" ) { }
+ }
+ }
+ }
+}
+
+
class TotoTests : QuickSpec {
+ override func spec () {
+ ↓ fitBehavesLike ( "foo" )
+ }
+}
+
+
class TotoTests : QuickSpecSubclass {
+ override func spec () {
+ ↓ fitBehavesLike ( "foo" )
+ }
+}
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/quick_discouraged_pending_test.html b/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/quick_discouraged_pending_test.html
new file mode 100644
index 000000000..f0d737bb1
--- /dev/null
+++ b/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/quick_discouraged_pending_test.html
@@ -0,0 +1,419 @@
+
+
+
+
quick_discouraged_pending_test Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SwiftLintFramework Reference
+
+ quick_discouraged_pending_test Reference
+
+
+
+
+
+
+
+
+
+
+
+
Quick Discouraged Pending Test
+
+
Discouraged pending test. This test won’t run while it’s marked as pending.
+
+
+Identifier: quick_discouraged_pending_test
+Enabled by default: No
+Supports autocorrection: No
+Kind: lint
+Analyzer rule: No
+Minimum Swift compiler version: 5.0.0
+Default configuration: warning
+
+
Non Triggering Examples
+
class TotoTests : QuickSpec {
+ override func spec () {
+ describe ( "foo" ) {
+ describe ( "bar" ) { }
+ context ( "bar" ) {
+ it ( "bar" ) { }
+ }
+ it ( "bar" ) { }
+ itBehavesLike ( "bar" )
+ }
+ }
+}
+
+
Triggering Examples
+
class TotoTests : QuickSpec {
+ override func spec () {
+ ↓ xdescribe ( "foo" ) { }
+ }
+}
+
+
class TotoTests : QuickSpec {
+ override func spec () {
+ ↓ xcontext ( "foo" ) { }
+ }
+}
+
+
class TotoTests : QuickSpec {
+ override func spec () {
+ ↓ xit ( "foo" ) { }
+ }
+}
+
+
class TotoTests : QuickSpec {
+ override func spec () {
+ describe ( "foo" ) {
+ ↓ xit ( "bar" ) { }
+ }
+ }
+}
+
+
class TotoTests : QuickSpec {
+ override func spec () {
+ context ( "foo" ) {
+ ↓ xit ( "bar" ) { }
+ }
+ }
+}
+
+
class TotoTests : QuickSpec {
+ override func spec () {
+ describe ( "foo" ) {
+ context ( "bar" ) {
+ ↓ xit ( "toto" ) { }
+ }
+ }
+ }
+}
+
+
class TotoTests : QuickSpec {
+ override func spec () {
+ ↓ pending ( "foo" )
+ }
+}
+
+
class TotoTests : QuickSpec {
+ override func spec () {
+ ↓ xitBehavesLike ( "foo" )
+ }
+}
+
+
class TotoTests : QuickSpecSubclass {
+ override func spec () {
+ ↓ xitBehavesLike ( "foo" )
+ }
+}
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/raw_value_for_camel_cased_codable_enum.html b/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/raw_value_for_camel_cased_codable_enum.html
new file mode 100644
index 000000000..27ddeed2f
--- /dev/null
+++ b/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/raw_value_for_camel_cased_codable_enum.html
@@ -0,0 +1,409 @@
+
+
+
+
raw_value_for_camel_cased_codable_enum Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SwiftLintFramework Reference
+
+ raw_value_for_camel_cased_codable_enum Reference
+
+
+
+
+
+
+
+
+
+
+
+
Raw Value For Camel Cased Codable Enum
+
+
Camel cased cases of Codable String enums should have raw value.
+
+
+Identifier: raw_value_for_camel_cased_codable_enum
+Enabled by default: No
+Supports autocorrection: No
+Kind: lint
+Analyzer rule: No
+Minimum Swift compiler version: 5.0.0
+Default configuration: warning
+
+
Non Triggering Examples
+
enum Numbers : Codable {
+ case int ( Int )
+ case short ( Int16 )
+}
+
+
enum Numbers : Int , Codable {
+ case one = 1
+ case two = 2
+}
+
+
enum Numbers : Double , Codable {
+ case one = 1.1
+ case two = 2.2
+}
+
+
enum Numbers : String , Codable {
+ case one = "one"
+ case two = "two"
+}
+
+
enum Status : String , Codable {
+ case OK , ACCEPTABLE
+}
+
+
enum Status : String , Codable {
+ case ok
+ case maybeAcceptable = "maybe_acceptable"
+}
+
+
enum Status : String {
+ case ok
+ case notAcceptable
+ case maybeAcceptable = "maybe_acceptable"
+}
+
+
enum Status : Int , Codable {
+ case ok
+ case notAcceptable
+ case maybeAcceptable = - 1
+}
+
+
Triggering Examples
+
enum Status : String , Codable {
+ case ok
+ case ↓ notAcceptable
+ case maybeAcceptable = "maybe_acceptable"
+}
+
+
enum Status : String , Decodable {
+ case ok
+ case ↓ notAcceptable
+ case maybeAcceptable = "maybe_acceptable"
+}
+
+
enum Status : String , Encodable {
+ case ok
+ case ↓ notAcceptable
+ case maybeAcceptable = "maybe_acceptable"
+}
+
+
enum Status : String , Codable {
+ case ok
+ case ↓ notAcceptable
+ case maybeAcceptable = "maybe_acceptable"
+}
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/reduce_boolean.html b/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/reduce_boolean.html
new file mode 100644
index 000000000..37b33544f
--- /dev/null
+++ b/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/reduce_boolean.html
@@ -0,0 +1,364 @@
+
+
+
+
reduce_boolean Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SwiftLintFramework Reference
+
+ reduce_boolean Reference
+
+
+
+
+
+
+
+
+
+
+
+
Reduce Boolean
+
+
Prefer using .allSatisfy() or .contains() over reduce(true) or reduce(false)
+
+
+Identifier: reduce_boolean
+Enabled by default: Yes
+Supports autocorrection: No
+Kind: performance
+Analyzer rule: No
+Minimum Swift compiler version: 5.0.0
+Default configuration: warning
+
+
Non Triggering Examples
+
nums . reduce ( 0 ) { $0 . 0 + $0 . 1 }
+
+
nums . reduce ( 0.0 ) { $0 . 0 + $0 . 1 }
+
+
Triggering Examples
+
let allNines = nums . ↓ reduce ( true ) { $0 . 0 && $0 . 1 == 9 }
+
+
let anyNines = nums . ↓ reduce ( false ) { $0 . 0 || $0 . 1 == 9 }
+
+
let allValid = validators . ↓ reduce ( true ) { $0 && $1 ( input ) }
+
+
let anyValid = validators . ↓ reduce ( false ) { $0 || $1 ( input ) }
+
+
let allNines = nums . ↓ reduce ( true , { $0 . 0 && $0 . 1 == 9 })
+
+
let anyNines = nums . ↓ reduce ( false , { $0 . 0 || $0 . 1 == 9 })
+
+
let allValid = validators . ↓ reduce ( true , { $0 && $1 ( input ) })
+
+
let anyValid = validators . ↓ reduce ( false , { $0 || $1 ( input ) })
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/reduce_into.html b/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/reduce_into.html
new file mode 100644
index 000000000..b5d30e3c3
--- /dev/null
+++ b/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/reduce_into.html
@@ -0,0 +1,419 @@
+
+
+
+
reduce_into Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SwiftLintFramework Reference
+
+ reduce_into Reference
+
+
+
+
+
+
+
+
+
+
+
+
Reduce Into
+
+
Prefer reduce(into:_:) over reduce(_:_:) for copy-on-write types
+
+
+Identifier: reduce_into
+Enabled by default: No
+Supports autocorrection: No
+Kind: performance
+Analyzer rule: No
+Minimum Swift compiler version: 5.0.0
+Default configuration: warning
+
+
Non Triggering Examples
+
let foo = values . reduce ( into : "abc" ) { $0 += " \( $1 ) " }
+
+
values . reduce ( into : Array < Int > ()) { result , value in
+ result . append ( value )
+}
+
+
let rows = violations . enumerated () . reduce ( into : "" ) { rows , indexAndViolation in
+ rows . append ( generateSingleRow ( for : indexAndViolation . 1 , at : indexAndViolation . 0 + 1 ))
+}
+
+
zip ( group , group . dropFirst ()) . reduce ( into : []) { result , pair in
+ result . append ( pair . 0 + pair . 1 )
+}
+
+
let foo = values . reduce ( into : [ String : Int ]()) { result , value in
+ result [ " \( value ) " ] = value
+}
+
+
let foo = values . reduce ( into : Dictionary < String , Int >. init ()) { result , value in
+ result [ " \( value ) " ] = value
+}
+
+
let foo = values . reduce ( into : [ Int ]( repeating : 0 , count : 10 )) { result , value in
+ result . append ( value )
+}
+
+
let foo = values . reduce ( MyClass ()) { result , value in
+ result . handleValue ( value )
+ return result
+}
+
+
Triggering Examples
+
let bar = values . ↓ reduce ( "abc" ) { $0 + " \( $1 ) " }
+
+
values . ↓ reduce ( Array < Int > ()) { result , value in
+ result += [ value ]
+}
+
+
[ 1 , 2 , 3 ] . ↓ reduce ( Set < Int > ()) { acc , value in
+ var result = acc
+ result . insert ( value )
+ return result
+}
+
+
let rows = violations . enumerated () . ↓ reduce ( "" ) { rows , indexAndViolation in
+ return rows + generateSingleRow ( for : indexAndViolation . 1 , at : indexAndViolation . 0 + 1 )
+}
+
+
zip ( group , group . dropFirst ()) . ↓ reduce ([]) { result , pair in
+ result + [ pair . 0 + pair . 1 ]
+}
+
+
let foo = values . ↓ reduce ([ String : Int ]()) { result , value in
+ var result = result
+ result [ " \( value ) " ] = value
+ return result
+}
+
+
let bar = values . ↓ reduce ( Dictionary < String , Int >. init ()) { result , value in
+ var result = result
+ result [ " \( value ) " ] = value
+ return result
+}
+
+
let bar = values . ↓ reduce ([ Int ]( repeating : 0 , count : 10 )) { result , value in
+ return result + [ value ]
+}
+
+
extension Data {
+ var hexString : String {
+ return ↓ reduce ( "" ) { ( output , byte ) -> String in
+ output + String ( format : "%02x" , byte )
+ }
+ }
+}
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/redundant_discardable_let.html b/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/redundant_discardable_let.html
new file mode 100644
index 000000000..3a86181a8
--- /dev/null
+++ b/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/redundant_discardable_let.html
@@ -0,0 +1,366 @@
+
+
+
+
redundant_discardable_let Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SwiftLintFramework Reference
+
+ redundant_discardable_let Reference
+
+
+
+
+
+
+
+
+
+
+
+
Redundant Discardable Let
+
+
Prefer _ = foo() over let _ = foo() when discarding a result from a function.
+
+
+Identifier: redundant_discardable_let
+Enabled by default: Yes
+Supports autocorrection: Yes
+Kind: style
+Analyzer rule: No
+Minimum Swift compiler version: 5.0.0
+Default configuration: warning
+
+
Non Triggering Examples
+
_ = foo ()
+
+
+
if let _ = foo () { }
+
+
+
guard let _ = foo () else { return }
+
+
+
let _ : ExplicitType = foo ()
+
+
while let _ = SplashStyle ( rawValue : maxValue ) { maxValue += 1 }
+
+
+
async let _ = await foo ()
+
+
Triggering Examples
+
↓ let _ = foo ()
+
+
+
if _ = foo () { ↓ let _ = bar () }
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/redundant_nil_coalescing.html b/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/redundant_nil_coalescing.html
new file mode 100644
index 000000000..cc9049cbe
--- /dev/null
+++ b/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/redundant_nil_coalescing.html
@@ -0,0 +1,350 @@
+
+
+
+
redundant_nil_coalescing Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SwiftLintFramework Reference
+
+ redundant_nil_coalescing Reference
+
+
+
+
+
+
+
+
+
+
+
+
Redundant Nil Coalescing
+
+
nil coalescing operator is only evaluated if the lhs is nil, coalescing operator with nil as rhs is redundant
+
+
+Identifier: redundant_nil_coalescing
+Enabled by default: No
+Supports autocorrection: Yes
+Kind: idiomatic
+Analyzer rule: No
+Minimum Swift compiler version: 5.0.0
+Default configuration: warning
+
+
Non Triggering Examples
+
var myVar : Int ?; myVar ?? 0
+
+
+
Triggering Examples
+
var myVar : Int ? = nil ; myVar ↓ ?? nil
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/redundant_objc_attribute.html b/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/redundant_objc_attribute.html
new file mode 100644
index 000000000..3b827dc9e
--- /dev/null
+++ b/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/redundant_objc_attribute.html
@@ -0,0 +1,485 @@
+
+
+
+
redundant_objc_attribute Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SwiftLintFramework Reference
+
+ redundant_objc_attribute Reference
+
+
+
+
+
+
+
+
+
+
+
+
Redundant @objc Attribute
+
+
Objective-C attribute (@objc) is redundant in declaration.
+
+
+Identifier: redundant_objc_attribute
+Enabled by default: Yes
+Supports autocorrection: Yes
+Kind: idiomatic
+Analyzer rule: No
+Minimum Swift compiler version: 5.0.0
+Default configuration: warning
+
+
Non Triggering Examples
+
@objc private var foo : String ? {}
+
+
@IBInspectable private var foo : String ? {}
+
+
@objc private func foo ( _ sender : Any ) {}
+
+
@IBAction private func foo ( _ sender : Any ) {}
+
+
@GKInspectable private var foo : String ! {}
+
+
private @GKInspectable var foo : String ! {}
+
+
@NSManaged var foo : String !
+
+
@objc @NSCopying var foo : String !
+
+
@objcMembers
+class Foo {
+ var bar : Any ?
+ @objc
+ class Bar {
+ @objc
+ var foo : Any ?
+ }
+}
+
+
@objc
+extension Foo {
+ var bar : Int {
+ return 0
+ }
+}
+
+
extension Foo {
+ @objc
+ var bar : Int { return 0 }
+}
+
+
@objc @IBDesignable
+extension Foo {
+ var bar : Int { return 0 }
+}
+
+
@IBDesignable
+extension Foo {
+ @objc
+ var bar : Int { return 0 }
+ var fooBar : Int { return 1 }
+}
+
+
@objcMembers
+class Foo : NSObject {
+ @objc
+ private var bar : Int {
+ return 0
+ }
+}
+
+
@objcMembers
+class Foo {
+ class Bar : NSObject {
+ @objc var foo : Any
+ }
+}
+
+
@objcMembers
+class Foo {
+ @objc class Bar {}
+}
+
+
extension BlockEditorSettings {
+ @objc ( addElementsObject :)
+ @NSManaged public func addToElements ( _ value : BlockEditorSettingElement )
+}
+
+
Triggering Examples
+
↓ @objc @IBInspectable private var foo : String ? {}
+
+
@IBInspectable ↓ @objc private var foo : String ? {}
+
+
↓ @objc @IBAction private func foo ( _ sender : Any ) {}
+
+
@IBAction ↓ @objc private func foo ( _ sender : Any ) {}
+
+
↓ @objc @GKInspectable private var foo : String ! {}
+
+
@GKInspectable ↓ @objc private var foo : String ! {}
+
+
↓ @objc @NSManaged private var foo : String !
+
+
@NSManaged ↓ @objc private var foo : String !
+
+
↓ @objc @IBDesignable class Foo {}
+
+
@objcMembers
+class Foo {
+ ↓ @objc var bar : Any ?
+}
+
+
@objcMembers
+class Foo {
+ ↓ @objc var bar : Any ?
+ ↓ @objc var foo : Any ?
+ @objc
+ class Bar {
+ @objc
+ var foo : Any ?
+ }
+}
+
+
@objc
+extension Foo {
+ ↓ @objc
+ var bar : Int {
+ return 0
+ }
+}
+
+
@objc @IBDesignable
+extension Foo {
+ ↓ @objc
+ var bar : Int {
+ return 0
+ }
+}
+
+
@objcMembers
+class Foo {
+ @objcMembers
+ class Bar : NSObject {
+ ↓ @objc var foo : Any
+ }
+}
+
+
@objc
+extension Foo {
+ ↓ @objc
+ private var bar : Int {
+ return 0
+ }
+}
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/redundant_optional_initialization.html b/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/redundant_optional_initialization.html
new file mode 100644
index 000000000..fb63628a6
--- /dev/null
+++ b/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/redundant_optional_initialization.html
@@ -0,0 +1,405 @@
+
+
+
+
redundant_optional_initialization Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SwiftLintFramework Reference
+
+ redundant_optional_initialization Reference
+
+
+
+
+
+
+
+
+
+
+
+
Redundant Optional Initialization
+
+
Initializing an optional variable with nil is redundant.
+
+
+Identifier: redundant_optional_initialization
+Enabled by default: Yes
+Supports autocorrection: Yes
+Kind: idiomatic
+Analyzer rule: No
+Minimum Swift compiler version: 5.0.0
+Default configuration: warning
+
+
Non Triggering Examples
+
var myVar : Int ?
+
+
+
let myVar : Int ? = nil
+
+
+
var myVar : Int ? = 0
+
+
+
func foo ( bar : Int ? = 0 ) { }
+
+
+
var myVar : Optional < Int >
+
+
+
let myVar : Optional < Int > = nil
+
+
+
var myVar : Optional < Int > = 0
+
+
+
var foo : Int ? {
+ if bar != nil { }
+ return 0
+}
+
+
var foo : Int ? = {
+ if bar != nil { }
+ return 0
+}()
+
+
lazy var test : Int ? = nil
+
+
func funcName () {
+ var myVar : String ?
+}
+
+
func funcName () {
+ let myVar : String ? = nil
+}
+
+
Triggering Examples
+
var myVar : Int ? ↓ = nil
+
+
+
var myVar : Optional < Int > ↓ = nil
+
+
+
var myVar : Int ? ↓ = nil
+
+
+
var myVar : Optional < Int > ↓ = nil
+)
+
+
var myVar : String ? ↓ = nil {
+ didSet { print ( "didSet" ) }
+}
+
+
func funcName () {
+ var myVar : String ? ↓ = nil
+}
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/redundant_set_access_control.html b/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/redundant_set_access_control.html
new file mode 100644
index 000000000..34cf1dd23
--- /dev/null
+++ b/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/redundant_set_access_control.html
@@ -0,0 +1,384 @@
+
+
+
+
redundant_set_access_control Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SwiftLintFramework Reference
+
+ redundant_set_access_control Reference
+
+
+
+
+
+
+
+
+
+
+
+
Redundant Set Access Control Rule
+
+
Property setter access level shouldn’t be explicit if it’s the same as the variable access level.
+
+
+Identifier: redundant_set_access_control
+Enabled by default: Yes
+Supports autocorrection: No
+Kind: idiomatic
+Analyzer rule: No
+Minimum Swift compiler version: 5.0.0
+Default configuration: warning
+
+
Non Triggering Examples
+
private(set) public var foo : Int
+
+
public let foo : Int
+
+
public var foo : Int
+
+
var foo : Int
+
+
private final class A {
+ private(set) var value : Int
+}
+
+
extension Color {
+ public internal(set) static var someColor = Color . anotherColor
+}
+
+
Triggering Examples
+
↓ private(set) private var foo : Int
+
+
↓ fileprivate ( set ) fileprivate var foo : Int
+
+
↓ internal(set) internal var foo : Int
+
+
↓ public ( set ) public var foo : Int
+
+
open class Foo {
+ ↓ open ( set ) open var bar : Int
+}
+
+
class A {
+ ↓ internal(set) var value : Int
+}
+
+
internal class A {
+ ↓ internal(set) var value : Int
+}
+
+
fileprivate class A {
+ ↓ fileprivate ( set ) var value : Int
+}
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/redundant_string_enum_value.html b/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/redundant_string_enum_value.html
new file mode 100644
index 000000000..b0a2924f9
--- /dev/null
+++ b/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/redundant_string_enum_value.html
@@ -0,0 +1,381 @@
+
+
+
+
redundant_string_enum_value Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SwiftLintFramework Reference
+
+ redundant_string_enum_value Reference
+
+
+
+
+
+
+
+
+
+
+
+
Redundant String Enum Value
+
+
String enum values can be omitted when they are equal to the enumcase name.
+
+
+Identifier: redundant_string_enum_value
+Enabled by default: Yes
+Supports autocorrection: No
+Kind: idiomatic
+Analyzer rule: No
+Minimum Swift compiler version: 5.0.0
+Default configuration: warning
+
+
Non Triggering Examples
+
enum Numbers : String {
+ case one
+ case two
+}
+
+
enum Numbers : Int {
+ case one = 1
+ case two = 2
+}
+
+
enum Numbers : String {
+ case one = "ONE"
+ case two = "TWO"
+}
+
+
enum Numbers : String {
+ case one = "ONE"
+ case two = "two"
+}
+
+
enum Numbers : String {
+ case one , two
+}
+
+
Triggering Examples
+
enum Numbers : String {
+ case one = ↓ "one"
+ case two = ↓ "two"
+}
+
+
enum Numbers : String {
+ case one = ↓ "one" , two = ↓ "two"
+}
+
+
enum Numbers : String {
+ case one , two = ↓ "two"
+}
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/redundant_type_annotation.html b/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/redundant_type_annotation.html
new file mode 100644
index 000000000..b224295d6
--- /dev/null
+++ b/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/redundant_type_annotation.html
@@ -0,0 +1,391 @@
+
+
+
+
redundant_type_annotation Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SwiftLintFramework Reference
+
+ redundant_type_annotation Reference
+
+
+
+
+
+
+
+
+
+
+
+
Redundant Type Annotation
+
+
Variables should not have redundant type annotation
+
+
+Identifier: redundant_type_annotation
+Enabled by default: No
+Supports autocorrection: Yes
+Kind: idiomatic
+Analyzer rule: No
+Minimum Swift compiler version: 5.0.0
+Default configuration: warning
+
+
Non Triggering Examples
+
var url = URL ()
+
+
var url : CustomStringConvertible = URL ()
+
+
@IBInspectable var color : UIColor = UIColor . white
+
+
enum Direction {
+ case up
+ case down
+}
+
+var direction : Direction = . up
+
+
enum Direction {
+ case up
+ case down
+}
+
+var direction = Direction . up
+
+
Triggering Examples
+
var url ↓ : URL = URL ()
+
+
var url ↓ : URL = URL ( string : "" )
+
+
var url ↓ : URL = URL ()
+
+
let url ↓ : URL = URL ()
+
+
lazy var url ↓ : URL = URL ()
+
+
let alphanumerics ↓ : CharacterSet = CharacterSet . alphanumerics
+
+
class ViewController : UIViewController {
+ func someMethod () {
+ let myVar ↓ : Int = Int ( 5 )
+ }
+}
+
+
var isEnabled ↓ : Bool = true
+
+
enum Direction {
+ case up
+ case down
+}
+
+var direction ↓ : Direction = Direction . up
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/redundant_void_return.html b/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/redundant_void_return.html
new file mode 100644
index 000000000..1a403ad91
--- /dev/null
+++ b/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/redundant_void_return.html
@@ -0,0 +1,399 @@
+
+
+
+
redundant_void_return Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SwiftLintFramework Reference
+
+ redundant_void_return Reference
+
+
+
+
+
+
+
+
+
+
+
+
Redundant Void Return
+
+
Returning Void in a function declaration is redundant.
+
+
+Identifier: redundant_void_return
+Enabled by default: Yes
+Supports autocorrection: Yes
+Kind: idiomatic
+Analyzer rule: No
+Minimum Swift compiler version: 5.0.0
+Default configuration: warning
+
+
Non Triggering Examples
+
func foo () {}
+
+
+
func foo () -> Int {}
+
+
+
func foo () -> Int -> Void {}
+
+
+
func foo () -> VoidResponse
+
+
+
let foo : ( Int ) -> Void
+
+
+
func foo () -> Int -> () {}
+
+
+
let foo : ( Int ) -> ()
+
+
+
func foo () -> ()?
+
+
+
func foo () -> () !
+
+
+
func foo () -> Void ?
+
+
+
func foo () -> Void !
+
+
+
struct A {
+ subscript ( key : String ) {
+ print ( key )
+ }
+}
+
+
Triggering Examples
+
func foo () ↓ -> Void {}
+
+
+
protocol Foo {
+ func foo () ↓ -> Void
+}
+
+
func foo () ↓ -> () {}
+
+
+
func foo () ↓ -> ( ) {}
+
+
protocol Foo {
+ func foo () ↓ -> ()
+}
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/required_deinit.html b/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/required_deinit.html
new file mode 100644
index 000000000..01750d33c
--- /dev/null
+++ b/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/required_deinit.html
@@ -0,0 +1,389 @@
+
+
+
+
required_deinit Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SwiftLintFramework Reference
+
+ required_deinit Reference
+
+
+
+
+
+
+
+
+
+
+
+
Required Deinit
+
+
Classes should have an explicit deinit method.
+
+
+Identifier: required_deinit
+Enabled by default: No
+Supports autocorrection: No
+Kind: lint
+Analyzer rule: No
+Minimum Swift compiler version: 5.0.0
+Default configuration: warning
+
+
Non Triggering Examples
+
class Apple {
+ deinit { }
+}
+
+
enum Banana { }
+
+
protocol Cherry { }
+
+
struct Damson { }
+
+
class Outer {
+ deinit { print ( "Deinit Outer" ) }
+ class Inner {
+ deinit { print ( "Deinit Inner" ) }
+ }
+}
+
+
Triggering Examples
+
↓ class Apple { }
+
+
↓ class Banana : NSObject , Equatable { }
+
+
↓ class Cherry {
+ // deinit { }
+}
+
+
↓ class Damson {
+ func deinitialize () { }
+}
+
+
class Outer {
+ func hello () -> String { return "outer" }
+ deinit { }
+ ↓ class Inner {
+ func hello () -> String { return "inner" }
+ }
+}
+
+
↓ class Outer {
+ func hello () -> String { return "outer" }
+ class Inner {
+ func hello () -> String { return "inner" }
+ deinit { }
+ }
+}
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/required_enum_case.html b/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/required_enum_case.html
new file mode 100644
index 000000000..46e33205d
--- /dev/null
+++ b/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/required_enum_case.html
@@ -0,0 +1,387 @@
+
+
+
+
required_enum_case Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SwiftLintFramework Reference
+
+ required_enum_case Reference
+
+
+
+
+
+
+
+
+
+
+
+
Required Enum Case
+
+
Enums conforming to a specified protocol must implement a specific case(s).
+
+
+Identifier: required_enum_case
+Enabled by default: No
+Supports autocorrection: No
+Kind: lint
+Analyzer rule: No
+Minimum Swift compiler version: 5.0.0
+Default configuration: No protocols configured. In config add ‘required_enum_case’ to ‘opt_in_rules’ and config using :
+
+
+
‘required_enum_case:
+ {Protocol Name}:
+ {Case Name}:{warning|error}
+ {Case Name}:{warning|error}
+
Non Triggering Examples
+
enum MyNetworkResponse : String , NetworkResponsable {
+ case success , error , notConnected
+}
+
+
enum MyNetworkResponse : String , NetworkResponsable {
+ case success , error , notConnected ( error : Error )
+}
+
+
enum MyNetworkResponse : String , NetworkResponsable {
+ case success
+ case error
+ case notConnected
+}
+
+
enum MyNetworkResponse : String , NetworkResponsable {
+ case success
+ case error
+ case notConnected ( error : Error )
+}
+
+
Triggering Examples
+
↓ enum MyNetworkResponse : String , NetworkResponsable {
+ case success , error
+}
+
+
↓ enum MyNetworkResponse : String , NetworkResponsable {
+ case success , error
+}
+
+
↓ enum MyNetworkResponse : String , NetworkResponsable {
+ case success
+ case error
+}
+
+
↓ enum MyNetworkResponse : String , NetworkResponsable {
+ case success
+ case error
+}
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/return_arrow_whitespace.html b/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/return_arrow_whitespace.html
new file mode 100644
index 000000000..89f91941a
--- /dev/null
+++ b/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/return_arrow_whitespace.html
@@ -0,0 +1,416 @@
+
+
+
+
return_arrow_whitespace Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SwiftLintFramework Reference
+
+ return_arrow_whitespace Reference
+
+
+
+
+
+
+
+
+
+
+
+
Returning Whitespace
+
+
Return arrow and return type should be separated by a single space or on a separate line.
+
+
+Identifier: return_arrow_whitespace
+Enabled by default: Yes
+Supports autocorrection: Yes
+Kind: style
+Analyzer rule: No
+Minimum Swift compiler version: 5.0.0
+Default configuration: warning
+
+
Non Triggering Examples
+
func abc () -> Int {}
+
+
+
func abc () -> [ Int ] {}
+
+
+
func abc () -> ( Int , Int ) {}
+
+
+
var abc = {( param : Int ) -> Void in }
+
+
+
func abc () ->
+ Int {}
+
+
+
func abc ()
+ -> Int {}
+
+
+
func reallyLongFunctionMethods < T > ( withParam1 : Int , param2 : String , param3 : Bool ) where T : AGenericConstraint
+ -> Int {
+ return 1
+}
+
+
typealias SuccessBlock = (( Data ) -> Void )
+
+
Triggering Examples
+
func abc () ↓ -> Int {}
+
+
+
func abc () ↓ -> [ Int ] {}
+
+
+
func abc () ↓ -> ( Int , Int ) {}
+
+
+
func abc () ↓ -> Int {}
+
+
+
func abc () ↓ -> Int {}
+
+
+
func abc () ↓ -> Int {}
+
+
+
func abc () ↓ -> Int {}
+
+
+
var abc = {( param : Int ) ↓ -> Bool in }
+
+
+
var abc = {( param : Int ) ↓ -> Bool in }
+
+
+
typealias SuccessBlock = (( Data ) ↓ -> Void )
+
+
func abc ()
+ ↓ -> Int {}
+
+
+
func abc ()
+ ↓ -> Int {}
+
+
+
func abc () ↓ ->
+ Int {}
+
+
+
func abc () ↓ ->
+Int {}
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/return_value_from_void_function.html b/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/return_value_from_void_function.html
new file mode 100644
index 000000000..c29b05c2f
--- /dev/null
+++ b/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/return_value_from_void_function.html
@@ -0,0 +1,540 @@
+
+
+
+
return_value_from_void_function Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SwiftLintFramework Reference
+
+ return_value_from_void_function Reference
+
+
+
+
+
+
+
+
+
+
+
+
Return Value from Void Function
+
+
Returning values from Void functions should be avoided.
+
+
+Identifier: return_value_from_void_function
+Enabled by default: No
+Supports autocorrection: No
+Kind: idiomatic
+Analyzer rule: No
+Minimum Swift compiler version: 5.1.0
+Default configuration: warning
+
+
Non Triggering Examples
+
func foo () {
+ return
+}
+
+
func foo () {
+ return /* a comment */
+}
+
+
func foo () -> Int {
+ return 1
+}
+
+
func foo () -> Void {
+ if condition {
+ return
+ }
+ bar ()
+}
+
+
func foo () {
+ return ;
+ bar ()
+}
+
+
func test () {}
+
+
init ?() {
+ guard condition else {
+ return nil
+ }
+}
+
+
init ?( arg : String ?) {
+ guard arg != nil else {
+ return nil
+ }
+}
+
+
func test () {
+ guard condition else {
+ return
+ }
+}
+
+
func test () -> Result < String , Error > {
+ func other () {}
+ func otherVoid () -> Void {}
+}
+
+
func test () -> Int ? {
+ return nil
+}
+
+
func test () {
+ if bar {
+ print ( "" )
+ return
+ }
+ let foo = [ 1 , 2 , 3 ] . filter { return true }
+ return
+}
+
+
func test () {
+ guard foo else {
+ bar ()
+ return
+ }
+}
+
+
func spec () {
+ var foo : Int {
+ return 0
+ }
+
+
Triggering Examples
+
func foo () {
+ ↓ return bar ()
+}
+
+
func foo () {
+ ↓ return self . bar ()
+}
+
+
func foo () -> Void {
+ ↓ return bar ()
+}
+
+
func foo () -> Void {
+ ↓ return /* comment */ bar ()
+}
+
+
func foo () {
+ ↓ return
+ self . bar ()
+}
+
+
func foo () {
+ variable += 1
+ ↓ return
+ variable += 1
+}
+
+
func initThing () {
+ guard foo else {
+ ↓ return print ( "" )
+ }
+}
+
+
// Leading comment
+func test () {
+ guard condition else {
+ ↓ return assertionfailure ( "" )
+ }
+}
+
+
func test () -> Result < String , Error > {
+ func other () {
+ guard false else {
+ ↓ return assertionfailure ( "" )
+ }
+ }
+ func otherVoid () -> Void {}
+}
+
+
func test () {
+ guard conditionIsTrue else {
+ sideEffects ()
+ return // comment
+ }
+ guard otherCondition else {
+ ↓ return assertionfailure ( "" )
+ }
+ differentSideEffect ()
+}
+
+
func test () {
+ guard otherCondition else {
+ ↓ return assertionfailure ( "" ); // comment
+ }
+ differentSideEffect ()
+}
+
+
func test () {
+ if x {
+ ↓ return foo ()
+ }
+ bar ()
+}
+
+
func test () {
+ switch x {
+ case . a :
+ ↓ return foo () // return to skip baz()
+ case . b :
+ bar ()
+ }
+ baz ()
+}
+
+
func test () {
+ if check {
+ if otherCheck {
+ ↓ return foo ()
+ }
+ }
+ bar ()
+}
+
+
func test () {
+ ↓ return foo ()
+}
+
+
func test () {
+ ↓ return foo ({
+ return bar ()
+ })
+}
+
+
func test () {
+ guard x else {
+ ↓ return foo ()
+ }
+ bar ()
+}
+
+
func test () {
+ let closure : () -> () = {
+ return assert ()
+ }
+ if check {
+ if otherCheck {
+ return // comments are fine
+ }
+ }
+ ↓ return foo ()
+}
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/rule-directory.html b/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/rule-directory.html
new file mode 100644
index 000000000..751783307
--- /dev/null
+++ b/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/rule-directory.html
@@ -0,0 +1,558 @@
+
+
+
+
Rule Directory Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SwiftLintFramework Reference
+
+ Rule Directory Reference
+
+
+
+
+
+
+
+
+
+
+
+
Rule Directory
+
Default Rules
+
+
+
Opt-In Rules
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/search.json b/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/search.json
new file mode 100644
index 000000000..121c413a2
--- /dev/null
+++ b/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/search.json
@@ -0,0 +1 @@
+{"Structs/XcodeReporter.html#/s:18SwiftLintFramework8ReporterP10identifierSSvpZ":{"name":"identifier","parent_name":"XcodeReporter"},"Structs/XcodeReporter.html#/s:18SwiftLintFramework8ReporterP10isRealtimeSbvpZ":{"name":"isRealtime","parent_name":"XcodeReporter"},"Structs/XcodeReporter.html#/s:s23CustomStringConvertibleP11descriptionSSvp":{"name":"description","parent_name":"XcodeReporter"},"Structs/XcodeReporter.html#/s:18SwiftLintFramework8ReporterP14generateReportySSSayAA14StyleViolationVGFZ":{"name":"generateReport(_:)","parent_name":"XcodeReporter"},"Structs/SonarQubeReporter.html#/s:18SwiftLintFramework8ReporterP10identifierSSvpZ":{"name":"identifier","parent_name":"SonarQubeReporter"},"Structs/SonarQubeReporter.html#/s:18SwiftLintFramework8ReporterP10isRealtimeSbvpZ":{"name":"isRealtime","parent_name":"SonarQubeReporter"},"Structs/SonarQubeReporter.html#/s:s23CustomStringConvertibleP11descriptionSSvp":{"name":"description","parent_name":"SonarQubeReporter"},"Structs/SonarQubeReporter.html#/s:18SwiftLintFramework8ReporterP14generateReportySSSayAA14StyleViolationVGFZ":{"name":"generateReport(_:)","parent_name":"SonarQubeReporter"},"Structs/GitLabJUnitReporter.html#/s:18SwiftLintFramework8ReporterP10identifierSSvpZ":{"name":"identifier","parent_name":"GitLabJUnitReporter"},"Structs/GitLabJUnitReporter.html#/s:18SwiftLintFramework8ReporterP10isRealtimeSbvpZ":{"name":"isRealtime","parent_name":"GitLabJUnitReporter"},"Structs/GitLabJUnitReporter.html#/s:s23CustomStringConvertibleP11descriptionSSvp":{"name":"description","parent_name":"GitLabJUnitReporter"},"Structs/GitLabJUnitReporter.html#/s:18SwiftLintFramework8ReporterP14generateReportySSSayAA14StyleViolationVGFZ":{"name":"generateReport(_:)","parent_name":"GitLabJUnitReporter"},"Structs/ReasonedRuleViolation.html#/s:18SwiftLintFramework21ReasonedRuleViolationV8position0A6Syntax16AbsolutePositionVvp":{"name":"position","abstract":"
The violation’s position.
","parent_name":"ReasonedRuleViolation"},"Structs/ReasonedRuleViolation.html#/s:18SwiftLintFramework21ReasonedRuleViolationV6reasonSSSgvp":{"name":"reason","abstract":"
A specific reason for the violation.
","parent_name":"ReasonedRuleViolation"},"Structs/ReasonedRuleViolation.html#/s:18SwiftLintFramework21ReasonedRuleViolationV8severityAA0F8SeverityOSgvp":{"name":"severity","abstract":"
The violation’s severity.
","parent_name":"ReasonedRuleViolation"},"Structs/ReasonedRuleViolation.html#/s:18SwiftLintFramework21ReasonedRuleViolationV8position6reason8severityAC0A6Syntax16AbsolutePositionV_SSSgAA0F8SeverityOSgtcfc":{"name":"init(position:reason:severity:)","abstract":"
Creates a ReasonedRuleViolation.
","parent_name":"ReasonedRuleViolation"},"Structs/ReasonedRuleViolation.html#/s:SL1loiySbx_xtFZ":{"name":"<(_:_:)","parent_name":"ReasonedRuleViolation"},"Structs/YamlParser.html#/s:18SwiftLintFramework10YamlParserV5parse_3envSDySSypGSS_SDyS2SGtKFZ":{"name":"parse(_:env:)","abstract":"
Parses the input YAML string as an untyped dictionary.
","parent_name":"YamlParser"},"Structs/Version.html#/s:18SwiftLintFramework7VersionV5valueSSvp":{"name":"value","abstract":"
The string value for this version.
","parent_name":"Version"},"Structs/Version.html#/s:18SwiftLintFramework7VersionV7currentACvpZ":{"name":"current","abstract":"
The current SwiftLint version.
","parent_name":"Version"},"Structs/SwiftVersion.html#/s:SY8RawValueQa":{"name":"RawValue","parent_name":"SwiftVersion"},"Structs/SwiftVersion.html#/s:SY8rawValue03RawB0Qzvp":{"name":"rawValue","parent_name":"SwiftVersion"},"Structs/SwiftVersion.html#/s:SY8rawValuexSg03RawB0Qz_tcfc":{"name":"init(rawValue:)","parent_name":"SwiftVersion"},"Structs/SwiftVersion.html#/s:SL1loiySbx_xtFZ":{"name":"<(_:_:)","parent_name":"SwiftVersion"},"Structs/SwiftVersion.html#/s:18SwiftLintFramework0A7VersionV4fiveACvpZ":{"name":"five","abstract":"
Swift 5.0.x - https://swift.org/download/#swift-50
","parent_name":"SwiftVersion"},"Structs/SwiftVersion.html#/s:18SwiftLintFramework0A7VersionV10fiveDotOneACvpZ":{"name":"fiveDotOne","abstract":"
Swift 5.1.x - https://swift.org/download/#swift-51
","parent_name":"SwiftVersion"},"Structs/SwiftVersion.html#/s:18SwiftLintFramework0A7VersionV10fiveDotTwoACvpZ":{"name":"fiveDotTwo","abstract":"
Swift 5.2.x - https://swift.org/download/#swift-52
","parent_name":"SwiftVersion"},"Structs/SwiftVersion.html#/s:18SwiftLintFramework0A7VersionV12fiveDotThreeACvpZ":{"name":"fiveDotThree","abstract":"
Swift 5.3.x - https://swift.org/download/#swift-53
","parent_name":"SwiftVersion"},"Structs/SwiftVersion.html#/s:18SwiftLintFramework0A7VersionV11fiveDotFourACvpZ":{"name":"fiveDotFour","abstract":"
Swift 5.4.x - https://swift.org/download/#swift-54
","parent_name":"SwiftVersion"},"Structs/SwiftVersion.html#/s:18SwiftLintFramework0A7VersionV11fiveDotFiveACvpZ":{"name":"fiveDotFive","abstract":"
Swift 5.5.x - https://swift.org/download/#swift-55
","parent_name":"SwiftVersion"},"Structs/SwiftVersion.html#/s:18SwiftLintFramework0A7VersionV10fiveDotSixACvpZ":{"name":"fiveDotSix","abstract":"
Swift 5.6.x - https://swift.org/download/#swift-56
","parent_name":"SwiftVersion"},"Structs/SwiftVersion.html#/s:18SwiftLintFramework0A7VersionV12fiveDotSevenACvpZ":{"name":"fiveDotSeven","abstract":"
Swift 5.7.x - https://swift.org/download/#swift-57
","parent_name":"SwiftVersion"},"Structs/SwiftVersion.html#/s:18SwiftLintFramework0A7VersionV7currentACvpZ":{"name":"current","abstract":"
The current detected Swift compiler version, based on the currently accessible SourceKit version.
","parent_name":"SwiftVersion"},"Structs/SwiftLintSyntaxToken.html#/s:18SwiftLintFramework0aB11SyntaxTokenV5value012SourceKittenC00dE0Vvp":{"name":"value","abstract":"
The raw SyntaxToken obtained by SourceKitten.
","parent_name":"SwiftLintSyntaxToken"},"Structs/SwiftLintSyntaxToken.html#/s:18SwiftLintFramework0aB11SyntaxTokenV4kind012SourceKittenC00D4KindOSgvp":{"name":"kind","abstract":"
The syntax kind associated with is token.
","parent_name":"SwiftLintSyntaxToken"},"Structs/SwiftLintSyntaxToken.html#/s:18SwiftLintFramework0aB11SyntaxTokenV5valueAC012SourceKittenC00dE0V_tcfc":{"name":"init(value:)","abstract":"
Creates a SwiftLintSyntaxToken from the raw SyntaxToken obtained by SourceKitten.
","parent_name":"SwiftLintSyntaxToken"},"Structs/SwiftLintSyntaxToken.html#/s:18SwiftLintFramework0aB11SyntaxTokenV5range012SourceKittenC09ByteRangeVvp":{"name":"range","abstract":"
The byte range in a source file for this token.
","parent_name":"SwiftLintSyntaxToken"},"Structs/SwiftLintSyntaxToken.html#/s:18SwiftLintFramework0aB11SyntaxTokenV6offset012SourceKittenC09ByteCountVvp":{"name":"offset","abstract":"
The starting byte offset in a source file for this token.
","parent_name":"SwiftLintSyntaxToken"},"Structs/SwiftLintSyntaxToken.html#/s:18SwiftLintFramework0aB11SyntaxTokenV6length012SourceKittenC09ByteCountVvp":{"name":"length","abstract":"
The length in bytes for this token.
","parent_name":"SwiftLintSyntaxToken"},"Structs/SwiftLintSyntaxMap.html#/s:18SwiftLintFramework0aB9SyntaxMapV5value012SourceKittenC00dE0Vvp":{"name":"value","abstract":"
The raw SyntaxMap obtained by SourceKitten.
","parent_name":"SwiftLintSyntaxMap"},"Structs/SwiftLintSyntaxMap.html#/s:18SwiftLintFramework0aB9SyntaxMapV6tokensSayAA0abD5TokenVGvp":{"name":"tokens","abstract":"
The SwiftLint-specific syntax tokens for this syntax map.
","parent_name":"SwiftLintSyntaxMap"},"Structs/SwiftLintSyntaxMap.html#/s:18SwiftLintFramework0aB9SyntaxMapV5valueAC012SourceKittenC00dE0V_tcfc":{"name":"init(value:)","abstract":"
Creates a SwiftLintSyntaxMap from the raw SyntaxMap obtained by SourceKitten.
","parent_name":"SwiftLintSyntaxMap"},"Structs/StyleViolation.html#/s:18SwiftLintFramework14StyleViolationV14ruleIdentifierSSvp":{"name":"ruleIdentifier","abstract":"
The identifier of the rule that generated this violation.
","parent_name":"StyleViolation"},"Structs/StyleViolation.html#/s:18SwiftLintFramework14StyleViolationV15ruleDescriptionSSvp":{"name":"ruleDescription","abstract":"
The description of the rule that generated this violation.
","parent_name":"StyleViolation"},"Structs/StyleViolation.html#/s:18SwiftLintFramework14StyleViolationV8ruleNameSSvp":{"name":"ruleName","abstract":"
The name of the rule that generated this violation.
","parent_name":"StyleViolation"},"Structs/StyleViolation.html#/s:18SwiftLintFramework14StyleViolationV8severityAA0E8SeverityOvp":{"name":"severity","abstract":"
The severity of this violation.
","parent_name":"StyleViolation"},"Structs/StyleViolation.html#/s:18SwiftLintFramework14StyleViolationV8locationAA8LocationVvp":{"name":"location","abstract":"
The location of this violation.
","parent_name":"StyleViolation"},"Structs/StyleViolation.html#/s:18SwiftLintFramework14StyleViolationV6reasonSSvp":{"name":"reason","abstract":"
The justification for this violation.
","parent_name":"StyleViolation"},"Structs/StyleViolation.html#/s:18SwiftLintFramework14StyleViolationV11descriptionSSvp":{"name":"description","abstract":"
A printable description for this violation.
","parent_name":"StyleViolation"},"Structs/StyleViolation.html#/s:18SwiftLintFramework14StyleViolationV15ruleDescription8severity8location6reasonAcA04RuleG0V_AA0E8SeverityOAA8LocationVSSSgtcfc":{"name":"init(ruleDescription:severity:location:reason:)","abstract":"
Creates a StyleViolation by specifying its properties directly.
","parent_name":"StyleViolation"},"Structs/StyleViolation.html#/s:18SwiftLintFramework14StyleViolationV4with8severityAcA0E8SeverityO_tF":{"name":"with(severity:)","abstract":"
Returns the same violation, but with the severity that is passed in
","parent_name":"StyleViolation"},"Structs/StyleViolation.html#/s:18SwiftLintFramework14StyleViolationV4with8locationAcA8LocationV_tF":{"name":"with(location:)","abstract":"
Returns the same violation, but with the location that is passed in
","parent_name":"StyleViolation"},"Structs/RuleParameter.html#/s:18SwiftLintFramework13RuleParameterV8severityAA17ViolationSeverityOvp":{"name":"severity","abstract":"
The severity that should be assigned to the violation of this parameter’s value is met.
","parent_name":"RuleParameter"},"Structs/RuleParameter.html#/s:18SwiftLintFramework13RuleParameterV5valuexvp":{"name":"value","abstract":"
The value to configure the rule.
","parent_name":"RuleParameter"},"Structs/RuleParameter.html#/s:18SwiftLintFramework13RuleParameterV8severity5valueACyxGAA17ViolationSeverityO_xtcfc":{"name":"init(severity:value:)","abstract":"
Creates a RuleParameter by specifying its properties directly.
","parent_name":"RuleParameter"},"Structs/RuleList.html#/s:18SwiftLintFramework8RuleListV4listSDySSAA0D0_pXpGvp":{"name":"list","abstract":"
The rules contained in this list.
","parent_name":"RuleList"},"Structs/RuleList.html#/s:18SwiftLintFramework8RuleListV5rulesAcA0D0_pXpd_tcfc":{"name":"init(rules:)","abstract":"
Creates a RuleList by specifying all its rules.
","parent_name":"RuleList"},"Structs/RuleList.html#/s:18SwiftLintFramework8RuleListV5rulesACSayAA0D0_pXpG_tcfc":{"name":"init(rules:)","abstract":"
Creates a RuleList by specifying all its rules.
","parent_name":"RuleList"},"Structs/RuleList.html#/s:SQ2eeoiySbx_xtFZ":{"name":"==(_:_:)","parent_name":"RuleList"},"Structs/RuleDescription.html#/s:18SwiftLintFramework15RuleDescriptionV10identifierSSvp":{"name":"identifier","abstract":"
The rule’s unique identifier, to be used in configuration files and SwiftLint commands.","parent_name":"RuleDescription"},"Structs/RuleDescription.html#/s:18SwiftLintFramework15RuleDescriptionV4nameSSvp":{"name":"name","abstract":"
The rule’s human-readable name. Should be short, descriptive and formatted in Title Case. May contain spaces.
","parent_name":"RuleDescription"},"Structs/RuleDescription.html#/s:18SwiftLintFramework15RuleDescriptionV11descriptionSSvp":{"name":"description","abstract":"
The rule’s verbose description. Should read as a sentence or short paragraph. Good things to include are an","parent_name":"RuleDescription"},"Structs/RuleDescription.html#/s:18SwiftLintFramework15RuleDescriptionV4kindAA0D4KindOvp":{"name":"kind","abstract":"
The RuleKind that best categorizes this rule.
","parent_name":"RuleDescription"},"Structs/RuleDescription.html#/s:18SwiftLintFramework15RuleDescriptionV21nonTriggeringExamplesSayAA7ExampleVGvp":{"name":"nonTriggeringExamples","abstract":"
Swift source examples that do not trigger a violation for this rule. Used for documentation purposes to inform","parent_name":"RuleDescription"},"Structs/RuleDescription.html#/s:18SwiftLintFramework15RuleDescriptionV18triggeringExamplesSayAA7ExampleVGvp":{"name":"triggeringExamples","abstract":"
Swift source examples that do trigger one or more violations for this rule. Used for documentation purposes to","parent_name":"RuleDescription"},"Structs/RuleDescription.html#/s:18SwiftLintFramework15RuleDescriptionV11correctionsSDyAA7ExampleVAFGvp":{"name":"corrections","abstract":"
Pairs of Swift source examples, where keys are examples that trigger violations for this rule, and the values","parent_name":"RuleDescription"},"Structs/RuleDescription.html#/s:18SwiftLintFramework15RuleDescriptionV17deprecatedAliasesShySSGvp":{"name":"deprecatedAliases","abstract":"
Any previous iteration of the rule’s identifier that was previously shipped with SwiftLint.
","parent_name":"RuleDescription"},"Structs/RuleDescription.html#/s:18SwiftLintFramework15RuleDescriptionV03minA7VersionAA0aG0Vvp":{"name":"minSwiftVersion","abstract":"
The oldest version of the Swift compiler supported by this rule.
","parent_name":"RuleDescription"},"Structs/RuleDescription.html#/s:18SwiftLintFramework15RuleDescriptionV18requiresFileOnDiskSbvp":{"name":"requiresFileOnDisk","abstract":"
Whether or not this rule can only be executed on a file physically on-disk. Typically necessary for rules","parent_name":"RuleDescription"},"Structs/RuleDescription.html#/s:18SwiftLintFramework15RuleDescriptionV07consoleE0SSvp":{"name":"consoleDescription","abstract":"
The console-printable string for this description.
","parent_name":"RuleDescription"},"Structs/RuleDescription.html#/s:18SwiftLintFramework15RuleDescriptionV14allIdentifiersSaySSGvp":{"name":"allIdentifiers","abstract":"
All identifiers that have been used to uniquely identify this rule in past and current SwiftLint versions.
","parent_name":"RuleDescription"},"Structs/RuleDescription.html#/s:18SwiftLintFramework15RuleDescriptionV10identifier4name11description4kind03minA7Version21nonTriggeringExamples010triggeringN011corrections17deprecatedAliases18requiresFileOnDiskACSS_S2SAA0D4KindOAA0aK0VSayAA7ExampleVGATSDyA2SGShySSGSbtcfc":{"name":"init(identifier:name:description:kind:minSwiftVersion:nonTriggeringExamples:triggeringExamples:corrections:deprecatedAliases:requiresFileOnDisk:)","abstract":"
Creates a RuleDescription by specifying all its properties directly.
","parent_name":"RuleDescription"},"Structs/RuleDescription.html#/s:SQ2eeoiySbx_xtFZ":{"name":"==(_:_:)","parent_name":"RuleDescription"},"Structs/Region.html#/s:18SwiftLintFramework6RegionV5startAA8LocationVvp":{"name":"start","abstract":"
The location describing the start of the region. All locations that are less than this value","parent_name":"Region"},"Structs/Region.html#/s:18SwiftLintFramework6RegionV3endAA8LocationVvp":{"name":"end","abstract":"
The location describing the end of the region. All locations that are greater than this value","parent_name":"Region"},"Structs/Region.html#/s:18SwiftLintFramework6RegionV23disabledRuleIdentifiersShyAA0F10IdentifierOGvp":{"name":"disabledRuleIdentifiers","abstract":"
All SwiftLint rule identifiers that are disabled in this region.
","parent_name":"Region"},"Structs/Region.html#/s:18SwiftLintFramework6RegionV5start3end23disabledRuleIdentifiersAcA8LocationV_AHShyAA0H10IdentifierOGtcfc":{"name":"init(start:end:disabledRuleIdentifiers:)","abstract":"
Creates a Region by setting explicit values for all its properties.
","parent_name":"Region"},"Structs/Region.html#/s:18SwiftLintFramework6RegionV8containsySbAA8LocationVF":{"name":"contains(_:)","abstract":"
Whether the specific location is contained in this region.
","parent_name":"Region"},"Structs/Region.html#/s:18SwiftLintFramework6RegionV13isRuleEnabledySbAA0F0_pF":{"name":"isRuleEnabled(_:)","abstract":"
Whether the specified rule is enabled in this region.
","parent_name":"Region"},"Structs/Region.html#/s:18SwiftLintFramework6RegionV14isRuleDisabledySbAA0F0_pF":{"name":"isRuleDisabled(_:)","abstract":"
Whether the specified rule is disabled in this region.
","parent_name":"Region"},"Structs/Region.html#/s:18SwiftLintFramework6RegionV26deprecatedAliasesDisabling4ruleShySSGAA4Rule_p_tF":{"name":"deprecatedAliasesDisabling(rule:)","abstract":"
Returns the deprecated rule aliases that are disabling the specified rule in this region.","parent_name":"Region"},"Structs/Location.html#/s:18SwiftLintFramework8LocationV4fileSSSgvp":{"name":"file","abstract":"
The file path on disk for this location.
","parent_name":"Location"},"Structs/Location.html#/s:18SwiftLintFramework8LocationV4lineSiSgvp":{"name":"line","abstract":"
The line offset in the file for this location. 1-indexed.
","parent_name":"Location"},"Structs/Location.html#/s:18SwiftLintFramework8LocationV9characterSiSgvp":{"name":"character","abstract":"
The character offset in the file for this location. 1-indexed.
","parent_name":"Location"},"Structs/Location.html#/s:18SwiftLintFramework8LocationV11descriptionSSvp":{"name":"description","abstract":"
A lossless printable description of this location.
","parent_name":"Location"},"Structs/Location.html#/s:18SwiftLintFramework8LocationV12relativeFileSSSgvp":{"name":"relativeFile","abstract":"
The file path for this location relative to the current working directory.
","parent_name":"Location"},"Structs/Location.html#/s:18SwiftLintFramework8LocationV4file4line9characterACSSSg_SiSgAHtcfc":{"name":"init(file:line:character:)","abstract":"
Creates a Location by specifying its properties directly.
","parent_name":"Location"},"Structs/Location.html#/s:18SwiftLintFramework8LocationV4file10byteOffsetAcA0aB4FileC_012SourceKittenC09ByteCountVtcfc":{"name":"init(file:byteOffset:)","abstract":"
Creates a Location based on a SwiftLintFile and a byte-offset into the file.","parent_name":"Location"},"Structs/Location.html#/s:18SwiftLintFramework8LocationV4file8positionAcA0aB4FileC_0A6Syntax16AbsolutePositionVtcfc":{"name":"init(file:position:)","abstract":"
Creates a Location based on a SwiftLintFile and a SwiftSyntax AbsolutePosition into the file.","parent_name":"Location"},"Structs/Location.html#/s:18SwiftLintFramework8LocationV4file15characterOffsetAcA0aB4FileC_Sitcfc":{"name":"init(file:characterOffset:)","abstract":"
Creates a Location based on a SwiftLintFile and a UTF8 character-offset into the file.","parent_name":"Location"},"Structs/Location.html#/s:SL1loiySbx_xtFZ":{"name":"<(_:_:)","parent_name":"Location"},"Structs/CollectedLinter.html#/s:18SwiftLintFramework15CollectedLinterV4fileAA0aB4FileCvp":{"name":"file","abstract":"
The file to lint with this linter.
","parent_name":"CollectedLinter"},"Structs/CollectedLinter.html#/s:18SwiftLintFramework15CollectedLinterV15styleViolations5usingSayAA14StyleViolationVGAA11RuleStorageC_tF":{"name":"styleViolations(using:)","abstract":"
Computes or retrieves style violations.
","parent_name":"CollectedLinter"},"Structs/CollectedLinter.html#/s:18SwiftLintFramework15CollectedLinterV27styleViolationsAndRuleTimes5usingSayAA14StyleViolationVG_SaySS2id_Sd4timetGtAA0I7StorageC_tF":{"name":"styleViolationsAndRuleTimes(using:)","abstract":"
Computes or retrieves style violations and the time spent executing each rule.
","parent_name":"CollectedLinter"},"Structs/CollectedLinter.html#/s:18SwiftLintFramework15CollectedLinterV6format7useTabs11indentWidthySb_SitF":{"name":"format(useTabs:indentWidth:)","abstract":"
Formats the file associated with this linter.
","parent_name":"CollectedLinter"},"Structs/Linter.html#/s:18SwiftLintFramework6LinterV4fileAA0aB4FileCvp":{"name":"file","abstract":"
The file to lint with this linter.
","parent_name":"Linter"},"Structs/Linter.html#/s:18SwiftLintFramework6LinterV12isCollectingSbvp":{"name":"isCollecting","abstract":"
Whether or not this linter will be used to collect information from several files.
","parent_name":"Linter"},"Structs/Linter.html#/s:18SwiftLintFramework6LinterV4file13configuration5cache17compilerArgumentsAcA0aB4FileC_AA13ConfigurationVAA0D5CacheCSgSaySSGtcfc":{"name":"init(file:configuration:cache:compilerArguments:)","abstract":"
Creates a Linter by specifying its properties directly.
","parent_name":"Linter"},"Structs/Linter.html#/s:18SwiftLintFramework6LinterV7collect4intoAA09CollectedD0VAA11RuleStorageC_tF":{"name":"collect(into:)","abstract":"
Returns a linter capable of checking for violations after running each rule’s collection step.
","parent_name":"Linter"},"Structs/Example.html#/s:18SwiftLintFramework7ExampleV4codeSSvp":{"name":"code","abstract":"
The contents of the example
","parent_name":"Example"},"Structs/Example.html#/s:18SwiftLintFramework7ExampleV13configurationypSgvp":{"name":"configuration","abstract":"
The untyped configuration to apply to the rule, if deviating from the default configuration.","parent_name":"Example"},"Structs/Example.html#/s:18SwiftLintFramework7ExampleV20testMultiByteOffsetsSbvp":{"name":"testMultiByteOffsets","abstract":"
Whether the example should be tested by prepending multibyte grapheme clusters
","parent_name":"Example"},"Structs/Example.html#/s:18SwiftLintFramework7ExampleV11testOnLinuxSbvp":{"name":"testOnLinux","abstract":"
Whether the example should be tested on Linux
","parent_name":"Example"},"Structs/Example.html#/s:18SwiftLintFramework7ExampleV4files12StaticStringVvp":{"name":"file","abstract":"
The path to the file where the example was created
","parent_name":"Example"},"Structs/Example.html#/s:18SwiftLintFramework7ExampleV4lineSuvp":{"name":"line","abstract":"
The line in the file where the example was created
","parent_name":"Example"},"Structs/Example.html#/s:18SwiftLintFramework7ExampleV_13configuration20testMultiByteOffsets0F17WrappingInComment0fjK6String0F14DisableCommand0F7OnLinux4file4line24excludeFromDocumentationACSS_ypSgS5bs06StaticM0VSuSbtcfc":{"name":"init(_:configuration:testMultiByteOffsets:testWrappingInComment:testWrappingInString:testDisableCommand:testOnLinux:file:line:excludeFromDocumentation:)","abstract":"
Create a new Example with the specified code, file, and line.
","parent_name":"Example"},"Structs/Example.html#/s:18SwiftLintFramework7ExampleV4with4codeACSS_tF":{"name":"with(code:)","abstract":"
Returns the same example, but with the code that is passed in
","parent_name":"Example"},"Structs/Example.html#/s:18SwiftLintFramework7ExampleV24removingViolationMarkersACyF":{"name":"removingViolationMarkers()","abstract":"
Returns a copy of the Example with all instances of the “↓” character removed.
","parent_name":"Example"},"Structs/Example.html#/s:SQ2eeoiySbx_xtFZ":{"name":"==(_:_:)","parent_name":"Example"},"Structs/Example.html#/s:SH4hash4intoys6HasherVz_tF":{"name":"hash(into:)","parent_name":"Example"},"Structs/Example.html#/s:SL1loiySbx_xtFZ":{"name":"<(_:_:)","parent_name":"Example"},"Structs/Command/Modifier.html#/s:18SwiftLintFramework7CommandV8ModifierO8previousyA2EmF":{"name":"previous","abstract":"
The command should only apply to the line preceding its definition.
","parent_name":"Modifier"},"Structs/Command/Modifier.html#/s:18SwiftLintFramework7CommandV8ModifierO4thisyA2EmF":{"name":"this","abstract":"
The command should only apply to the same line as its definition.
","parent_name":"Modifier"},"Structs/Command/Modifier.html#/s:18SwiftLintFramework7CommandV8ModifierO4nextyA2EmF":{"name":"next","abstract":"
The command should only apply to the line following its definition.
","parent_name":"Modifier"},"Structs/Command/Action.html#/s:18SwiftLintFramework7CommandV6ActionO6enableyA2EmF":{"name":"enable","abstract":"
The rule(s) associated with this command should be enabled by the SwiftLint engine.
","parent_name":"Action"},"Structs/Command/Action.html#/s:18SwiftLintFramework7CommandV6ActionO7disableyA2EmF":{"name":"disable","abstract":"
The rule(s) associated with this command should be disabled by the SwiftLint engine.
","parent_name":"Action"},"Structs/Command/Action.html":{"name":"Action","abstract":"
The action (verb) that SwiftLint should perform when interpreting this command.
","parent_name":"Command"},"Structs/Command/Modifier.html":{"name":"Modifier","abstract":"
The modifier for a command, used to modify its scope.
","parent_name":"Command"},"Structs/Command.html#/s:18SwiftLintFramework7CommandV6action15ruleIdentifiers4line9character8modifier15trailingCommentA2C6ActionO_ShyAA14RuleIdentifierOGS2iSgAC8ModifierOSgSSSgtcfc":{"name":"init(action:ruleIdentifiers:line:character:modifier:trailingComment:)","abstract":"
Creates a command based on the specified parameters.
","parent_name":"Command"},"Structs/Command.html#/s:18SwiftLintFramework7CommandV12actionString4line9characterACSgSS_S2itcfc":{"name":"init(actionString:line:character:)","abstract":"
Creates a command based on the specified parameters.
","parent_name":"Command"},"Structs/SourceKittenDictionary.html#/s:18SwiftLintFramework22SourceKittenDictionaryV5valueSDySS0deC00D16KitRepresentable_pGvp":{"name":"value","abstract":"
The underlying SourceKitten dictionary.
","parent_name":"SourceKittenDictionary"},"Structs/SourceKittenDictionary.html#/s:18SwiftLintFramework22SourceKittenDictionaryV12substructureSayACGvp":{"name":"substructure","abstract":"
The cached substructure for this dictionary. Empty if there is no substructure.
","parent_name":"SourceKittenDictionary"},"Structs/SourceKittenDictionary.html#/s:18SwiftLintFramework22SourceKittenDictionaryV14expressionKindAA0a10ExpressionH0OSgvp":{"name":"expressionKind","abstract":"
The kind of Swift expression represented by this dictionary, if it is an expression.
","parent_name":"SourceKittenDictionary"},"Structs/SourceKittenDictionary.html#/s:18SwiftLintFramework22SourceKittenDictionaryV15declarationKind0deC00a11DeclarationH0OSgvp":{"name":"declarationKind","abstract":"
The kind of Swift declaration represented by this dictionary, if it is a declaration.
","parent_name":"SourceKittenDictionary"},"Structs/SourceKittenDictionary.html#/s:18SwiftLintFramework22SourceKittenDictionaryV13statementKind0deC009StatementH0OSgvp":{"name":"statementKind","abstract":"
The kind of Swift statement represented by this dictionary, if it is a statement.
","parent_name":"SourceKittenDictionary"},"Structs/SourceKittenDictionary.html#/s:18SwiftLintFramework22SourceKittenDictionaryV13accessibilityAA18AccessControlLevelOSgvp":{"name":"accessibility","abstract":"
The accessibility level for this dictionary, if it is a declaration.
","parent_name":"SourceKittenDictionary"},"Structs/Configuration/RulesMode.html#/s:18SwiftLintFramework13ConfigurationV9RulesModeO7defaultyAEShySSG_AGtcAEmF":{"name":"default(disabled:optIn:)","abstract":"
The default rules mode, which will enable all rules that aren’t defined as being opt-in","parent_name":"RulesMode"},"Structs/Configuration/RulesMode.html#/s:18SwiftLintFramework13ConfigurationV9RulesModeO4onlyyAEShySSGcAEmF":{"name":"only(_:)","abstract":"
Only enable the rules explicitly listed.
","parent_name":"RulesMode"},"Structs/Configuration/RulesMode.html#/s:18SwiftLintFramework13ConfigurationV9RulesModeO10allEnabledyA2EmF":{"name":"allEnabled","abstract":"
Enable all available rules.
","parent_name":"RulesMode"},"Structs/Configuration/IndentationStyle.html#/s:18SwiftLintFramework13ConfigurationV16IndentationStyleO4tabsyA2EmF":{"name":"tabs","abstract":"
Swift source code should be indented using tabs.
","parent_name":"IndentationStyle"},"Structs/Configuration/IndentationStyle.html#/s:18SwiftLintFramework13ConfigurationV16IndentationStyleO6spacesyAESi_tcAEmF":{"name":"spaces(count:)","abstract":"
Swift source code should be indented using spaces with count spaces per indentation level.
","parent_name":"IndentationStyle"},"Structs/Configuration.html#/s:18SwiftLintFramework13ConfigurationV7defaultACvpZ":{"name":"default","abstract":"
The default Configuration resulting from an empty configuration file.
","parent_name":"Configuration"},"Structs/Configuration.html#/s:18SwiftLintFramework13ConfigurationV15defaultFileNameSSvpZ":{"name":"defaultFileName","abstract":"
The default file name to look for user-defined configurations.
","parent_name":"Configuration"},"Structs/Configuration.html#/s:18SwiftLintFramework13ConfigurationV13includedPathsSaySSGvp":{"name":"includedPaths","abstract":"
The paths that should be included when linting
","parent_name":"Configuration"},"Structs/Configuration.html#/s:18SwiftLintFramework13ConfigurationV13excludedPathsSaySSGvp":{"name":"excludedPaths","abstract":"
The paths that should be excluded when linting
","parent_name":"Configuration"},"Structs/Configuration.html#/s:18SwiftLintFramework13ConfigurationV11indentationAC16IndentationStyleOvp":{"name":"indentation","abstract":"
The style to use when indenting Swift source code.
","parent_name":"Configuration"},"Structs/Configuration.html#/s:18SwiftLintFramework13ConfigurationV16warningThresholdSiSgvp":{"name":"warningThreshold","abstract":"
The threshold for the number of warnings to tolerate before treating the lint as having failed.
","parent_name":"Configuration"},"Structs/Configuration.html#/s:18SwiftLintFramework13ConfigurationV8reporterSSvp":{"name":"reporter","abstract":"
The identifier for the Reporter to use to report style violations.
","parent_name":"Configuration"},"Structs/Configuration.html#/s:18SwiftLintFramework13ConfigurationV9cachePathSSSgvp":{"name":"cachePath","abstract":"
The location of the persisted cache to use with this configuration.
","parent_name":"Configuration"},"Structs/Configuration.html#/s:18SwiftLintFramework13ConfigurationV22allowZeroLintableFilesSbvp":{"name":"allowZeroLintableFiles","abstract":"
Allow or disallow SwiftLint to exit successfully when passed only ignored or unlintable files.
","parent_name":"Configuration"},"Structs/Configuration.html#/s:18SwiftLintFramework13ConfigurationV013basedOnCustomD5FilesSbvp":{"name":"basedOnCustomConfigurationFiles","abstract":"
This value is true iff the --config parameter was used to specify (a) configuration file(s)","parent_name":"Configuration"},"Structs/Configuration.html#/s:18SwiftLintFramework13ConfigurationV5rulesSayAA4Rule_pGvp":{"name":"rules","abstract":"
All rules enabled in this configuration
","parent_name":"Configuration"},"Structs/Configuration.html#/s:18SwiftLintFramework13ConfigurationV13rootDirectorySSvp":{"name":"rootDirectory","abstract":"
The root directory is the directory that included & excluded paths relate to.","parent_name":"Configuration"},"Structs/Configuration.html#/s:18SwiftLintFramework13ConfigurationV9rulesModeAC05RulesF0Ovp":{"name":"rulesMode","abstract":"
The rules mode used for this configuration.
","parent_name":"Configuration"},"Structs/Configuration.html#/s:18SwiftLintFramework13ConfigurationV18configurationFiles14enableAllRules9cachePath27ignoreParentAndChildConfigs20mockedNetworkResults25useDefaultConfigOnFailureACSaySSG_SbSSSgSbSDyS2SGSbSgtcfc":{"name":"init(configurationFiles:enableAllRules:cachePath:ignoreParentAndChildConfigs:mockedNetworkResults:useDefaultConfigOnFailure:)","abstract":"
Creates a Configuration with convenience parameters.
","parent_name":"Configuration"},"Structs/Configuration.html#/s:18SwiftLintFramework13ConfigurationV31withPrecomputedCacheDescriptionACyF":{"name":"withPrecomputedCacheDescription()","abstract":"
Returns a copy of the current Configuration with its computedCacheDescription property set to the value of","parent_name":"Configuration"},"Structs/Configuration/IndentationStyle.html":{"name":"IndentationStyle","abstract":"
The style of indentation used in a Swift project.
","parent_name":"Configuration"},"Structs/Configuration.html#/s:18SwiftLintFramework13ConfigurationV13lintableFiles6inPath12forceExclude15excludeByPrefixSayAA0aB4FileCGSS_S2btF":{"name":"lintableFiles(inPath:forceExclude:excludeByPrefix:)","abstract":"
Returns the files that can be linted by SwiftLint in the specified parent path.
","parent_name":"Configuration"},"Structs/Configuration.html#/s:18SwiftLintFramework13ConfigurationV19filterExcludedPaths11fileManager2inSaySSGAA012LintableFileI0_p_AGdtF":{"name":"filterExcludedPaths(fileManager:in:)","abstract":"
Returns an array of file paths after removing the excluded paths as defined by this configuration.
","parent_name":"Configuration"},"Structs/Configuration.html#/s:18SwiftLintFramework13ConfigurationV27filterExcludedPathsByPrefix2inSaySSGAFd_tF":{"name":"filterExcludedPathsByPrefix(in:)","abstract":"
Returns the file paths that are excluded by this configuration using filtering by absolute path prefix.
","parent_name":"Configuration"},"Structs/Configuration.html#/s:18SwiftLintFramework13ConfigurationV13configuration3forAcA0aB4FileC_tF":{"name":"configuration(for:)","abstract":"
Returns a new configuration that applies to the specified file by merging the current configuration with any","parent_name":"Configuration"},"Structs/Configuration.html#/s:18SwiftLintFramework13ConfigurationV4dict8ruleList14enableAllRules9cachePathACSDySSypG_AA04RuleG0VSbSSSgtKcfc":{"name":"init(dict:ruleList:enableAllRules:cachePath:)","abstract":"
Creates a Configuration value based on the specified parameters.
","parent_name":"Configuration"},"Structs/Configuration.html#/s:18SwiftLintFramework13ConfigurationV14configuredRule5forIDAA0F0_pSgSS_tF":{"name":"configuredRule(forID:)","abstract":"
Returns the rule for the specified ID, if configured in this configuration.
","parent_name":"Configuration"},"Structs/Configuration/RulesMode.html":{"name":"RulesMode","abstract":"
Represents how a Configuration object can be configured with regards to rules.
","parent_name":"Configuration"},"Structs/Configuration.html#/s:SH4hash4intoys6HasherVz_tF":{"name":"hash(into:)","parent_name":"Configuration"},"Structs/Configuration.html#/s:SQ2eeoiySbx_xtFZ":{"name":"==(_:_:)","parent_name":"Configuration"},"Structs/Configuration.html#/s:s23CustomStringConvertibleP11descriptionSSvp":{"name":"description","parent_name":"Configuration"},"Structs/RuleListDocumentation.html#/s:18SwiftLintFramework21RuleListDocumentationVyAcA0dE0Vcfc":{"name":"init(_:)","abstract":"
Creates a RuleListDocumentation instance from a RuleList.
","parent_name":"RuleListDocumentation"},"Structs/RuleListDocumentation.html#/s:18SwiftLintFramework21RuleListDocumentationV5write2toy10Foundation3URLV_tKF":{"name":"write(to:)","abstract":"
Write the rule list documentation as markdown files to the specified directory.
","parent_name":"RuleListDocumentation"},"Structs/RuleListDocumentation.html":{"name":"RuleListDocumentation","abstract":"
User-facing documentation for a SwiftLint RuleList.
"},"Structs/Configuration.html":{"name":"Configuration","abstract":"
The configuration struct for SwiftLint. User-defined in the .swiftlint.yml file, drives the behavior of SwiftLint.
"},"Structs/SourceKittenDictionary.html":{"name":"SourceKittenDictionary","abstract":"
A collection of keys and values as parsed out of SourceKit, with many conveniences for accessing SwiftLint-specific"},"Structs/Command.html":{"name":"Command","abstract":"
A SwiftLint-interpretable command to modify SwiftLint’s behavior embedded as comments in source code.
"},"Structs/Example.html":{"name":"Example","abstract":"
Captures code and context information for an example of a triggering or"},"Structs/Linter.html":{"name":"Linter","abstract":"
Represents a file that can be linted for style violations and corrections after being collected.
"},"Structs/CollectedLinter.html":{"name":"CollectedLinter","abstract":"
Represents a file that can compute style violations and corrections for a list of rules.
"},"Structs/Location.html":{"name":"Location","abstract":"
The placement of a segment of Swift in a collection of source files.
"},"Structs/Region.html":{"name":"Region","abstract":"
A contiguous region of Swift source code.
"},"Structs/RuleDescription.html":{"name":"RuleDescription","abstract":"
A detailed description for a SwiftLint rule. Used for both documentation and testing purposes.
"},"Structs/RuleList.html":{"name":"RuleList","abstract":"
A list of available SwiftLint rules.
"},"Structs/RuleParameter.html":{"name":"RuleParameter","abstract":"
A configuration parameter for rules.
"},"Structs/StyleViolation.html":{"name":"StyleViolation","abstract":"
A value describing an instance of Swift source code that is considered invalid by a SwiftLint rule.
"},"Structs/SwiftLintSyntaxMap.html":{"name":"SwiftLintSyntaxMap","abstract":"
Represents a Swift file’s syntax information.
"},"Structs/SwiftLintSyntaxToken.html":{"name":"SwiftLintSyntaxToken","abstract":"
A SwiftLint-aware Swift syntax token.
"},"Structs/SwiftVersion.html":{"name":"SwiftVersion","abstract":"
A value describing the version of the Swift compiler.
"},"Structs/Version.html":{"name":"Version","abstract":"
A type describing the SwiftLint version.
"},"Structs/YamlParser.html":{"name":"YamlParser","abstract":"
An interface for parsing YAML.
"},"Structs/ReasonedRuleViolation.html":{"name":"ReasonedRuleViolation","abstract":"
A violation produced by ViolationsSyntaxVisitor s.
"},"Structs/GitLabJUnitReporter.html":{"name":"GitLabJUnitReporter","abstract":"
Reports violations as JUnit XML supported by GitLab.
"},"Structs/SonarQubeReporter.html":{"name":"SonarQubeReporter","abstract":"
Reports violations in SonarQube import format.
"},"Structs/XcodeReporter.html":{"name":"XcodeReporter","abstract":"
Reports violations in the format Xcode uses to display in the IDE. (default)
"},"Protocols/SwiftSyntaxRule.html#/s:18SwiftLintFramework0A10SyntaxRuleP11makeVisitor4fileAA010ViolationsdG0CAA0aB4FileC_tF":{"name":"makeVisitor(file:)","abstract":"
Produce a ViolationsSyntaxVisitor for the given file.
","parent_name":"SwiftSyntaxRule"},"Protocols/SwiftSyntaxRule.html#/s:18SwiftLintFramework0A10SyntaxRuleP13makeViolation4file9violationAA05StyleG0VAA0aB4FileC_AA08ReasonedeG0VtF":{"name":"makeViolation(file:violation:)","abstract":"
Produce a violation for the given file and absolute position.
","parent_name":"SwiftSyntaxRule"},"Protocols/SwiftSyntaxRule.html#/s:18SwiftLintFramework0A10SyntaxRuleP10preprocess10syntaxTree0aD0010SourceFileD0VSgAH_tF":{"name":"preprocess(syntaxTree:)","abstract":"
Gives a chance for the rule to do some pre-processing on the syntax tree.","parent_name":"SwiftSyntaxRule"},"Protocols/SwiftSyntaxRule.html#/s:18SwiftLintFramework0A10SyntaxRulePAAE15disabledRegions4fileSay0aD011SourceRangeVGAA0aB4FileC_tF":{"name":"disabledRegions(file:)","abstract":"
Returns the source ranges in the specified file where this rule is disabled.
","parent_name":"SwiftSyntaxRule"},"Protocols/SwiftSyntaxRule.html#/s:18SwiftLintFramework4RuleP8validate4fileSayAA14StyleViolationVGAA0aB4FileC_tF":{"name":"validate(file:)","parent_name":"SwiftSyntaxRule"},"Protocols/ViolationsSyntaxRewriter.html#/s:18SwiftLintFramework24ViolationsSyntaxRewriterP19correctionPositionsSay0aE016AbsolutePositionVGvp":{"name":"correctionPositions","abstract":"
Positions in a source file where corrections were applied.
","parent_name":"ViolationsSyntaxRewriter"},"Protocols/SeverityBasedRuleConfiguration.html#/s:18SwiftLintFramework30SeverityBasedRuleConfigurationP08severityG0AA0dG0Vvp":{"name":"severityConfiguration","abstract":"
The configuration of a rule’s severity.
","parent_name":"SeverityBasedRuleConfiguration"},"Protocols/SeverityBasedRuleConfiguration.html#/s:18SwiftLintFramework30SeverityBasedRuleConfigurationPAAE8severityAA09ViolationD0Ovp":{"name":"severity","abstract":"
The severity of a rule.
","parent_name":"SeverityBasedRuleConfiguration"},"Protocols/RuleConfiguration.html#/s:18SwiftLintFramework17RuleConfigurationP18consoleDescriptionSSvp":{"name":"consoleDescription","abstract":"
A human-readable description for this configuration and its applied values.
","parent_name":"RuleConfiguration"},"Protocols/RuleConfiguration.html#/s:18SwiftLintFramework17RuleConfigurationP5apply13configurationyyp_tKF":{"name":"apply(configuration:)","abstract":"
Apply an untyped configuration to the current value.
","parent_name":"RuleConfiguration"},"Protocols/RuleConfiguration.html#/s:18SwiftLintFramework17RuleConfigurationP9isEqualToySbAaB_pF":{"name":"isEqualTo(_:)","abstract":"
Whether the specified configuration is equivalent to the current value.
","parent_name":"RuleConfiguration"},"Protocols/AnalyzerRule.html#/s:18SwiftLintFramework4RuleP8validate4fileSayAA14StyleViolationVGAA0aB4FileC_tF":{"name":"validate(file:)","parent_name":"AnalyzerRule"},"Protocols/Rule.html#/s:18SwiftLintFramework4RuleP11descriptionAA0D11DescriptionVvpZ":{"name":"description","abstract":"
A verbose description of many of this rule’s properties.
","parent_name":"Rule"},"Protocols/Rule.html#/s:18SwiftLintFramework4RuleP24configurationDescriptionSSvp":{"name":"configurationDescription","abstract":"
A description of how this rule has been configured to run.
","parent_name":"Rule"},"Protocols/Rule.html#/s:18SwiftLintFramework4RulePxycfc":{"name":"init()","abstract":"
A default initializer for rules. All rules need to be trivially initializable.
","parent_name":"Rule"},"Protocols/Rule.html#/s:18SwiftLintFramework4RuleP13configurationxyp_tKcfc":{"name":"init(configuration:)","abstract":"
Creates a rule by applying its configuration.
","parent_name":"Rule"},"Protocols/Rule.html#/s:18SwiftLintFramework4RuleP8validate4file17compilerArgumentsSayAA14StyleViolationVGAA0aB4FileC_SaySSGtF":{"name":"validate(file:compilerArguments:)","abstract":"
Executes the rule on a file and returns any violations to the rule’s expectations.
","parent_name":"Rule"},"Protocols/Rule.html#/s:18SwiftLintFramework4RuleP8validate4fileSayAA14StyleViolationVGAA0aB4FileC_tF":{"name":"validate(file:)","abstract":"
Executes the rule on a file and returns any violations to the rule’s expectations.
","parent_name":"Rule"},"Protocols/Rule.html#/s:18SwiftLintFramework4RuleP9isEqualToySbAaB_pF":{"name":"isEqualTo(_:)","abstract":"
Whether or not the specified rule is equivalent to the current rule.
","parent_name":"Rule"},"Protocols/Rule.html#/s:18SwiftLintFramework4RuleP11collectInfo3for4into17compilerArgumentsyAA0aB4FileC_AA0D7StorageCSaySSGtF":{"name":"collectInfo(for:into:compilerArguments:)","abstract":"
Collects information for the specified file in a storage object, to be analyzed by a CollectedLinter .
","parent_name":"Rule"},"Protocols/Rule.html#/s:18SwiftLintFramework4RuleP8validate4file5using17compilerArgumentsSayAA14StyleViolationVGAA0aB4FileC_AA0D7StorageCSaySSGtF":{"name":"validate(file:using:compilerArguments:)","abstract":"
Executes the rule on a file after collecting file info for all files and returns any violations to the rule’s","parent_name":"Rule"},"Protocols/Reporter.html#/s:18SwiftLintFramework8ReporterP10identifierSSvpZ":{"name":"identifier","abstract":"
The unique identifier for this reporter.
","parent_name":"Reporter"},"Protocols/Reporter.html#/s:18SwiftLintFramework8ReporterP10isRealtimeSbvpZ":{"name":"isRealtime","abstract":"
Whether or not this reporter can output incrementally as violations are found or if all violations must be","parent_name":"Reporter"},"Protocols/Reporter.html#/s:18SwiftLintFramework8ReporterP14generateReportySSSayAA14StyleViolationVGFZ":{"name":"generateReport(_:)","abstract":"
Return a string with the report for the specified violations.
","parent_name":"Reporter"},"Protocols/ConfigurationProviderRule.html#/s:18SwiftLintFramework25ConfigurationProviderRuleP0D4TypeQa":{"name":"ConfigurationType","abstract":"
The type of configuration used to configure this rule.
","parent_name":"ConfigurationProviderRule"},"Protocols/ConfigurationProviderRule.html#/s:18SwiftLintFramework25ConfigurationProviderRuleP13configuration0D4TypeQzvp":{"name":"configuration","abstract":"
This rule’s configuration.
","parent_name":"ConfigurationProviderRule"},"Protocols/ConfigurationProviderRule.html#/s:18SwiftLintFramework4RuleP13configurationxyp_tKcfc":{"name":"init(configuration:)","parent_name":"ConfigurationProviderRule"},"Protocols/ConfigurationProviderRule.html#/s:18SwiftLintFramework4RuleP9isEqualToySbAaB_pF":{"name":"isEqualTo(_:)","parent_name":"ConfigurationProviderRule"},"Protocols/ConfigurationProviderRule.html#/s:18SwiftLintFramework4RuleP24configurationDescriptionSSvp":{"name":"configurationDescription","parent_name":"ConfigurationProviderRule"},"Protocols/CollectingRule.html#/s:18SwiftLintFramework14CollectingRuleP8FileInfoQa":{"name":"FileInfo","abstract":"
The kind of information to collect for each file being linted for this rule.
","parent_name":"CollectingRule"},"Protocols/CollectingRule.html#/s:18SwiftLintFramework14CollectingRuleP11collectInfo3for17compilerArguments04FileG0QzAA0abK0C_SaySSGtF":{"name":"collectInfo(for:compilerArguments:)","abstract":"
Collects information for the specified file, to be analyzed by a CollectedLinter .
","parent_name":"CollectingRule"},"Protocols/CollectingRule.html#/s:18SwiftLintFramework14CollectingRuleP11collectInfo3for04FileG0QzAA0abI0C_tF":{"name":"collectInfo(for:)","abstract":"
Collects information for the specified file, to be analyzed by a CollectedLinter .
","parent_name":"CollectingRule"},"Protocols/CollectingRule.html#/s:18SwiftLintFramework14CollectingRuleP8validate4file13collectedInfo17compilerArgumentsSayAA14StyleViolationVGAA0aB4FileC_SDyAL0nI0QzGSaySSGtF":{"name":"validate(file:collectedInfo:compilerArguments:)","abstract":"
Executes the rule on a file after collecting file info for all files and returns any violations to the rule’s","parent_name":"CollectingRule"},"Protocols/CollectingRule.html#/s:18SwiftLintFramework14CollectingRuleP8validate4file13collectedInfoSayAA14StyleViolationVGAA0aB4FileC_SDyAK0lI0QzGtF":{"name":"validate(file:collectedInfo:)","abstract":"
Executes the rule on a file after collecting file info for all files and returns any violations to the rule’s","parent_name":"CollectingRule"},"Protocols/CollectingRule.html#/s:18SwiftLintFramework4RuleP11collectInfo3for4into17compilerArgumentsyAA0aB4FileC_AA0D7StorageCSaySSGtF":{"name":"collectInfo(for:into:compilerArguments:)","parent_name":"CollectingRule"},"Protocols/CollectingRule.html#/s:18SwiftLintFramework4RuleP8validate4file5using17compilerArgumentsSayAA14StyleViolationVGAA0aB4FileC_AA0D7StorageCSaySSGtF":{"name":"validate(file:using:compilerArguments:)","parent_name":"CollectingRule"},"Protocols/CollectingRule.html#/s:18SwiftLintFramework4RuleP8validate4fileSayAA14StyleViolationVGAA0aB4FileC_tF":{"name":"validate(file:)","parent_name":"CollectingRule"},"Protocols/CollectingRule.html#/s:18SwiftLintFramework4RuleP8validate4file17compilerArgumentsSayAA14StyleViolationVGAA0aB4FileC_SaySSGtF":{"name":"validate(file:compilerArguments:)","parent_name":"CollectingRule"},"Protocols/ASTRule.html#/s:18SwiftLintFramework7ASTRuleP8KindTypeQa":{"name":"KindType","abstract":"
The kind of token being recursed over.
","parent_name":"ASTRule"},"Protocols/ASTRule.html#/s:18SwiftLintFramework7ASTRuleP8validate4file4kind10dictionarySayAA14StyleViolationVGAA0aB4FileC_8KindTypeQzAA22SourceKittenDictionaryVtF":{"name":"validate(file:kind:dictionary:)","abstract":"
Executes the rule on a file and a subset of its AST structure, returning any violations to the rule’s","parent_name":"ASTRule"},"Protocols/ASTRule.html#/s:18SwiftLintFramework7ASTRuleP4kind4from8KindTypeQzSgAA22SourceKittenDictionaryV_tF":{"name":"kind(from:)","abstract":"
Get the kind from the specified dictionary.
","parent_name":"ASTRule"},"Protocols/ASTRule.html#/s:18SwiftLintFramework4RuleP8validate4fileSayAA14StyleViolationVGAA0aB4FileC_tF":{"name":"validate(file:)","parent_name":"ASTRule"},"Protocols/ASTRule.html#/s:18SwiftLintFramework7ASTRulePAAE8validate4file10dictionarySayAA14StyleViolationVGAA0aB4FileC_AA22SourceKittenDictionaryVtF":{"name":"validate(file:dictionary:)","abstract":"
Executes the rule on a file and a subset of its AST structure, returning any violations to the rule’s","parent_name":"ASTRule"},"Protocols/LintableFileManager.html#/s:18SwiftLintFramework19LintableFileManagerP07filesToB06inPath13rootDirectorySaySSGSS_SSSgtF":{"name":"filesToLint(inPath:rootDirectory:)","abstract":"
Returns all files that can be linted in the specified path. If the path is relative, it will be appended to the","parent_name":"LintableFileManager"},"Protocols/LintableFileManager.html#/s:18SwiftLintFramework19LintableFileManagerP16modificationDate03forE6AtPath10Foundation0H0VSgSS_tF":{"name":"modificationDate(forFileAtPath:)","abstract":"
Returns the date when the file at the specified path was last modified. Returns nil if the file cannot be","parent_name":"LintableFileManager"},"Protocols/LintableFileManager.html":{"name":"LintableFileManager","abstract":"
An interface for enumerating files that can be linted by SwiftLint.
"},"Protocols/ASTRule.html":{"name":"ASTRule","abstract":"
A rule that leverages the Swift source’s pre-typechecked Abstract Syntax Tree to recurse into the source’s"},"Protocols.html#/s:18SwiftLintFramework17AnyCollectingRuleP":{"name":"AnyCollectingRule","abstract":"
Type-erased protocol used to check whether a rule is collectable.
"},"Protocols/CollectingRule.html":{"name":"CollectingRule","abstract":"
A rule that requires knowledge of all other files being linted.
"},"Protocols/ConfigurationProviderRule.html":{"name":"ConfigurationProviderRule","abstract":"
A rule that is user-configurable.
"},"Protocols/Reporter.html":{"name":"Reporter","abstract":"
An interface for reporting violations as strings.
"},"Protocols/Rule.html":{"name":"Rule","abstract":"
An executable value that can identify issues (violations) in Swift source code.
"},"Protocols.html#/s:18SwiftLintFramework9OptInRuleP":{"name":"OptInRule","abstract":"
A rule that is not enabled by default. Rules conforming to this need to be explicitly enabled by users.
"},"Protocols.html#/s:18SwiftLintFramework17SourceKitFreeRuleP":{"name":"SourceKitFreeRule","abstract":"
A rule that does not need SourceKit to operate and can still operate even after SourceKit has crashed.
"},"Protocols/AnalyzerRule.html":{"name":"AnalyzerRule","abstract":"
A rule that can operate on the post-typechecked AST using compiler arguments. Performs rules that are more like"},"Protocols/RuleConfiguration.html":{"name":"RuleConfiguration","abstract":"
A configuration value for a rule to allow users to modify its behavior.
"},"Protocols/SeverityBasedRuleConfiguration.html":{"name":"SeverityBasedRuleConfiguration","abstract":"
A configuration for a rule that allows to configure at least the severity.
"},"Protocols/ViolationsSyntaxRewriter.html":{"name":"ViolationsSyntaxRewriter","abstract":"
A SwiftSyntax SyntaxRewriter that produces absolute positions where corrections were applied.
"},"Protocols/SwiftSyntaxRule.html":{"name":"SwiftSyntaxRule","abstract":"
A SwiftLint Rule backed by SwiftSyntax that does not use SourceKit requests.
"},"Functions.html#/s:18SwiftLintFramework11queuedPrintyyxlF":{"name":"queuedPrint(_:)","abstract":"
A thread-safe version of Swift’s standard print().
"},"Functions.html#/s:18SwiftLintFramework16queuedPrintErroryySSF":{"name":"queuedPrintError(_:)","abstract":"
A thread-safe, newline-terminated version of fputs(..., stderr).
"},"Functions.html#/s:18SwiftLintFramework16queuedFatalError_4file4lines5NeverOSS_s12StaticStringVSutF":{"name":"queuedFatalError(_:file:line:)","abstract":"
A thread-safe, newline-terminated version of fatalError(...) that doesn’t leak"},"Functions.html#/s:18SwiftLintFramework12reporterFrom10identifierAA8Reporter_pXpSS_tF":{"name":"reporterFrom(identifier:)","abstract":"
Returns the reporter with the specified identifier. Traps if the specified identifier doesn’t correspond to any"},"Extensions/String.html#/s:SS18SwiftLintFrameworkE24absolutePathStandardizedSSyF":{"name":"absolutePathStandardized()","abstract":"
Returns a new string, converting the path to a canonical absolute path.
","parent_name":"String"},"Extensions/String.html#/s:SS18SwiftLintFrameworkE16countOccurrences2ofSiSJ_tF":{"name":"countOccurrences(of:)","abstract":"
Count the number of occurrences of the given character in self
","parent_name":"String"},"Extensions/String.html#/s:SS18SwiftLintFrameworkE4path10relativeToS2S_tF":{"name":"path(relativeTo:)","abstract":"
If self is a path, this method can be used to get a path expression relative to a root directory
","parent_name":"String"},"Extensions/FileManager.html#/s:18SwiftLintFramework19LintableFileManagerP07filesToB06inPath13rootDirectorySaySSGSS_SSSgtF":{"name":"filesToLint(inPath:rootDirectory:)","parent_name":"FileManager"},"Extensions/FileManager.html#/s:18SwiftLintFramework19LintableFileManagerP16modificationDate03forE6AtPath10Foundation0H0VSgSS_tF":{"name":"modificationDate(forFileAtPath:)","parent_name":"FileManager"},"Extensions/FileManager.html":{"name":"FileManager"},"Extensions/String.html":{"name":"String"},"Enums/ViolationSeverity.html#/s:18SwiftLintFramework17ViolationSeverityO7warningyA2CmF":{"name":"warning","abstract":"
Non-fatal. If using SwiftLint as an Xcode build phase, Xcode will mark the build as having succeeded.
","parent_name":"ViolationSeverity"},"Enums/ViolationSeverity.html#/s:18SwiftLintFramework17ViolationSeverityO5erroryA2CmF":{"name":"error","abstract":"
Fatal. If using SwiftLint as an Xcode build phase, Xcode will mark the build as having failed.
","parent_name":"ViolationSeverity"},"Enums/ViolationSeverity.html#/s:SL1loiySbx_xtFZ":{"name":"<(_:_:)","parent_name":"ViolationSeverity"},"Enums/RuleListError.html#/s:18SwiftLintFramework13RuleListErrorO24duplicatedConfigurationsyAcA0D0_pXp_tcACmF":{"name":"duplicatedConfigurations(rule:)","abstract":"
The rule list contains more than one configuration for the specified rule.
","parent_name":"RuleListError"},"Enums/RuleKind.html#/s:18SwiftLintFramework8RuleKindO4lintyA2CmF":{"name":"lint","abstract":"
Describes rules that validate Swift source conventions.
","parent_name":"RuleKind"},"Enums/RuleKind.html#/s:18SwiftLintFramework8RuleKindO9idiomaticyA2CmF":{"name":"idiomatic","abstract":"
Describes rules that validate common practices in the Swift community.
","parent_name":"RuleKind"},"Enums/RuleKind.html#/s:18SwiftLintFramework8RuleKindO5styleyA2CmF":{"name":"style","abstract":"
Describes rules that validate stylistic choices.
","parent_name":"RuleKind"},"Enums/RuleKind.html#/s:18SwiftLintFramework8RuleKindO7metricsyA2CmF":{"name":"metrics","abstract":"
Describes rules that validate magnitudes or measurements of Swift source.
","parent_name":"RuleKind"},"Enums/RuleKind.html#/s:18SwiftLintFramework8RuleKindO11performanceyA2CmF":{"name":"performance","abstract":"
Describes rules that validate that code patterns with poor performance are avoided.
","parent_name":"RuleKind"},"Enums/RuleIdentifier.html#/s:18SwiftLintFramework14RuleIdentifierO3allyA2CmF":{"name":"all","abstract":"
Special identifier that should be treated as referring to ‘all’ SwiftLint rules. One helpful usecase is in","parent_name":"RuleIdentifier"},"Enums/RuleIdentifier.html#/s:18SwiftLintFramework14RuleIdentifierO6singleyACSS_tcACmF":{"name":"single(identifier:)","abstract":"
Represents a single SwiftLint rule with the specified identifier.
","parent_name":"RuleIdentifier"},"Enums/RuleIdentifier.html#/s:18SwiftLintFramework14RuleIdentifierO20stringRepresentationSSvp":{"name":"stringRepresentation","abstract":"
The spelling of the string for this idenfitier.
","parent_name":"RuleIdentifier"},"Enums/RuleIdentifier.html#/s:18SwiftLintFramework14RuleIdentifierOyACSScfc":{"name":"init(_:)","abstract":"
Creates a RuleIdentifier by its string representation.
","parent_name":"RuleIdentifier"},"Enums/RuleIdentifier.html#/s:s26ExpressibleByStringLiteralP06stringD0x0cD4TypeQz_tcfc":{"name":"init(stringLiteral:)","parent_name":"RuleIdentifier"},"Enums/ConfigurationError.html#/s:18SwiftLintFramework18ConfigurationErrorO07unknownD0yA2CmF":{"name":"unknownConfiguration","abstract":"
The configuration didn’t match internal expectations.
","parent_name":"ConfigurationError"},"Enums/ConfigurationError.html#/s:18SwiftLintFramework18ConfigurationErrorO28ambiguousMatchKindParametersyA2CmF":{"name":"ambiguousMatchKindParameters","abstract":"
The configuration had both match_kind and excluded_match_kind parameters.
","parent_name":"ConfigurationError"},"Enums/ConfigurationError.html#/s:18SwiftLintFramework18ConfigurationErrorO7genericyACSScACmF":{"name":"generic(_:)","abstract":"
A generic configuration error specified by a string.
","parent_name":"ConfigurationError"},"Enums/ConfigurationError.html#/s:18SwiftLintFramework18ConfigurationErrorO19initialFileNotFoundyACSS_tcACmF":{"name":"initialFileNotFound(path:)","abstract":"
The initial configuration file was not found.
","parent_name":"ConfigurationError"},"Enums/AccessControlLevel.html#/s:18SwiftLintFramework18AccessControlLevelO7privateyA2CmF":{"name":"private","abstract":"
Accessible by the declaration’s immediate lexical scope.
","parent_name":"AccessControlLevel"},"Enums/AccessControlLevel.html#/s:18SwiftLintFramework18AccessControlLevelO11fileprivateyA2CmF":{"name":"fileprivate","abstract":"
Accessible by the declaration’s same file.
","parent_name":"AccessControlLevel"},"Enums/AccessControlLevel.html#/s:18SwiftLintFramework18AccessControlLevelO8internalyA2CmF":{"name":"internal","abstract":"
Accessible by the declaration’s same module, or modules importing it with the @testable attribute.
","parent_name":"AccessControlLevel"},"Enums/AccessControlLevel.html#/s:18SwiftLintFramework18AccessControlLevelO6publicyA2CmF":{"name":"public","abstract":"
Accessible by the declaration’s same program.
","parent_name":"AccessControlLevel"},"Enums/AccessControlLevel.html#/s:18SwiftLintFramework18AccessControlLevelO4openyA2CmF":{"name":"open","abstract":"
Accessible and customizable (via subclassing or overrides) by the declaration’s same program.
","parent_name":"AccessControlLevel"},"Enums/AccessControlLevel.html#/s:s23CustomStringConvertibleP11descriptionSSvp":{"name":"description","parent_name":"AccessControlLevel"},"Enums/AccessControlLevel.html#/s:SL1loiySbx_xtFZ":{"name":"<(_:_:)","parent_name":"AccessControlLevel"},"Enums/ExecutableInfo.html#/s:18SwiftLintFramework14ExecutableInfoO7buildIDSSSgvpZ":{"name":"buildID","abstract":"
A stable identifier for this executable. Uses the Mach-O header UUID on macOS. Nil on Linux.
","parent_name":"ExecutableInfo"},"Enums/SwiftExpressionKind.html#/s:18SwiftLintFramework0A14ExpressionKindO4callyA2CmF":{"name":"call","abstract":"
A call to a named function or closure.
","parent_name":"SwiftExpressionKind"},"Enums/SwiftExpressionKind.html#/s:18SwiftLintFramework0A14ExpressionKindO8argumentyA2CmF":{"name":"argument","abstract":"
An argument value for a function or closure.
","parent_name":"SwiftExpressionKind"},"Enums/SwiftExpressionKind.html#/s:18SwiftLintFramework0A14ExpressionKindO5arrayyA2CmF":{"name":"array","abstract":"
An Array expression.
","parent_name":"SwiftExpressionKind"},"Enums/SwiftExpressionKind.html#/s:18SwiftLintFramework0A14ExpressionKindO10dictionaryyA2CmF":{"name":"dictionary","abstract":"
A Dictionary expression.
","parent_name":"SwiftExpressionKind"},"Enums/SwiftExpressionKind.html#/s:18SwiftLintFramework0A14ExpressionKindO13objectLiteralyA2CmF":{"name":"objectLiteral","abstract":"
An object literal expression. https://developer.apple.com/swift/blog/?id=33
","parent_name":"SwiftExpressionKind"},"Enums/SwiftExpressionKind.html#/s:18SwiftLintFramework0A14ExpressionKindO7closureyA2CmF":{"name":"closure","abstract":"
A closure expression. https://docs.swift.org/swift-book/LanguageGuide/Closures.html
","parent_name":"SwiftExpressionKind"},"Enums/SwiftExpressionKind.html#/s:18SwiftLintFramework0A14ExpressionKindO5tupleyA2CmF":{"name":"tuple","abstract":"
A tuple expression. https://docs.swift.org/swift-book/ReferenceManual/Types.html#ID448
","parent_name":"SwiftExpressionKind"},"Enums/SwiftExpressionKind.html":{"name":"SwiftExpressionKind","abstract":"
The kind of expression for a contiguous set of Swift source tokens.
"},"Enums/ExecutableInfo.html":{"name":"ExecutableInfo","abstract":"
Information about this executable.
"},"Enums/AccessControlLevel.html":{"name":"AccessControlLevel","abstract":"
The accessibility of a Swift source declaration.
"},"Enums/ConfigurationError.html":{"name":"ConfigurationError","abstract":"
All possible configuration errors.
"},"Enums/RuleIdentifier.html":{"name":"RuleIdentifier","abstract":"
An identifier representing a SwiftLint rule, or all rules.
"},"Enums/RuleKind.html":{"name":"RuleKind","abstract":"
All the possible rule kinds (categories).
"},"Enums/RuleListError.html":{"name":"RuleListError","abstract":"
All possible rule list configuration errors.
"},"Enums/ViolationSeverity.html":{"name":"ViolationSeverity","abstract":"
The magnitude of a StyleViolation .
"},"Global%20Variables.html#/s:18SwiftLintFramework15primaryRuleListAA0eF0Vvp":{"name":"primaryRuleList","abstract":"
The rule list containing all available rules built into SwiftLint.
"},"Classes/ViolationsSyntaxVisitor.html#/s:18SwiftLintFramework23ViolationsSyntaxVisitorC5visity0aE00eF12ContinueKindOAE09ActorDeclE0VF":{"name":"visit(_:)","parent_name":"ViolationsSyntaxVisitor"},"Classes/ViolationsSyntaxVisitor.html#/s:18SwiftLintFramework23ViolationsSyntaxVisitorC5visity0aE00eF12ContinueKindOAE09ClassDeclE0VF":{"name":"visit(_:)","parent_name":"ViolationsSyntaxVisitor"},"Classes/ViolationsSyntaxVisitor.html#/s:18SwiftLintFramework23ViolationsSyntaxVisitorC5visity0aE00eF12ContinueKindOAE08EnumDeclE0VF":{"name":"visit(_:)","parent_name":"ViolationsSyntaxVisitor"},"Classes/ViolationsSyntaxVisitor.html#/s:18SwiftLintFramework23ViolationsSyntaxVisitorC5visity0aE00eF12ContinueKindOAE013ExtensionDeclE0VF":{"name":"visit(_:)","parent_name":"ViolationsSyntaxVisitor"},"Classes/ViolationsSyntaxVisitor.html#/s:18SwiftLintFramework23ViolationsSyntaxVisitorC5visity0aE00eF12ContinueKindOAE012FunctionDeclE0VF":{"name":"visit(_:)","parent_name":"ViolationsSyntaxVisitor"},"Classes/ViolationsSyntaxVisitor.html#/s:18SwiftLintFramework23ViolationsSyntaxVisitorC5visity0aE00eF12ContinueKindOAE012VariableDeclE0VF":{"name":"visit(_:)","parent_name":"ViolationsSyntaxVisitor"},"Classes/ViolationsSyntaxVisitor.html#/s:18SwiftLintFramework23ViolationsSyntaxVisitorC5visity0aE00eF12ContinueKindOAE012ProtocolDeclE0VF":{"name":"visit(_:)","parent_name":"ViolationsSyntaxVisitor"},"Classes/ViolationsSyntaxVisitor.html#/s:18SwiftLintFramework23ViolationsSyntaxVisitorC5visity0aE00eF12ContinueKindOAE010StructDeclE0VF":{"name":"visit(_:)","parent_name":"ViolationsSyntaxVisitor"},"Classes/RuleStorage.html#/s:s23CustomStringConvertibleP11descriptionSSvp":{"name":"description","parent_name":"RuleStorage"},"Classes/RuleStorage.html#/s:18SwiftLintFramework11RuleStorageCACycfc":{"name":"init()","abstract":"
Creates a RuleStorage with no initial stored data.
","parent_name":"RuleStorage"},"Classes/LinterCache.html#/s:18SwiftLintFramework11LinterCacheC13configuration11fileManagerAcA13ConfigurationV_AA012LintableFileH0_ptcfc":{"name":"init(configuration:fileManager:)","abstract":"
Creates a LinterCache by specifying a SwiftLint configuration and a file manager.
","parent_name":"LinterCache"},"Classes/LinterCache.html#/s:18SwiftLintFramework11LinterCacheC4saveyyKF":{"name":"save()","abstract":"
Persists the cache to disk.
","parent_name":"LinterCache"},"Classes/SwiftLintFile.html#/s:18SwiftLintFramework0aB4FileC4fileAC012SourceKittenC00D0C_tcfc":{"name":"init(file:)","abstract":"
Creates a SwiftLintFile with a SourceKitten File.
","parent_name":"SwiftLintFile"},"Classes/SwiftLintFile.html#/s:18SwiftLintFramework0aB4FileC4pathACSgSS_tcfc":{"name":"init(path:)","abstract":"
Creates a SwiftLintFile by specifying its path on disk.","parent_name":"SwiftLintFile"},"Classes/SwiftLintFile.html#/s:18SwiftLintFramework0aB4FileC20pathDeferringReadingACSS_tcfc":{"name":"init(pathDeferringReading:)","abstract":"
Creates a SwiftLintFile by specifying its path on disk. Unlike the SwiftLintFile(path:) initializer, this","parent_name":"SwiftLintFile"},"Classes/SwiftLintFile.html#/s:18SwiftLintFramework0aB4FileC8contentsACSS_tcfc":{"name":"init(contents:)","abstract":"
Creates a SwiftLintFile that is not backed by a file on disk by specifying its contents.
","parent_name":"SwiftLintFile"},"Classes/SwiftLintFile.html#/s:18SwiftLintFramework0aB4FileC4pathSSSgvp":{"name":"path","abstract":"
The path on disk for this file.
","parent_name":"SwiftLintFile"},"Classes/SwiftLintFile.html#/s:18SwiftLintFramework0aB4FileC8contentsSSvp":{"name":"contents","abstract":"
The file’s contents.
","parent_name":"SwiftLintFile"},"Classes/SwiftLintFile.html#/s:18SwiftLintFramework0aB4FileC10stringView012SourceKittenC006StringF0Vvp":{"name":"stringView","abstract":"
A string view into the contents of this file optimized for string manipulation operations.
","parent_name":"SwiftLintFile"},"Classes/SwiftLintFile.html#/s:18SwiftLintFramework0aB4FileC5linesSay012SourceKittenC04LineVGvp":{"name":"lines","abstract":"
The parsed lines for this file’s contents.
","parent_name":"SwiftLintFile"},"Classes/SwiftLintFile.html#/s:18SwiftLintFramework0aB4FileC15invalidateCacheyyF":{"name":"invalidateCache()","abstract":"
Invalidates all cached data for this file.
","parent_name":"SwiftLintFile"},"Classes/SwiftLintFile.html#/s:SQ2eeoiySbx_xtFZ":{"name":"==(_:_:)","parent_name":"SwiftLintFile"},"Classes/SwiftLintFile.html#/s:SH4hash4intoys6HasherVz_tF":{"name":"hash(into:)","parent_name":"SwiftLintFile"},"Classes/SwiftLintFile.html":{"name":"SwiftLintFile","abstract":"
A unit of Swift source code, either on disk or in memory.
"},"Classes/LinterCache.html":{"name":"LinterCache","abstract":"
A persisted cache for storing and retrieving linter results.
"},"Classes/RuleStorage.html":{"name":"RuleStorage","abstract":"
A storage mechanism for aggregating the results of CollectingRule s.
"},"Classes/ViolationsSyntaxVisitor.html":{"name":"ViolationsSyntaxVisitor","abstract":"
A SwiftSyntax SyntaxVisitor that produces absolute positions where violations should be reported.
"},"swift-syntax-dashboard.html":{"name":"Swift Syntax Dashboard"},"accessibility_label_for_image.html":{"name":"accessibility_label_for_image"},"accessibility_trait_for_button.html":{"name":"accessibility_trait_for_button"},"anonymous_argument_in_multiline_closure.html":{"name":"anonymous_argument_in_multiline_closure"},"anyobject_protocol.html":{"name":"anyobject_protocol"},"array_init.html":{"name":"array_init"},"attributes.html":{"name":"attributes"},"balanced_xctest_lifecycle.html":{"name":"balanced_xctest_lifecycle"},"block_based_kvo.html":{"name":"block_based_kvo"},"capture_variable.html":{"name":"capture_variable"},"class_delegate_protocol.html":{"name":"class_delegate_protocol"},"closing_brace.html":{"name":"closing_brace"},"closure_body_length.html":{"name":"closure_body_length"},"closure_end_indentation.html":{"name":"closure_end_indentation"},"closure_parameter_position.html":{"name":"closure_parameter_position"},"closure_spacing.html":{"name":"closure_spacing"},"collection_alignment.html":{"name":"collection_alignment"},"colon.html":{"name":"colon"},"comma.html":{"name":"comma"},"comma_inheritance.html":{"name":"comma_inheritance"},"comment_spacing.html":{"name":"comment_spacing"},"compiler_protocol_init.html":{"name":"compiler_protocol_init"},"computed_accessors_order.html":{"name":"computed_accessors_order"},"conditional_returns_on_newline.html":{"name":"conditional_returns_on_newline"},"contains_over_filter_count.html":{"name":"contains_over_filter_count"},"contains_over_filter_is_empty.html":{"name":"contains_over_filter_is_empty"},"contains_over_first_not_nil.html":{"name":"contains_over_first_not_nil"},"contains_over_range_nil_comparison.html":{"name":"contains_over_range_nil_comparison"},"control_statement.html":{"name":"control_statement"},"convenience_type.html":{"name":"convenience_type"},"custom_rules.html":{"name":"custom_rules"},"cyclomatic_complexity.html":{"name":"cyclomatic_complexity"},"deployment_target.html":{"name":"deployment_target"},"discarded_notification_center_observer.html":{"name":"discarded_notification_center_observer"},"discouraged_assert.html":{"name":"discouraged_assert"},"discouraged_direct_init.html":{"name":"discouraged_direct_init"},"discouraged_none_name.html":{"name":"discouraged_none_name"},"discouraged_object_literal.html":{"name":"discouraged_object_literal"},"discouraged_optional_boolean.html":{"name":"discouraged_optional_boolean"},"discouraged_optional_collection.html":{"name":"discouraged_optional_collection"},"duplicate_enum_cases.html":{"name":"duplicate_enum_cases"},"duplicate_imports.html":{"name":"duplicate_imports"},"duplicated_key_in_dictionary_literal.html":{"name":"duplicated_key_in_dictionary_literal"},"dynamic_inline.html":{"name":"dynamic_inline"},"empty_collection_literal.html":{"name":"empty_collection_literal"},"empty_count.html":{"name":"empty_count"},"empty_enum_arguments.html":{"name":"empty_enum_arguments"},"empty_parameters.html":{"name":"empty_parameters"},"empty_parentheses_with_trailing_closure.html":{"name":"empty_parentheses_with_trailing_closure"},"empty_string.html":{"name":"empty_string"},"empty_xctest_method.html":{"name":"empty_xctest_method"},"enum_case_associated_values_count.html":{"name":"enum_case_associated_values_count"},"expiring_todo.html":{"name":"expiring_todo"},"explicit_acl.html":{"name":"explicit_acl"},"explicit_enum_raw_value.html":{"name":"explicit_enum_raw_value"},"explicit_init.html":{"name":"explicit_init"},"explicit_self.html":{"name":"explicit_self"},"explicit_top_level_acl.html":{"name":"explicit_top_level_acl"},"explicit_type_interface.html":{"name":"explicit_type_interface"},"extension_access_modifier.html":{"name":"extension_access_modifier"},"fallthrough.html":{"name":"fallthrough"},"fatal_error_message.html":{"name":"fatal_error_message"},"file_header.html":{"name":"file_header"},"file_length.html":{"name":"file_length"},"file_name.html":{"name":"file_name"},"file_name_no_space.html":{"name":"file_name_no_space"},"file_types_order.html":{"name":"file_types_order"},"first_where.html":{"name":"first_where"},"flatmap_over_map_reduce.html":{"name":"flatmap_over_map_reduce"},"for_where.html":{"name":"for_where"},"force_cast.html":{"name":"force_cast"},"force_try.html":{"name":"force_try"},"force_unwrapping.html":{"name":"force_unwrapping"},"function_body_length.html":{"name":"function_body_length"},"function_default_parameter_at_end.html":{"name":"function_default_parameter_at_end"},"function_parameter_count.html":{"name":"function_parameter_count"},"generic_type_name.html":{"name":"generic_type_name"},"ibinspectable_in_extension.html":{"name":"ibinspectable_in_extension"},"identical_operands.html":{"name":"identical_operands"},"identifier_name.html":{"name":"identifier_name"},"implicit_getter.html":{"name":"implicit_getter"},"implicit_return.html":{"name":"implicit_return"},"implicitly_unwrapped_optional.html":{"name":"implicitly_unwrapped_optional"},"inclusive_language.html":{"name":"inclusive_language"},"indentation_width.html":{"name":"indentation_width"},"inert_defer.html":{"name":"inert_defer"},"is_disjoint.html":{"name":"is_disjoint"},"joined_default_parameter.html":{"name":"joined_default_parameter"},"large_tuple.html":{"name":"large_tuple"},"last_where.html":{"name":"last_where"},"leading_whitespace.html":{"name":"leading_whitespace"},"legacy_cggeometry_functions.html":{"name":"legacy_cggeometry_functions"},"legacy_constant.html":{"name":"legacy_constant"},"legacy_constructor.html":{"name":"legacy_constructor"},"legacy_hashing.html":{"name":"legacy_hashing"},"legacy_multiple.html":{"name":"legacy_multiple"},"legacy_nsgeometry_functions.html":{"name":"legacy_nsgeometry_functions"},"legacy_objc_type.html":{"name":"legacy_objc_type"},"legacy_random.html":{"name":"legacy_random"},"let_var_whitespace.html":{"name":"let_var_whitespace"},"line_length.html":{"name":"line_length"},"literal_expression_end_indentation.html":{"name":"literal_expression_end_indentation"},"local_doc_comment.html":{"name":"local_doc_comment"},"lower_acl_than_parent.html":{"name":"lower_acl_than_parent"},"mark.html":{"name":"mark"},"missing_docs.html":{"name":"missing_docs"},"modifier_order.html":{"name":"modifier_order"},"multiline_arguments.html":{"name":"multiline_arguments"},"multiline_arguments_brackets.html":{"name":"multiline_arguments_brackets"},"multiline_function_chains.html":{"name":"multiline_function_chains"},"multiline_literal_brackets.html":{"name":"multiline_literal_brackets"},"multiline_parameters.html":{"name":"multiline_parameters"},"multiline_parameters_brackets.html":{"name":"multiline_parameters_brackets"},"multiple_closures_with_trailing_closure.html":{"name":"multiple_closures_with_trailing_closure"},"nesting.html":{"name":"nesting"},"nimble_operator.html":{"name":"nimble_operator"},"no_extension_access_modifier.html":{"name":"no_extension_access_modifier"},"no_fallthrough_only.html":{"name":"no_fallthrough_only"},"no_grouping_extension.html":{"name":"no_grouping_extension"},"no_magic_numbers.html":{"name":"no_magic_numbers"},"no_space_in_method_call.html":{"name":"no_space_in_method_call"},"notification_center_detachment.html":{"name":"notification_center_detachment"},"ns_number_init_as_function_reference.html":{"name":"ns_number_init_as_function_reference"},"nslocalizedstring_key.html":{"name":"nslocalizedstring_key"},"nslocalizedstring_require_bundle.html":{"name":"nslocalizedstring_require_bundle"},"nsobject_prefer_isequal.html":{"name":"nsobject_prefer_isequal"},"number_separator.html":{"name":"number_separator"},"object_literal.html":{"name":"object_literal"},"opening_brace.html":{"name":"opening_brace"},"operator_usage_whitespace.html":{"name":"operator_usage_whitespace"},"operator_whitespace.html":{"name":"operator_whitespace"},"optional_enum_case_matching.html":{"name":"optional_enum_case_matching"},"orphaned_doc_comment.html":{"name":"orphaned_doc_comment"},"overridden_super_call.html":{"name":"overridden_super_call"},"override_in_extension.html":{"name":"override_in_extension"},"pattern_matching_keywords.html":{"name":"pattern_matching_keywords"},"prefer_nimble.html":{"name":"prefer_nimble"},"prefer_self_in_static_references.html":{"name":"prefer_self_in_static_references"},"prefer_self_type_over_type_of_self.html":{"name":"prefer_self_type_over_type_of_self"},"prefer_zero_over_explicit_init.html":{"name":"prefer_zero_over_explicit_init"},"prefixed_toplevel_constant.html":{"name":"prefixed_toplevel_constant"},"private_action.html":{"name":"private_action"},"private_outlet.html":{"name":"private_outlet"},"private_over_fileprivate.html":{"name":"private_over_fileprivate"},"private_subject.html":{"name":"private_subject"},"private_unit_test.html":{"name":"private_unit_test"},"prohibited_interface_builder.html":{"name":"prohibited_interface_builder"},"prohibited_super_call.html":{"name":"prohibited_super_call"},"protocol_property_accessors_order.html":{"name":"protocol_property_accessors_order"},"quick_discouraged_call.html":{"name":"quick_discouraged_call"},"quick_discouraged_focused_test.html":{"name":"quick_discouraged_focused_test"},"quick_discouraged_pending_test.html":{"name":"quick_discouraged_pending_test"},"raw_value_for_camel_cased_codable_enum.html":{"name":"raw_value_for_camel_cased_codable_enum"},"reduce_boolean.html":{"name":"reduce_boolean"},"reduce_into.html":{"name":"reduce_into"},"redundant_discardable_let.html":{"name":"redundant_discardable_let"},"redundant_nil_coalescing.html":{"name":"redundant_nil_coalescing"},"redundant_objc_attribute.html":{"name":"redundant_objc_attribute"},"redundant_optional_initialization.html":{"name":"redundant_optional_initialization"},"redundant_set_access_control.html":{"name":"redundant_set_access_control"},"redundant_string_enum_value.html":{"name":"redundant_string_enum_value"},"redundant_type_annotation.html":{"name":"redundant_type_annotation"},"redundant_void_return.html":{"name":"redundant_void_return"},"required_deinit.html":{"name":"required_deinit"},"required_enum_case.html":{"name":"required_enum_case"},"return_arrow_whitespace.html":{"name":"return_arrow_whitespace"},"return_value_from_void_function.html":{"name":"return_value_from_void_function"},"self_binding.html":{"name":"self_binding"},"self_in_property_initialization.html":{"name":"self_in_property_initialization"},"shorthand_operator.html":{"name":"shorthand_operator"},"shorthand_optional_binding.html":{"name":"shorthand_optional_binding"},"single_test_class.html":{"name":"single_test_class"},"sorted_first_last.html":{"name":"sorted_first_last"},"sorted_imports.html":{"name":"sorted_imports"},"statement_position.html":{"name":"statement_position"},"static_operator.html":{"name":"static_operator"},"strict_fileprivate.html":{"name":"strict_fileprivate"},"strong_iboutlet.html":{"name":"strong_iboutlet"},"superfluous_disable_command.html":{"name":"superfluous_disable_command"},"switch_case_alignment.html":{"name":"switch_case_alignment"},"switch_case_on_newline.html":{"name":"switch_case_on_newline"},"syntactic_sugar.html":{"name":"syntactic_sugar"},"test_case_accessibility.html":{"name":"test_case_accessibility"},"todo.html":{"name":"todo"},"toggle_bool.html":{"name":"toggle_bool"},"trailing_closure.html":{"name":"trailing_closure"},"trailing_comma.html":{"name":"trailing_comma"},"trailing_newline.html":{"name":"trailing_newline"},"trailing_semicolon.html":{"name":"trailing_semicolon"},"trailing_whitespace.html":{"name":"trailing_whitespace"},"type_body_length.html":{"name":"type_body_length"},"type_contents_order.html":{"name":"type_contents_order"},"type_name.html":{"name":"type_name"},"typesafe_array_init.html":{"name":"typesafe_array_init"},"unavailable_condition.html":{"name":"unavailable_condition"},"unavailable_function.html":{"name":"unavailable_function"},"unneeded_break_in_switch.html":{"name":"unneeded_break_in_switch"},"unneeded_parentheses_in_closure_argument.html":{"name":"unneeded_parentheses_in_closure_argument"},"unowned_variable_capture.html":{"name":"unowned_variable_capture"},"untyped_error_in_catch.html":{"name":"untyped_error_in_catch"},"unused_capture_list.html":{"name":"unused_capture_list"},"unused_closure_parameter.html":{"name":"unused_closure_parameter"},"unused_control_flow_label.html":{"name":"unused_control_flow_label"},"unused_declaration.html":{"name":"unused_declaration"},"unused_enumerated.html":{"name":"unused_enumerated"},"unused_import.html":{"name":"unused_import"},"unused_optional_binding.html":{"name":"unused_optional_binding"},"unused_setter_value.html":{"name":"unused_setter_value"},"valid_ibinspectable.html":{"name":"valid_ibinspectable"},"vertical_parameter_alignment.html":{"name":"vertical_parameter_alignment"},"vertical_parameter_alignment_on_call.html":{"name":"vertical_parameter_alignment_on_call"},"vertical_whitespace.html":{"name":"vertical_whitespace"},"vertical_whitespace_between_cases.html":{"name":"vertical_whitespace_between_cases"},"vertical_whitespace_closing_braces.html":{"name":"vertical_whitespace_closing_braces"},"vertical_whitespace_opening_braces.html":{"name":"vertical_whitespace_opening_braces"},"void_function_in_ternary.html":{"name":"void_function_in_ternary"},"void_return.html":{"name":"void_return"},"weak_delegate.html":{"name":"weak_delegate"},"xct_specific_matcher.html":{"name":"xct_specific_matcher"},"xctfail_message.html":{"name":"xctfail_message"},"yoda_condition.html":{"name":"yoda_condition"},"Structs/MarkdownReporter.html#/s:18SwiftLintFramework8ReporterP10identifierSSvpZ":{"name":"identifier","parent_name":"MarkdownReporter"},"Structs/MarkdownReporter.html#/s:18SwiftLintFramework8ReporterP10isRealtimeSbvpZ":{"name":"isRealtime","parent_name":"MarkdownReporter"},"Structs/MarkdownReporter.html#/s:s23CustomStringConvertibleP11descriptionSSvp":{"name":"description","parent_name":"MarkdownReporter"},"Structs/MarkdownReporter.html#/s:18SwiftLintFramework8ReporterP14generateReportySSSayAA14StyleViolationVGFZ":{"name":"generateReport(_:)","parent_name":"MarkdownReporter"},"Structs/JUnitReporter.html#/s:18SwiftLintFramework8ReporterP10identifierSSvpZ":{"name":"identifier","parent_name":"JUnitReporter"},"Structs/JUnitReporter.html#/s:18SwiftLintFramework8ReporterP10isRealtimeSbvpZ":{"name":"isRealtime","parent_name":"JUnitReporter"},"Structs/JUnitReporter.html#/s:s23CustomStringConvertibleP11descriptionSSvp":{"name":"description","parent_name":"JUnitReporter"},"Structs/JUnitReporter.html#/s:18SwiftLintFramework8ReporterP14generateReportySSSayAA14StyleViolationVGFZ":{"name":"generateReport(_:)","parent_name":"JUnitReporter"},"Structs/JSONReporter.html#/s:18SwiftLintFramework8ReporterP10identifierSSvpZ":{"name":"identifier","parent_name":"JSONReporter"},"Structs/JSONReporter.html#/s:18SwiftLintFramework8ReporterP10isRealtimeSbvpZ":{"name":"isRealtime","parent_name":"JSONReporter"},"Structs/JSONReporter.html#/s:s23CustomStringConvertibleP11descriptionSSvp":{"name":"description","parent_name":"JSONReporter"},"Structs/JSONReporter.html#/s:18SwiftLintFramework8ReporterP14generateReportySSSayAA14StyleViolationVGFZ":{"name":"generateReport(_:)","parent_name":"JSONReporter"},"Structs/HTMLReporter.html#/s:18SwiftLintFramework8ReporterP10identifierSSvpZ":{"name":"identifier","parent_name":"HTMLReporter"},"Structs/HTMLReporter.html#/s:18SwiftLintFramework8ReporterP10isRealtimeSbvpZ":{"name":"isRealtime","parent_name":"HTMLReporter"},"Structs/HTMLReporter.html#/s:s23CustomStringConvertibleP11descriptionSSvp":{"name":"description","parent_name":"HTMLReporter"},"Structs/HTMLReporter.html#/s:18SwiftLintFramework8ReporterP14generateReportySSSayAA14StyleViolationVGFZ":{"name":"generateReport(_:)","parent_name":"HTMLReporter"},"Structs/GitHubActionsLoggingReporter.html#/s:18SwiftLintFramework8ReporterP10identifierSSvpZ":{"name":"identifier","parent_name":"GitHubActionsLoggingReporter"},"Structs/GitHubActionsLoggingReporter.html#/s:18SwiftLintFramework8ReporterP10isRealtimeSbvpZ":{"name":"isRealtime","parent_name":"GitHubActionsLoggingReporter"},"Structs/GitHubActionsLoggingReporter.html#/s:s23CustomStringConvertibleP11descriptionSSvp":{"name":"description","parent_name":"GitHubActionsLoggingReporter"},"Structs/GitHubActionsLoggingReporter.html#/s:18SwiftLintFramework8ReporterP14generateReportySSSayAA14StyleViolationVGFZ":{"name":"generateReport(_:)","parent_name":"GitHubActionsLoggingReporter"},"Structs/EmojiReporter.html#/s:18SwiftLintFramework8ReporterP10identifierSSvpZ":{"name":"identifier","parent_name":"EmojiReporter"},"Structs/EmojiReporter.html#/s:18SwiftLintFramework8ReporterP10isRealtimeSbvpZ":{"name":"isRealtime","parent_name":"EmojiReporter"},"Structs/EmojiReporter.html#/s:s23CustomStringConvertibleP11descriptionSSvp":{"name":"description","parent_name":"EmojiReporter"},"Structs/EmojiReporter.html#/s:18SwiftLintFramework8ReporterP14generateReportySSSayAA14StyleViolationVGFZ":{"name":"generateReport(_:)","parent_name":"EmojiReporter"},"Structs/CodeClimateReporter.html#/s:18SwiftLintFramework8ReporterP10identifierSSvpZ":{"name":"identifier","parent_name":"CodeClimateReporter"},"Structs/CodeClimateReporter.html#/s:18SwiftLintFramework8ReporterP10isRealtimeSbvpZ":{"name":"isRealtime","parent_name":"CodeClimateReporter"},"Structs/CodeClimateReporter.html#/s:s23CustomStringConvertibleP11descriptionSSvp":{"name":"description","parent_name":"CodeClimateReporter"},"Structs/CodeClimateReporter.html#/s:18SwiftLintFramework8ReporterP14generateReportySSSayAA14StyleViolationVGFZ":{"name":"generateReport(_:)","parent_name":"CodeClimateReporter"},"Structs/CheckstyleReporter.html#/s:18SwiftLintFramework8ReporterP10identifierSSvpZ":{"name":"identifier","parent_name":"CheckstyleReporter"},"Structs/CheckstyleReporter.html#/s:18SwiftLintFramework8ReporterP10isRealtimeSbvpZ":{"name":"isRealtime","parent_name":"CheckstyleReporter"},"Structs/CheckstyleReporter.html#/s:s23CustomStringConvertibleP11descriptionSSvp":{"name":"description","parent_name":"CheckstyleReporter"},"Structs/CheckstyleReporter.html#/s:18SwiftLintFramework8ReporterP14generateReportySSSayAA14StyleViolationVGFZ":{"name":"generateReport(_:)","parent_name":"CheckstyleReporter"},"Structs/CSVReporter.html#/s:18SwiftLintFramework8ReporterP10identifierSSvpZ":{"name":"identifier","parent_name":"CSVReporter"},"Structs/CSVReporter.html#/s:18SwiftLintFramework8ReporterP10isRealtimeSbvpZ":{"name":"isRealtime","parent_name":"CSVReporter"},"Structs/CSVReporter.html#/s:s23CustomStringConvertibleP11descriptionSSvp":{"name":"description","parent_name":"CSVReporter"},"Structs/CSVReporter.html#/s:18SwiftLintFramework8ReporterP14generateReportySSSayAA14StyleViolationVGFZ":{"name":"generateReport(_:)","parent_name":"CSVReporter"},"Structs/CSVReporter.html":{"name":"CSVReporter","abstract":"
Reports violations as a newline-separated string of comma-separated values (CSV).
"},"Structs/CheckstyleReporter.html":{"name":"CheckstyleReporter","abstract":"
Reports violations as XML conforming to the Checkstyle specification, as defined here:"},"Structs/CodeClimateReporter.html":{"name":"CodeClimateReporter","abstract":"
Reports violations as a JSON array in Code Climate format.
"},"Structs/EmojiReporter.html":{"name":"EmojiReporter","abstract":"
Reports violations in the format that’s both fun and easy to read.
"},"Structs/GitHubActionsLoggingReporter.html":{"name":"GitHubActionsLoggingReporter","abstract":"
Reports violations in the format GitHub-hosted virtual machine for Actions can recognize as messages.
"},"Structs/HTMLReporter.html":{"name":"HTMLReporter","abstract":"
Reports violations as HTML.
"},"Structs/JSONReporter.html":{"name":"JSONReporter","abstract":"
Reports violations as a JSON array.
"},"Structs/JUnitReporter.html":{"name":"JUnitReporter","abstract":"
Reports violations as JUnit XML.
"},"Structs/MarkdownReporter.html":{"name":"MarkdownReporter","abstract":"
Reports violations as markdown formated (with tables).
"},"rule-directory.html":{"name":"Rule Directory"},"Rules.html":{"name":"Rules"},"Reporters.html":{"name":"Reporters"},"Guides.html":{"name":"Guides","abstract":"
The following guides are available globally.
"},"Classes.html":{"name":"Classes","abstract":"
The following classes are available globally.
"},"Global%20Variables.html":{"name":"Global Variables","abstract":"
The following global variables are available globally.
"},"Enums.html":{"name":"Enumerations","abstract":"
The following enumerations are available globally.
"},"Extensions.html":{"name":"Extensions","abstract":"
The following extensions are available globally.
"},"Functions.html":{"name":"Functions","abstract":"
The following functions are available globally.
"},"Protocols.html":{"name":"Protocols","abstract":"
The following protocols are available globally.
"},"Structs.html":{"name":"Structures","abstract":"
The following structures are available globally.
"}}
\ No newline at end of file
diff --git a/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/self_binding.html b/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/self_binding.html
new file mode 100644
index 000000000..877fc8378
--- /dev/null
+++ b/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/self_binding.html
@@ -0,0 +1,372 @@
+
+
+
+
self_binding Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SwiftLintFramework Reference
+
+ self_binding Reference
+
+
+
+
+
+
+
+
+
+
+
+
Self Binding
+
+
Re-bind self to a consistent identifier name.
+
+
+Identifier: self_binding
+Enabled by default: No
+Supports autocorrection: Yes
+Kind: style
+Analyzer rule: No
+Minimum Swift compiler version: 5.0.0
+Default configuration: warning, bindIdentifier: self
+
+
Non Triggering Examples
+
if let self = self { return }
+
+
guard let self = self else else { return }
+
+
if let this = this { return }
+
+
guard let this = this else else { return }
+
+
if let this = self { return }
+
+
guard let this = self else else { return }
+
+
Triggering Examples
+
if let ↓ ` self ` = self { return }
+
+
guard let ↓ ` self ` = self else else { return }
+
+
if let ↓ this = self { return }
+
+
guard let ↓ this = self else else { return }
+
+
if let ↓ self = self { return }
+
+
guard let ↓ self = self else { return }
+
+
if let ↓ self { return }
+
+
guard let ↓ self else { return }
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/self_in_property_initialization.html b/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/self_in_property_initialization.html
new file mode 100644
index 000000000..fde89c849
--- /dev/null
+++ b/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/self_in_property_initialization.html
@@ -0,0 +1,392 @@
+
+
+
+
self_in_property_initialization Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SwiftLintFramework Reference
+
+ self_in_property_initialization Reference
+
+
+
+
+
+
+
+
+
+
+
+
Self in Property Initialization
+
+
self refers to the unapplied NSObject.self() method, which is likely not expected. Make the variable lazy to be able to refer to the current instance or use ClassName.self.
+
+
+Identifier: self_in_property_initialization
+Enabled by default: Yes
+Supports autocorrection: No
+Kind: lint
+Analyzer rule: No
+Minimum Swift compiler version: 5.0.0
+Default configuration: warning
+
+
Non Triggering Examples
+
class View : UIView {
+ let button : UIButton = {
+ return UIButton ()
+ }()
+}
+
+
class View : UIView {
+ lazy var button : UIButton = {
+ let button = UIButton ()
+ button . addTarget ( self , action : #selector( didTapButton ) , for : . touchUpInside )
+ return button
+ }()
+}
+
+
class View : UIView {
+ var button : UIButton = {
+ let button = UIButton ()
+ button . addTarget ( otherObject , action : #selector( didTapButton ) , for : . touchUpInside )
+ return button
+ }()
+}
+
+
class View : UIView {
+ private let collectionView : UICollectionView = {
+ let layout = UICollectionViewFlowLayout ()
+ let collectionView = UICollectionView ( frame : . zero , collectionViewLayout : layout )
+ collectionView . registerReusable ( Cell . self )
+
+ return collectionView
+ }()
+}
+
+
Triggering Examples
+
class View : UIView {
+ ↓ var button : UIButton = {
+ let button = UIButton ()
+ button . addTarget ( self , action : #selector( didTapButton ) , for : . touchUpInside )
+ return button
+ }()
+}
+
+
class View : UIView {
+ ↓ let button : UIButton = {
+ let button = UIButton ()
+ button . addTarget ( self , action : #selector( didTapButton ) , for : . touchUpInside )
+ return button
+ }()
+}
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/shorthand_operator.html b/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/shorthand_operator.html
new file mode 100644
index 000000000..893bb0467
--- /dev/null
+++ b/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/shorthand_operator.html
@@ -0,0 +1,495 @@
+
+
+
+
shorthand_operator Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SwiftLintFramework Reference
+
+ shorthand_operator Reference
+
+
+
+
+
+
+
+
+
+
+
+
Shorthand Operator
+
+
Prefer shorthand operators (+=, -=, *=, /=) over doing the operation and assigning.
+
+
+Identifier: shorthand_operator
+Enabled by default: Yes
+Supports autocorrection: No
+Kind: style
+Analyzer rule: No
+Minimum Swift compiler version: 5.0.0
+Default configuration: error
+
+
Non Triggering Examples
+
foo -= 1
+
+
foo -= variable
+
+
foo -= bar . method ()
+
+
self . foo = foo - 1
+
+
foo = self . foo - 1
+
+
page = ceilf ( currentOffset - pageWidth )
+
+
foo = aMethod ( foo - bar )
+
+
foo = aMethod ( bar - foo )
+
+
public func -= ( lhs : inout Foo , rhs : Int ) {
+ lhs = lhs - rhs
+}
+
+
foo /= 1
+
+
foo /= variable
+
+
foo /= bar . method ()
+
+
self . foo = foo / 1
+
+
foo = self . foo / 1
+
+
page = ceilf ( currentOffset / pageWidth )
+
+
foo = aMethod ( foo / bar )
+
+
foo = aMethod ( bar / foo )
+
+
public func /= ( lhs : inout Foo , rhs : Int ) {
+ lhs = lhs / rhs
+}
+
+
foo += 1
+
+
foo += variable
+
+
foo += bar . method ()
+
+
self . foo = foo + 1
+
+
foo = self . foo + 1
+
+
page = ceilf ( currentOffset + pageWidth )
+
+
foo = aMethod ( foo + bar )
+
+
foo = aMethod ( bar + foo )
+
+
public func += ( lhs : inout Foo , rhs : Int ) {
+ lhs = lhs + rhs
+}
+
+
foo *= 1
+
+
foo *= variable
+
+
foo *= bar . method ()
+
+
self . foo = foo * 1
+
+
foo = self . foo * 1
+
+
page = ceilf ( currentOffset * pageWidth )
+
+
foo = aMethod ( foo * bar )
+
+
foo = aMethod ( bar * foo )
+
+
public func *= ( lhs : inout Foo , rhs : Int ) {
+ lhs = lhs * rhs
+}
+
+
var helloWorld = "world!"
+ helloWorld = "Hello, " + helloWorld
+
+
angle = someCheck ? angle : - angle
+
+
seconds = seconds * 60 + value
+
+
Triggering Examples
+
↓ foo = foo - 1
+
+
+
↓ foo = foo - aVariable
+
+
+
↓ foo = foo - bar . method ()
+
+
+
↓ foo . aProperty = foo . aProperty - 1
+
+
+
↓ self . aProperty = self . aProperty - 1
+
+
+
↓ foo = foo / 1
+
+
+
↓ foo = foo / aVariable
+
+
+
↓ foo = foo / bar . method ()
+
+
+
↓ foo . aProperty = foo . aProperty / 1
+
+
+
↓ self . aProperty = self . aProperty / 1
+
+
+
↓ foo = foo + 1
+
+
+
↓ foo = foo + aVariable
+
+
+
↓ foo = foo + bar . method ()
+
+
+
↓ foo . aProperty = foo . aProperty + 1
+
+
+
↓ self . aProperty = self . aProperty + 1
+
+
+
↓ foo = foo * 1
+
+
+
↓ foo = foo * aVariable
+
+
+
↓ foo = foo * bar . method ()
+
+
+
↓ foo . aProperty = foo . aProperty * 1
+
+
+
↓ self . aProperty = self . aProperty * 1
+
+
+
↓ n = n + i / outputLength
+
+
↓ n = n - i / outputLength
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/shorthand_optional_binding.html b/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/shorthand_optional_binding.html
new file mode 100644
index 000000000..71d68f620
--- /dev/null
+++ b/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/shorthand_optional_binding.html
@@ -0,0 +1,366 @@
+
+
+
+
shorthand_optional_binding Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SwiftLintFramework Reference
+
+ shorthand_optional_binding Reference
+
+
+
+
+
+
+
+
+
+
+
+
Shorthand Optional Binding
+
+
Use shorthand syntax for optional binding
+
+
+Identifier: shorthand_optional_binding
+Enabled by default: No
+Supports autocorrection: Yes
+Kind: idiomatic
+Analyzer rule: No
+Minimum Swift compiler version: 5.7.0
+Default configuration: warning
+
+
Non Triggering Examples
+
if let i {}
+ if let i = a {}
+ guard let i = f () else {}
+ if var i = i () {}
+ if let i = i as? Foo {}
+ guard let ` self ` = self else {}
+ while var i { i = nil }
+
+
Triggering Examples
+
if ↓ let i = i {}
+ if ↓ let self = self {}
+ if ↓ var ` self ` = ` self ` {}
+ if i > 0 , ↓ let j = j {}
+ if ↓ let i = i , ↓ var j = j {}
+
+
guard ↓ let i = i else {}
+ guard ↓ let self = self else {}
+ guard ↓ var ` self ` = ` self ` else {}
+ guard i > 0 , ↓ let j = j else {}
+ guard ↓ let i = i , ↓ var j = j else {}
+
+
while ↓ var i = i { i = nil }
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/single_test_class.html b/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/single_test_class.html
new file mode 100644
index 000000000..5eed2254a
--- /dev/null
+++ b/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/single_test_class.html
@@ -0,0 +1,378 @@
+
+
+
+
single_test_class Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SwiftLintFramework Reference
+
+ single_test_class Reference
+
+
+
+
+
+
+
+
+
+
+
+
Single Test Class
+
+
Test files should contain a single QuickSpec or XCTestCase class.
+
+
+Identifier: single_test_class
+Enabled by default: No
+Supports autocorrection: No
+Kind: style
+Analyzer rule: No
+Minimum Swift compiler version: 5.0.0
+Default configuration: warning, test_parent_classes: [“QuickSpec”, “XCTestCase”]
+
+
Non Triggering Examples
+
class FooTests { }
+
+
+
class FooTests : QuickSpec { }
+
+
+
class FooTests : XCTestCase { }
+
+
+
Triggering Examples
+
↓ class FooTests : QuickSpec { }
+↓ class BarTests : QuickSpec { }
+
+
↓ class FooTests : QuickSpec { }
+↓ class BarTests : QuickSpec { }
+↓ class TotoTests : QuickSpec { }
+
+
↓ class FooTests : XCTestCase { }
+↓ class BarTests : XCTestCase { }
+
+
↓ class FooTests : XCTestCase { }
+↓ class BarTests : XCTestCase { }
+↓ class TotoTests : XCTestCase { }
+
+
↓ class FooTests : QuickSpec { }
+↓ class BarTests : XCTestCase { }
+
+
↓ class FooTests : QuickSpec { }
+↓ class BarTests : XCTestCase { }
+class TotoTests { }
+
+
final ↓ class FooTests : QuickSpec { }
+↓ class BarTests : XCTestCase { }
+class TotoTests { }
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/sorted_first_last.html b/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/sorted_first_last.html
new file mode 100644
index 000000000..44b096ca5
--- /dev/null
+++ b/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/sorted_first_last.html
@@ -0,0 +1,414 @@
+
+
+
+
sorted_first_last Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SwiftLintFramework Reference
+
+ sorted_first_last Reference
+
+
+
+
+
+
+
+
+
+
+
+
Min or Max over Sorted First or Last
+
+
Prefer using min() or max() over sorted().first or sorted().last
+
+
+Identifier: sorted_first_last
+Enabled by default: No
+Supports autocorrection: No
+Kind: performance
+Analyzer rule: No
+Minimum Swift compiler version: 5.0.0
+Default configuration: warning
+
+
Non Triggering Examples
+
let min = myList . min ()
+
+
+
let min = myList . min ( by : { $0 < $1 })
+
+
+
let min = myList . min ( by : > )
+
+
+
let max = myList . max ()
+
+
+
let max = myList . max ( by : { $0 < $1 })
+
+
+
let message = messages . sorted ( byKeyPath : #keyPath( Message.timestamp ) ) . last
+
+
let message = messages . sorted ( byKeyPath : "timestamp" , ascending : false ) . first
+
+
myList . sorted () . firstIndex ( of : key )
+
+
myList . sorted () . lastIndex ( of : key )
+
+
myList . sorted () . firstIndex ( where : someFunction )
+
+
myList . sorted () . lastIndex ( where : someFunction )
+
+
myList . sorted () . firstIndex { $0 == key }
+
+
myList . sorted () . lastIndex { $0 == key }
+
+
Triggering Examples
+
↓ myList . sorted () . first
+
+
+
↓ myList . sorted ( by : { $0 . description < $1 . description }) . first
+
+
+
↓ myList . sorted ( by : > ) . first
+
+
+
↓ myList . map { $0 + 1 } . sorted () . first
+
+
+
↓ myList . sorted ( by : someFunction ) . first
+
+
+
↓ myList . map { $0 + 1 } . sorted { $0 . description < $1 . description } . first
+
+
+
↓ myList . sorted () . last
+
+
+
↓ myList . sorted () . last ? . something ()
+
+
+
↓ myList . sorted ( by : { $0 . description < $1 . description }) . last
+
+
+
↓ myList . map { $0 + 1 } . sorted () . last
+
+
+
↓ myList . sorted ( by : someFunction ) . last
+
+
+
↓ myList . map { $0 + 1 } . sorted { $0 . description < $1 . description } . last
+
+
+
↓ myList . map { $0 + 1 } . sorted { $0 . first < $1 . first } . last
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/sorted_imports.html b/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/sorted_imports.html
new file mode 100644
index 000000000..2a47968a8
--- /dev/null
+++ b/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/sorted_imports.html
@@ -0,0 +1,406 @@
+
+
+
+
sorted_imports Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SwiftLintFramework Reference
+
+ sorted_imports Reference
+
+
+
+
+
+
+
+
+
+
+
+
Sorted Imports
+
+
Imports should be sorted.
+
+
+Identifier: sorted_imports
+Enabled by default: No
+Supports autocorrection: Yes
+Kind: style
+Analyzer rule: No
+Minimum Swift compiler version: 5.0.0
+Default configuration: warning
+
+
Non Triggering Examples
+
import AAA
+import BBB
+import CCC
+import DDD
+
+
import Alamofire
+import API
+
+
import labc
+import Ldef
+
+
import BBB
+// comment
+import AAA
+import CCC
+
+
@testable import AAA
+import CCC
+
+
import AAA
+@testable import CCC
+
+
import EEE . A
+import FFF . B
+#if os(Linux)
+import DDD . A
+import EEE . B
+#else
+import CCC
+import DDD . B
+#endif
+import AAA
+import BBB
+
+
Triggering Examples
+
import AAA
+import ZZZ
+import ↓ BBB
+import CCC
+
+
import DDD
+// comment
+import CCC
+import ↓ AAA
+
+
@testable import CCC
+import ↓ AAA
+
+
import CCC
+@testable import ↓ AAA
+
+
import FFF . B
+import ↓ EEE . A
+#if os(Linux)
+import DDD . A
+import EEE . B
+#else
+import DDD . B
+import ↓ CCC
+#endif
+import AAA
+import BBB
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/statement_position.html b/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/statement_position.html
new file mode 100644
index 000000000..1fb8974c6
--- /dev/null
+++ b/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/statement_position.html
@@ -0,0 +1,372 @@
+
+
+
+
statement_position Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SwiftLintFramework Reference
+
+ statement_position Reference
+
+
+
+
+
+
+
+
+
+
+
+
Statement Position
+
+
Else and catch should be on the same line, one space after the previous declaration.
+
+
+Identifier: statement_position
+Enabled by default: Yes
+Supports autocorrection: Yes
+Kind: style
+Analyzer rule: No
+Minimum Swift compiler version: 5.0.0
+Default configuration: (statement_mode) default, (severity) warning
+
+
Non Triggering Examples
+
} else if {
+
+
} else {
+
+
} catch {
+
+
"}else{"
+
+
struct A { let catchphrase : Int }
+let a = A (
+ catchphrase : 0
+)
+
+
struct A { let ` catch `: Int }
+let a = A (
+ ` catch `: 0
+)
+
+
Triggering Examples
+
↓ } else if {
+
+
↓ } else {
+
+
↓ }
+catch {
+
+
↓ }
+ catch {
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/static_operator.html b/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/static_operator.html
new file mode 100644
index 000000000..e20af9ac7
--- /dev/null
+++ b/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/static_operator.html
@@ -0,0 +1,398 @@
+
+
+
+
static_operator Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SwiftLintFramework Reference
+
+ static_operator Reference
+
+
+
+
+
+
+
+
+
+
+
+
Static Operator
+
+
Operators should be declared as static functions, not free functions.
+
+
+Identifier: static_operator
+Enabled by default: No
+Supports autocorrection: No
+Kind: idiomatic
+Analyzer rule: No
+Minimum Swift compiler version: 5.0.0
+Default configuration: warning
+
+
Non Triggering Examples
+
class A : Equatable {
+ static func == ( lhs : A , rhs : A ) -> Bool {
+ return false
+ }
+
+
class A < T > : Equatable {
+ static func == < T > ( lhs : A < T > , rhs : A < T > ) -> Bool {
+ return false
+ }
+
+
public extension Array where Element == Rule {
+ static func == ( lhs : Array , rhs : Array ) -> Bool {
+ if lhs . count != rhs . count { return false }
+ return ! zip ( lhs , rhs ) . contains { ! $0 . 0 . isEqualTo ( $0 . 1 ) }
+ }
+}
+
+
private extension Optional where Wrapped : Comparable {
+ static func < ( lhs : Optional , rhs : Optional ) -> Bool {
+ switch ( lhs , rhs ) {
+ case let ( lhs ? , rhs ? ):
+ return lhs < rhs
+ case ( nil , _ ?):
+ return true
+ default :
+ return false
+ }
+ }
+}
+
+
Triggering Examples
+
↓ func == ( lhs : A , rhs : A ) -> Bool {
+ return false
+}
+
+
↓ func == < T > ( lhs : A < T > , rhs : A < T > ) -> Bool {
+ return false
+}
+
+
↓ func == ( lhs : [ Rule ], rhs : [ Rule ]) -> Bool {
+ if lhs . count != rhs . count { return false }
+ return ! zip ( lhs , rhs ) . contains { ! $0 . 0 . isEqualTo ( $0 . 1 ) }
+}
+
+
private ↓ func < < T : Comparable > ( lhs : T ?, rhs : T ?) -> Bool {
+ switch ( lhs , rhs ) {
+ case let ( lhs ? , rhs ? ):
+ return lhs < rhs
+ case ( nil , _ ?):
+ return true
+ default :
+ return false
+ }
+}
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/strict_fileprivate.html b/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/strict_fileprivate.html
new file mode 100644
index 000000000..f1ed9e4b4
--- /dev/null
+++ b/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/strict_fileprivate.html
@@ -0,0 +1,382 @@
+
+
+
+
strict_fileprivate Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SwiftLintFramework Reference
+
+ strict_fileprivate Reference
+
+
+
+
+
+
+
+
+
+
+
+
Strict fileprivate
+
+
fileprivate should be avoided.
+
+
+Identifier: strict_fileprivate
+Enabled by default: No
+Supports autocorrection: No
+Kind: idiomatic
+Analyzer rule: No
+Minimum Swift compiler version: 5.0.0
+Default configuration: warning
+
+
Non Triggering Examples
+
extension String {}
+
+
private extension String {}
+
+
public
+extension String {}
+
+
open extension
+ String {}
+
+
internal extension String {}
+
+
Triggering Examples
+
↓ fileprivate extension String {}
+
+
↓ fileprivate
+ extension String {}
+
+
↓ fileprivate extension
+ String {}
+
+
extension String {
+ ↓ fileprivate func Something (){}
+}
+
+
class MyClass {
+ ↓ fileprivate let myInt = 4
+}
+
+
class MyClass {
+ ↓ fileprivate ( set ) var myInt = 4
+}
+
+
struct Outter {
+ struct Inter {
+ ↓ fileprivate struct Inner {}
+ }
+}
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/strong_iboutlet.html b/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/strong_iboutlet.html
new file mode 100644
index 000000000..ad59812f6
--- /dev/null
+++ b/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/strong_iboutlet.html
@@ -0,0 +1,364 @@
+
+
+
+
strong_iboutlet Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SwiftLintFramework Reference
+
+ strong_iboutlet Reference
+
+
+
+
+
+
+
+
+
+
+
+
Strong IBOutlet
+
+
@IBOutlets shouldn’t be declared as weak.
+
+
+Identifier: strong_iboutlet
+Enabled by default: No
+Supports autocorrection: Yes
+Kind: lint
+Analyzer rule: No
+Minimum Swift compiler version: 5.0.0
+Default configuration: warning
+
+
Non Triggering Examples
+
class ViewController : UIViewController {
+ @IBOutlet var label : UILabel ?
+}
+
+
class ViewController : UIViewController {
+ weak var label : UILabel ?
+}
+
+
Triggering Examples
+
class ViewController : UIViewController {
+ @IBOutlet ↓ weak var label : UILabel ?
+}
+
+
class ViewController : UIViewController {
+ @IBOutlet ↓ unowned var label : UILabel !
+}
+
+
class ViewController : UIViewController {
+ @IBOutlet ↓ weak var textField : UITextField ?
+}
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/superfluous_disable_command.html b/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/superfluous_disable_command.html
new file mode 100644
index 000000000..431253af8
--- /dev/null
+++ b/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/superfluous_disable_command.html
@@ -0,0 +1,342 @@
+
+
+
+
superfluous_disable_command Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SwiftLintFramework Reference
+
+ superfluous_disable_command Reference
+
+
+
+
+
+
+
+
+
+
+
+
Superfluous Disable Command
+
+
SwiftLint ‘disable’ commands are superfluous when the disabled rule would not have triggered a violation in the disabled region. Use “ - ” if you wish to document a command.
+
+
+Identifier: superfluous_disable_command
+Enabled by default: Yes
+Supports autocorrection: No
+Kind: lint
+Analyzer rule: No
+Minimum Swift compiler version: 5.0.0
+Default configuration: warning
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/swift-syntax-dashboard.html b/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/swift-syntax-dashboard.html
new file mode 100644
index 000000000..a8c4a53f7
--- /dev/null
+++ b/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/swift-syntax-dashboard.html
@@ -0,0 +1,571 @@
+
+
+
+
Swift Syntax Dashboard Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SwiftLintFramework Reference
+
+ Swift Syntax Dashboard Reference
+
+
+
+
+
+
+
+
+
+
+
+
Swift Syntax Dashboard
+
+
Efforts are actively under way to migrate most rules off SourceKit to use SwiftSyntax instead.
+
+
Rules written using SwiftSyntax tend to be significantly faster and have fewer false positives
+than rules that use SourceKit to get source structure information.
+
+
47 out of 215 (21%)
+of SwiftLint’s linter rules use SourceKit.
+
Rules Using SourceKit
+
Enabled By Default (16)
+
+
+
Opt-In (31)
+
+
+
Rules Not Using SourceKit
+
Enabled By Default (75)
+
+
+
Opt-In (93)
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/switch_case_alignment.html b/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/switch_case_alignment.html
new file mode 100644
index 000000000..5c40e28c0
--- /dev/null
+++ b/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/switch_case_alignment.html
@@ -0,0 +1,420 @@
+
+
+
+
switch_case_alignment Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SwiftLintFramework Reference
+
+ switch_case_alignment Reference
+
+
+
+
+
+
+
+
+
+
+
+
Switch and Case Statement Alignment
+
+
Case statements should vertically align with their enclosing switch statement, or indented if configured otherwise.
+
+
+Identifier: switch_case_alignment
+Enabled by default: Yes
+Supports autocorrection: No
+Kind: style
+Analyzer rule: No
+Minimum Swift compiler version: 5.0.0
+Default configuration: warning, indented_cases: false
+
+
Non Triggering Examples
+
switch someBool {
+case true : // case 1
+ print ( ' red ' )
+case false :
+ /*
+ case 2
+ */
+ if case let . someEnum ( val ) = someFunc () {
+ print ( ' blue ' )
+ }
+}
+enum SomeEnum {
+ case innocent
+}
+
+
if aBool {
+ switch someBool {
+ case true :
+ print ( ' red ' )
+ case false :
+ print ( ' blue ' )
+ }
+}
+
+
switch someInt {
+// comments ignored
+case 0 :
+ // zero case
+ print ( ' Zero ' )
+case 1 :
+ print ( ' One ' )
+default :
+ print ( ' Some other number ' )
+}
+
+
Triggering Examples
+
switch someBool {
+ ↓ case true :
+ print ( "red" )
+ ↓ case false :
+ print ( "blue" )
+}
+
+
if aBool {
+ switch someBool {
+ ↓ case true :
+ print ( ' red ' )
+ ↓ case false :
+ print ( ' blue ' )
+ }
+}
+
+
switch someInt {
+ ↓ case 0 :
+ print ( ' Zero ' )
+ ↓ case 1 :
+ print ( ' One ' )
+ ↓ default :
+ print ( ' Some other number ' )
+}
+
+
switch someBool {
+case true :
+ print ( ' red ' )
+ ↓ case false :
+ print ( ' blue ' )
+}
+
+
if aBool {
+ switch someBool {
+ ↓ case true :
+ print ( ' red ' )
+ case false :
+ print ( ' blue ' )
+ }
+}
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/switch_case_on_newline.html b/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/switch_case_on_newline.html
new file mode 100644
index 000000000..6786256af
--- /dev/null
+++ b/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/switch_case_on_newline.html
@@ -0,0 +1,458 @@
+
+
+
+
switch_case_on_newline Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SwiftLintFramework Reference
+
+ switch_case_on_newline Reference
+
+
+
+
+
+
+
+
+
+
+
+
Switch Case on Newline
+
+
Cases inside a switch should always be on a newline
+
+
+Identifier: switch_case_on_newline
+Enabled by default: No
+Supports autocorrection: No
+Kind: style
+Analyzer rule: No
+Minimum Swift compiler version: 5.0.0
+Default configuration: warning
+
+
Non Triggering Examples
+
/*case 1: */ return true
+
+
//case 1:
+ return true
+
+
let x = [ caseKey : value ]
+
+
let x = [ key : . default ]
+
+
if case let . someEnum ( value ) = aFunction ([ key : 2 ]) { }
+
+
guard case let . someEnum ( value ) = aFunction ([ key : 2 ]) { }
+
+
for case let . someEnum ( value ) = aFunction ([ key : 2 ]) { }
+
+
enum Environment {
+ case development
+}
+
+
enum Environment {
+ case development ( url : URL )
+}
+
+
enum Environment {
+ case development ( url : URL ) // staging
+}
+
+
switch foo {
+ case 1 :
+ return true
+}
+
+
switch foo {
+ default :
+ return true
+}
+
+
switch foo {
+ case let value :
+ return true
+}
+
+
switch foo {
+ case . myCase : // error from network
+ return true
+}
+
+
switch foo {
+ case let . myCase ( value ) where value > 10 :
+ return false
+}
+
+
switch foo {
+ case let . myCase ( value )
+ where value > 10 :
+ return false
+}
+
+
switch foo {
+ case let . myCase ( code : lhsErrorCode , description : _ )
+ where lhsErrorCode > 10 :
+return false
+}
+
+
switch foo {
+ case #selector( aFunction(_:) ) :
+ return false
+
+}
+
+
do {
+ let loadedToken = try tokenManager . decodeToken ( from : response )
+ return loadedToken
+} catch { throw error }
+
+
Triggering Examples
+
switch foo {
+ ↓ case 1 : return true
+}
+
+
switch foo {
+ ↓ case let value : return true
+}
+
+
switch foo {
+ ↓ default : return true
+}
+
+
switch foo {
+ ↓ case "a string" : return false
+}
+
+
switch foo {
+ ↓ case . myCase : return false // error from network
+}
+
+
switch foo {
+ ↓ case let . myCase ( value ) where value > 10 : return false
+}
+
+
switch foo {
+ ↓ case #selector( aFunction(_:) ) : return false
+
+}
+
+
switch foo {
+ ↓ case let . myCase ( value )
+ where value > 10 : return false
+}
+
+
switch foo {
+ ↓ case . first ,
+ . second : return false
+}
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/syntactic_sugar.html b/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/syntactic_sugar.html
new file mode 100644
index 000000000..7df8d27b7
--- /dev/null
+++ b/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/syntactic_sugar.html
@@ -0,0 +1,424 @@
+
+
+
+
syntactic_sugar Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SwiftLintFramework Reference
+
+ syntactic_sugar Reference
+
+
+
+
+
+
+
+
+
+
+
+
Syntactic Sugar
+
+
Shorthand syntactic sugar should be used, i.e. [Int] instead of Array.
+
+
+Identifier: syntactic_sugar
+Enabled by default: Yes
+Supports autocorrection: Yes
+Kind: idiomatic
+Analyzer rule: No
+Minimum Swift compiler version: 5.0.0
+Default configuration: warning
+
+
Non Triggering Examples
+
let x : [ Int ]
+
+
let x : [ Int : String ]
+
+
let x : Int ?
+
+
func x ( a : [ Int ], b : Int ) -> [ Int : Any ]
+
+
let x : Int !
+
+
extension Array {
+ func x () { }
+}
+
+
extension Dictionary {
+ func x () { }
+}
+
+
let x : CustomArray < String >
+
+
var currentIndex : Array < OnboardingPage >. Index ?
+
+
func x ( a : [ Int ], b : Int ) -> Array < Int >. Index
+
+
unsafeBitCast ( nonOptionalT , to : Optional < T >. self )
+
+
unsafeBitCast ( someType , to : Swift . Array < T >. self )
+
+
IndexingIterator < Array < Dictionary < String , AnyObject >>>. self
+
+
let y = Optional < String >. Type
+
+
type is Optional < String >. Type
+
+
let x : Foo . Optional < String >
+
+
let x = case Optional < Any >. none = obj
+
+
let a = Swift . Optional < String ? >. none
+
+
Triggering Examples
+
let x : ↓ Array < String >
+
+
let x : ↓ Dictionary < Int , String >
+
+
let x : ↓ Optional < Int >
+
+
let x : ↓ Swift . Array < String >
+
+
func x ( a : ↓ Array < Int > , b : Int ) -> [ Int : Any ]
+
+
func x ( a : ↓ Swift . Array < Int > , b : Int ) -> [ Int : Any ]
+
+
func x ( a : [ Int ], b : Int ) -> ↓ Dictionary < Int , String >
+
+
let x = y as? ↓ Array < [ String : Any ] >
+
+
let x = Box < Array < T >> ()
+
+
func x () -> Box < ↓ Array < T >>
+
+
func x () -> ↓ Dictionary < String , Any > ?
+
+
typealias Document = ↓ Dictionary < String , T ? >
+
+
func x ( _ y : inout ↓ Array < T > )
+
+
let x : ↓ Dictionary < String , ↓ Dictionary < Int , Int >>
+
+
func x () -> Any { return ↓ Dictionary < Int , String > ()}
+
+
let x = ↓ Array < String >. array ( of : object )
+
+
let x = ↓ Swift . Array < String >. array ( of : object )
+
+
@_specialize ( where S == ↓ Array < Character > )
+public init < S : Sequence > ( _ elements : S )
+
+
let dict : [ String : Any ] = [:]
+_ = dict [ "key" ] as? ↓ Optional < String ? > ?? Optional < String ? >. none
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/test_case_accessibility.html b/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/test_case_accessibility.html
new file mode 100644
index 000000000..beae792c3
--- /dev/null
+++ b/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/test_case_accessibility.html
@@ -0,0 +1,438 @@
+
+
+
+
test_case_accessibility Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SwiftLintFramework Reference
+
+ test_case_accessibility Reference
+
+
+
+
+
+
+
+
+
+
+
+
Test case accessibility
+
+
Test cases should only contain private non-test members.
+
+
+Identifier: test_case_accessibility
+Enabled by default: No
+Supports autocorrection: Yes
+Kind: lint
+Analyzer rule: No
+Minimum Swift compiler version: 5.0.0
+Default configuration: warning, allowed_prefixes: [], test_parent_classes: [“QuickSpec”, “XCTestCase”]
+
+
Non Triggering Examples
+
let foo : String ?
+
+
let foo : String ?
+
+class FooTests : XCTestCase {
+ static let allTests : [ String ] = []
+
+ private let foo : String {
+ let nestedMember = "hi"
+ return nestedMember
+ }
+
+ override static func setUp () {
+ super . setUp ()
+ }
+
+ override func setUp () {
+ super . setUp ()
+ }
+
+ override func setUpWithError () throws {
+ try super . setUpWithError ()
+ }
+
+ override static func tearDown () {
+ super . tearDown ()
+ }
+
+ override func tearDown () {
+ super . tearDown ()
+ }
+
+ override func tearDownWithError () {
+ try super . tearDownWithError ()
+ }
+
+ override func someFutureXCTestFunction () {
+ super . someFutureXCTestFunction ()
+ }
+
+ func testFoo () {
+ XCTAssertTrue ( true )
+ }
+
+ func testBar () {
+ func nestedFunc () {}
+ }
+
+ private someFunc ( hasParam : Bool ) {}
+}
+
+
class FooTests : XCTestCase {
+ private struct MockSomething : Something {}
+}
+
+
class FooTests : XCTestCase {
+ func allowedPrefixTestFoo () {}
+}
+
+
class Foobar {
+ func setUp () {}
+
+ func tearDown () {}
+
+ func testFoo () {}
+}
+
+
Triggering Examples
+
class FooTests : XCTestCase {
+ ↓ typealias Bar = Foo . Bar
+
+ ↓ var foo : String ?
+ ↓ let bar : String ?
+
+ ↓ static func foo () {}
+
+ ↓ func setUp ( withParam : String ) {}
+
+ ↓ func foobar () {}
+
+ ↓ func not_testBar () {}
+
+ ↓ enum Nested {}
+
+ ↓ static func testFoo () {}
+
+ ↓ static func allTests () {}
+
+ ↓ func testFoo ( hasParam : Bool ) {}
+}
+
+final class BarTests : XCTestCase {
+ ↓ class Nested {}
+}
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/todo.html b/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/todo.html
new file mode 100644
index 000000000..38020ab42
--- /dev/null
+++ b/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/todo.html
@@ -0,0 +1,374 @@
+
+
+
+
todo Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SwiftLintFramework Reference
+
+ todo Reference
+
+
+
+
+
+
+
+
+
+
+
+
Todo
+
+
TODOs and FIXMEs should be resolved.
+
+
+Identifier: todo
+Enabled by default: Yes
+Supports autocorrection: No
+Kind: lint
+Analyzer rule: No
+Minimum Swift compiler version: 5.0.0
+Default configuration: warning
+
+
Non Triggering Examples
+
// notaTODO:
+
+
+
// notaFIXME:
+
+
+
Triggering Examples
+
// ↓TODO:
+
+
+
// ↓FIXME:
+
+
+
// ↓TODO(note)
+
+
+
// ↓FIXME(note)
+
+
+
/* ↓FIXME: */
+
+
+
/* ↓TODO: */
+
+
+
/** ↓FIXME: */
+
+
+
/** ↓TODO: */
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/toggle_bool.html b/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/toggle_bool.html
new file mode 100644
index 000000000..5aa60189e
--- /dev/null
+++ b/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/toggle_bool.html
@@ -0,0 +1,368 @@
+
+
+
+
toggle_bool Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SwiftLintFramework Reference
+
+ toggle_bool Reference
+
+
+
+
+
+
+
+
+
+
+
+
Toggle Bool
+
+
Prefer someBool.toggle() over someBool = !someBool.
+
+
+Identifier: toggle_bool
+Enabled by default: No
+Supports autocorrection: Yes
+Kind: idiomatic
+Analyzer rule: No
+Minimum Swift compiler version: 5.0.0
+Default configuration: warning
+
+
Non Triggering Examples
+
isHidden . toggle ()
+
+
+
view . clipsToBounds . toggle ()
+
+
+
func foo () { abc . toggle () }
+
+
view . clipsToBounds = ! clipsToBounds
+
+
+
disconnected = ! connected
+
+
+
result = ! result . toggle ()
+
+
Triggering Examples
+
↓ isHidden = ! isHidden
+
+
+
↓ view . clipsToBounds = ! view . clipsToBounds
+
+
+
func foo () { ↓ abc = ! abc }
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/trailing_closure.html b/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/trailing_closure.html
new file mode 100644
index 000000000..3ab6c1ac0
--- /dev/null
+++ b/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/trailing_closure.html
@@ -0,0 +1,380 @@
+
+
+
+
trailing_closure Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SwiftLintFramework Reference
+
+ trailing_closure Reference
+
+
+
+
+
+
+
+
+
+
+
+
Trailing Closure
+
+
Trailing closure syntax should be used whenever possible.
+
+
+Identifier: trailing_closure
+Enabled by default: No
+Supports autocorrection: No
+Kind: style
+Analyzer rule: No
+Minimum Swift compiler version: 5.0.0
+Default configuration: warning, only_single_muted_parameter: false
+
+
Non Triggering Examples
+
foo . map { $0 + 1 }
+
+
+
foo . bar ()
+
+
+
foo . reduce ( 0 ) { $0 + 1 }
+
+
+
if let foo = bar . map ({ $0 + 1 }) { }
+
+
+
foo . something ( param1 : { $0 }, param2 : { $0 + 1 })
+
+
+
offsets . sorted { $0 . offset < $1 . offset }
+
+
+
foo . something ({ return 1 }())
+
+
foo . something ({ return $0 }( 1 ))
+
+
foo . something ( 0 , { return 1 }())
+
+
Triggering Examples
+
↓ foo . map ({ $0 + 1 })
+
+
+
↓ foo . reduce ( 0 , combine : { $0 + 1 })
+
+
+
↓ offsets . sorted ( by : { $0 . offset < $1 . offset })
+
+
+
↓ foo . something ( 0 , { $0 + 1 })
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/trailing_comma.html b/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/trailing_comma.html
new file mode 100644
index 000000000..d20565865
--- /dev/null
+++ b/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/trailing_comma.html
@@ -0,0 +1,409 @@
+
+
+
+
trailing_comma Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SwiftLintFramework Reference
+
+ trailing_comma Reference
+
+
+
+
+
+
+
+
+
+
+
+
Trailing Comma
+
+
Trailing commas in arrays and dictionaries should be avoided/enforced.
+
+
+Identifier: trailing_comma
+Enabled by default: Yes
+Supports autocorrection: Yes
+Kind: style
+Analyzer rule: No
+Minimum Swift compiler version: 5.0.0
+Default configuration: warning, mandatory_comma: false
+
+
Non Triggering Examples
+
let foo = [ 1 , 2 , 3 ]
+
+
+
let foo = []
+
+
+
let foo = [:]
+
+
+
let foo = [ 1 : 2 , 2 : 3 ]
+
+
+
let foo = [ Void ]()
+
+
+
let example = [ 1 ,
+ 2
+ // 3,
+]
+
+
foo ([ 1 : " \( error ) " ])
+
+
+
let foo = [ Int ]()
+
+
+
Triggering Examples
+
let foo = [ 1 , 2 , 3 ↓ ,]
+
+
+
let foo = [ 1 , 2 , 3 ↓ , ]
+
+
+
let foo = [ 1 , 2 , 3 ↓ ,]
+
+
+
let foo = [ 1 : 2 , 2 : 3 ↓ , ]
+
+
+
struct Bar {
+ let foo = [ 1 : 2 , 2 : 3 ↓ , ]
+}
+
+
+
let foo = [ 1 , 2 , 3 ↓ ,] + [ 4 , 5 , 6 ↓ ,]
+
+
+
let example = [ 1 ,
+2 ↓ ,
+ // 3,
+]
+
+
let foo = [ "אבג" , "αβγ" , "🇺🇸" ↓ ,]
+
+
+
class C {
+ #if true
+ func f () {
+ let foo = [ 1 , 2 , 3 ↓ ,]
+ }
+ #endif
+}
+
+
foo ([ 1 : " \( error ) " ↓ ,])
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/trailing_newline.html b/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/trailing_newline.html
new file mode 100644
index 000000000..ae1ec6400
--- /dev/null
+++ b/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/trailing_newline.html
@@ -0,0 +1,353 @@
+
+
+
+
trailing_newline Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SwiftLintFramework Reference
+
+ trailing_newline Reference
+
+
+
+
+
+
+
+
+
+
+
+
Trailing Newline
+
+
Files should have a single trailing newline.
+
+
+Identifier: trailing_newline
+Enabled by default: Yes
+Supports autocorrection: Yes
+Kind: style
+Analyzer rule: No
+Minimum Swift compiler version: 5.0.0
+Default configuration: warning
+
+
Non Triggering Examples
+
let a = 0
+
+
+
Triggering Examples
+
let a = 0
+
+
let a = 0
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/trailing_semicolon.html b/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/trailing_semicolon.html
new file mode 100644
index 000000000..c1dde716a
--- /dev/null
+++ b/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/trailing_semicolon.html
@@ -0,0 +1,356 @@
+
+
+
+
trailing_semicolon Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SwiftLintFramework Reference
+
+ trailing_semicolon Reference
+
+
+
+
+
+
+
+
+
+
+
+
Trailing Semicolon
+
+
Lines should not have trailing semicolons.
+
+
+Identifier: trailing_semicolon
+Enabled by default: Yes
+Supports autocorrection: Yes
+Kind: idiomatic
+Analyzer rule: No
+Minimum Swift compiler version: 5.0.0
+Default configuration: warning
+
+
Non Triggering Examples
+
let a = 0
+
+
+
let a = 0 ; let b = 0
+
+
Triggering Examples
+
let a = 0 ↓ ;
+
+
+
let a = 0 ↓ ;
+let b = 1
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/trailing_whitespace.html b/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/trailing_whitespace.html
new file mode 100644
index 000000000..5e384d110
--- /dev/null
+++ b/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/trailing_whitespace.html
@@ -0,0 +1,365 @@
+
+
+
+
trailing_whitespace Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SwiftLintFramework Reference
+
+ trailing_whitespace Reference
+
+
+
+
+
+
+
+
+
+
+
+
Trailing Whitespace
+
+
Lines should not have trailing whitespace.
+
+
+Identifier: trailing_whitespace
+Enabled by default: Yes
+Supports autocorrection: Yes
+Kind: style
+Analyzer rule: No
+Minimum Swift compiler version: 5.0.0
+Default configuration: warning, ignores_empty_lines: false, ignores_comments: true
+
+
Non Triggering Examples
+
let name : String
+
+
+
//
+
+
+
//
+
+
+
let name : String //
+
+
+
let name : String //
+
+
+
Triggering Examples
+
let name : String
+
+
+
/* */ let name : String
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/type_body_length.html b/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/type_body_length.html
new file mode 100644
index 000000000..8bef98734
--- /dev/null
+++ b/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/type_body_length.html
@@ -0,0 +1,5444 @@
+
+
+
+
type_body_length Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SwiftLintFramework Reference
+
+ type_body_length Reference
+
+
+
+
+
+
+
+
+
+
+
+
Type Body Length
+
+
Type bodies should not span too many lines.
+
+
+Identifier: type_body_length
+Enabled by default: Yes
+Supports autocorrection: No
+Kind: metrics
+Analyzer rule: No
+Minimum Swift compiler version: 5.0.0
+Default configuration: warning: 250, error: 350
+
+
Non Triggering Examples
+
class Abc {
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+}
+
+
+
class Abc {
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+}
+
+
+
class Abc {
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+}
+
+
+
class Abc {
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+
+/* this is
+a multiline comment
+*/
+}
+
+
+
struct Abc {
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+}
+
+
+
struct Abc {
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+}
+
+
+
struct Abc {
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+}
+
+
+
struct Abc {
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+
+/* this is
+a multiline comment
+*/
+}
+
+
+
enum Abc {
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+}
+
+
+
enum Abc {
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+}
+
+
+
enum Abc {
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+}
+
+
+
enum Abc {
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+
+/* this is
+a multiline comment
+*/
+}
+
+
+
actor Abc {
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+}
+
+
+
actor Abc {
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+}
+
+
+
actor Abc {
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+}
+
+
+
actor Abc {
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+
+/* this is
+a multiline comment
+*/
+}
+
+
+
Triggering Examples
+
↓ class Abc {
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+}
+
+
+
↓ struct Abc {
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+}
+
+
+
↓ enum Abc {
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+}
+
+
+
↓ actor Abc {
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+}
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/type_contents_order.html b/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/type_contents_order.html
new file mode 100644
index 000000000..382700d9c
--- /dev/null
+++ b/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/type_contents_order.html
@@ -0,0 +1,565 @@
+
+
+
+
type_contents_order Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SwiftLintFramework Reference
+
+ type_contents_order Reference
+
+
+
+
+
+
+
+
+
+
+
+
Type Contents Order
+
+
Specifies the order of subtypes, properties, methods & more within a type.
+
+
+Identifier: type_contents_order
+Enabled by default: No
+Supports autocorrection: No
+Kind: style
+Analyzer rule: No
+Minimum Swift compiler version: 5.0.0
+Default configuration: warning, order: [[SwiftLintFramework.TypeContent.case], [SwiftLintFramework.TypeContent.typeAlias, SwiftLintFramework.TypeContent.associatedType], [SwiftLintFramework.TypeContent.subtype], [SwiftLintFramework.TypeContent.typeProperty], [SwiftLintFramework.TypeContent.instanceProperty], [SwiftLintFramework.TypeContent.ibInspectable], [SwiftLintFramework.TypeContent.ibOutlet], [SwiftLintFramework.TypeContent.initializer], [SwiftLintFramework.TypeContent.typeMethod], [SwiftLintFramework.TypeContent.viewLifeCycleMethod], [SwiftLintFramework.TypeContent.ibAction], [SwiftLintFramework.TypeContent.otherMethod], [SwiftLintFramework.TypeContent.subscript], [SwiftLintFramework.TypeContent.deinitializer]]
+
+
Non Triggering Examples
+
class TestViewController : UIViewController {
+ // Type Aliases
+ typealias CompletionHandler = (( TestEnum ) -> Void )
+
+ // Subtypes
+ class TestClass {
+ // 10 lines
+ }
+
+ struct TestStruct {
+ // 3 lines
+ }
+
+ enum TestEnum {
+ // 5 lines
+ }
+
+ // Type Properties
+ static let cellIdentifier : String = "AmazingCell"
+
+ // Instance Properties
+ var shouldLayoutView1 : Bool !
+ weak var delegate : TestViewControllerDelegate ?
+ private var hasLayoutedView1 : Bool = false
+ private var hasLayoutedView2 : Bool = false
+
+ private var hasAnyLayoutedView : Bool {
+ return hasLayoutedView1 || hasLayoutedView2
+ }
+
+ // IBOutlets
+ @IBOutlet private var view1 : UIView !
+ @IBOutlet private var view2 : UIView !
+
+ // Initializers
+ override init ( nibName nibNameOrNil : String ?, bundle nibBundleOrNil : Bundle ?) {
+ super . init ( nibName : nibNameOrNil , bundle : nibBundleOrNil )
+ }
+
+ required init ?( coder aDecoder : NSCoder ) {
+ fatalError ( "init(coder:) has not been implemented" )
+ }
+
+ // Type Methods
+ static func makeViewController () -> TestViewController {
+ // some code
+ }
+
+ // View Life-Cycle Methods
+ override func viewDidLoad () {
+ super . viewDidLoad ()
+
+ view1 . setNeedsLayout ()
+ view1 . layoutIfNeeded ()
+ hasLayoutedView1 = true
+ }
+
+ override func willMove ( toParent parent : UIViewController ?) {
+ super . willMove ( toParent : parent )
+ if parent == nil {
+ viewModel . willMoveToParent ()
+ }
+ }
+
+ override func viewDidLayoutSubviews () {
+ super . viewDidLayoutSubviews ()
+
+ view2 . setNeedsLayout ()
+ view2 . layoutIfNeeded ()
+ hasLayoutedView2 = true
+ }
+
+ // IBActions
+ @IBAction func goNextButtonPressed () {
+ goToNextVc ()
+ delegate ? . didPressTrackedButton ()
+ }
+
+ // Other Methods
+ func goToNextVc () { /* TODO */ }
+
+ func goToInfoVc () { /* TODO */ }
+
+ func goToRandomVc () {
+ let viewCtrl = getRandomVc ()
+ present ( viewCtrl , animated : true )
+ }
+
+ private func getRandomVc () -> UIViewController { return UIViewController () }
+
+ // Subscripts
+ subscript ( _ someIndexThatIsNotEvenUsed : Int ) -> String {
+ get {
+ return "This is just a test"
+ }
+
+ set {
+ log . warning ( "Just a test" , newValue )
+ }
+ }
+
+ deinit {
+ log . debug ( "deinit" )
+ },
+}
+
+
Triggering Examples
+
class TestViewController : UIViewController {
+ // Subtypes
+ ↓ class TestClass {
+ // 10 lines
+ }
+
+ // Type Aliases
+ typealias CompletionHandler = (( TestEnum ) -> Void )
+}
+
+
class TestViewController : UIViewController {
+ // Stored Type Properties
+ ↓ static let cellIdentifier : String = "AmazingCell"
+
+ // Subtypes
+ class TestClass {
+ // 10 lines
+ }
+}
+
+
class TestViewController : UIViewController {
+ // Stored Instance Properties
+ ↓ var shouldLayoutView1 : Bool !
+
+ // Stored Type Properties
+ static let cellIdentifier : String = "AmazingCell"
+}
+
+
class TestViewController : UIViewController {
+ // IBOutlets
+ @IBOutlet private ↓ var view1 : UIView !
+
+ // Computed Instance Properties
+ private var hasAnyLayoutedView : Bool {
+ return hasLayoutedView1 || hasLayoutedView2
+ }
+}
+
+
class TestViewController : UIViewController {
+
+ // deinitializer
+ ↓ deinit {
+ log . debug ( "deinit" )
+ }
+
+ // Initializers
+ override ↓ init ( nibName nibNameOrNil : String ?, bundle nibBundleOrNil : Bundle ?) {
+ super . init ( nibName : nibNameOrNil , bundle : nibBundleOrNil )
+ }
+
+ // IBOutlets
+ @IBOutlet private var view1 : UIView !
+ @IBOutlet private var view2 : UIView !
+}
+
+
class TestViewController : UIViewController {
+ // View Life-Cycle Methods
+ override ↓ func viewDidLoad () {
+ super . viewDidLoad ()
+
+ view1 . setNeedsLayout ()
+ view1 . layoutIfNeeded ()
+ hasLayoutedView1 = true
+ }
+
+ // Type Methods
+ static func makeViewController () -> TestViewController {
+ // some code
+ }
+}
+
+
class TestViewController : UIViewController {
+ // IBActions
+ @IBAction ↓ func goNextButtonPressed () {
+ goToNextVc ()
+ delegate ? . didPressTrackedButton ()
+ }
+
+ // View Life-Cycle Methods
+ override func viewDidLoad () {
+ super . viewDidLoad ()
+
+ view1 . setNeedsLayout ()
+ view1 . layoutIfNeeded ()
+ hasLayoutedView1 = true
+ }
+}
+
+
class TestViewController : UIViewController {
+ // Other Methods
+ ↓ func goToNextVc () { /* TODO */ }
+
+ // IBActions
+ @IBAction func goNextButtonPressed () {
+ goToNextVc ()
+ delegate ? . didPressTrackedButton ()
+ }
+}
+
+
class TestViewController : UIViewController {
+ // Subscripts
+ ↓ subscript ( _ someIndexThatIsNotEvenUsed : Int ) -> String {
+ get {
+ return "This is just a test"
+ }
+
+ set {
+ log . warning ( "Just a test" , newValue )
+ }
+ }
+
+ // MARK: Other Methods
+ func goToNextVc () { /* TODO */ }
+}
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/type_name.html b/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/type_name.html
new file mode 100644
index 000000000..cf9877a2f
--- /dev/null
+++ b/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/type_name.html
@@ -0,0 +1,411 @@
+
+
+
+
type_name Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SwiftLintFramework Reference
+
+ type_name Reference
+
+
+
+
+
+
+
+
+
+
+
+
Type Name
+
+
Type name should only contain alphanumeric characters, start with an uppercase character and span between 3 and 40 characters in length.
+Private types may start with an underscore.
+
+
+Identifier: type_name
+Enabled by default: Yes
+Supports autocorrection: No
+Kind: idiomatic
+Analyzer rule: No
+Minimum Swift compiler version: 5.0.0
+Default configuration: (min_length) w/e: 3/0, (max_length) w/e: 40/1000, excluded: [], allowed_symbols: [], validates_start_with_lowercase: true, validate_protocols: true
+
+
Non Triggering Examples
+
class MyType {}
+
+
private struct _MyType {}
+
+
enum AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA {}
+
+
typealias Foo = Void
+
+
private typealias Foo = Void
+
+
protocol Foo {
+ associatedtype Bar
+}
+
+
protocol Foo {
+ associatedtype Bar : Equatable
+}
+
+
enum MyType {
+case value
+}
+
+
protocol P {}
+
+
struct SomeStruct {
+ enum ` Type ` {
+ case x , y , z
+ }
+}
+
+
Triggering Examples
+
class ↓ myType {}
+
+
enum ↓ _MyType {}
+
+
private struct ↓ MyType_ {}
+
+
struct ↓ My {}
+
+
struct ↓ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA {}
+
+
class ↓ MyView_Previews
+
+
private struct ↓ _MyView_Previews
+
+
typealias ↓ X = Void
+
+
private typealias ↓ Foo_Bar = Void
+
+
private typealias ↓ foo = Void
+
+
typealias ↓ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA = Void
+
+
protocol Foo {
+ associatedtype ↓ X
+}
+
+
protocol Foo {
+ associatedtype ↓ Foo_Bar : Equatable
+}
+
+
protocol Foo {
+ associatedtype ↓ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+}
+
+
protocol ↓ X {}
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/typesafe_array_init.html b/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/typesafe_array_init.html
new file mode 100644
index 000000000..039efa9c1
--- /dev/null
+++ b/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/typesafe_array_init.html
@@ -0,0 +1,372 @@
+
+
+
+
typesafe_array_init Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SwiftLintFramework Reference
+
+ typesafe_array_init Reference
+
+
+
+
+
+
+
+
+
+
+
+
Type-safe Array Init
+
+
Prefer using Array(seq) over seq.map { $0 } to convert a sequence into an Array.
+
+
+Identifier: typesafe_array_init
+Enabled by default: No
+Supports autocorrection: No
+Kind: lint
+Analyzer rule: Yes
+Minimum Swift compiler version: 5.0.0
+Default configuration: warning
+
+
Non Triggering Examples
+
enum MyError : Error {}
+ let myResult : Result < String , MyError > = . success ( "" )
+ let result : Result < Any , MyError > = myResult . map { $0 }
+
+
struct IntArray {
+ let elements = [ 1 , 2 , 3 ]
+ func map < T > ( _ transformer : ( Int ) throws -> T ) rethrows -> [ T ] {
+ try elements . map ( transformer )
+ }
+ }
+ let ints = IntArray ()
+ let intsCopy = ints . map { $0 }
+
+
Triggering Examples
+
func f < Seq : Sequence > ( s : Seq ) -> [ Seq . Element ] {
+ s . ↓ map ({ $0 })
+ }
+
+
func f ( array : [ Int ]) -> [ Int ] {
+ array . ↓ map { $0 }
+ }
+
+
let myInts = [ 1 , 2 , 3 ] . ↓ map { return $0 }
+
+
struct Generator : Sequence , IteratorProtocol {
+ func next () -> Int ? { nil }
+ }
+ let array = Generator () . ↓ map { i in i }
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/unavailable_condition.html b/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/unavailable_condition.html
new file mode 100644
index 000000000..8d0e01035
--- /dev/null
+++ b/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/unavailable_condition.html
@@ -0,0 +1,382 @@
+
+
+
+
unavailable_condition Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SwiftLintFramework Reference
+
+ unavailable_condition Reference
+
+
+
+
+
+
+
+
+
+
+
+
Unavailable Condition
+
+
Use #unavailable/#available instead of #available/#unavailable with an empty body.
+
+
+Identifier: unavailable_condition
+Enabled by default: Yes
+Supports autocorrection: No
+Kind: idiomatic
+Analyzer rule: No
+Minimum Swift compiler version: 5.6.0
+Default configuration: warning
+
+
Non Triggering Examples
+
if # unavailable ( iOS 13 ) {
+ loadMainWindow ()
+}
+
+
if #available(iOS 9.0, *) {
+ doSomething ()
+} else {
+ legacyDoSomething ()
+}
+
+
if #available(macOS 11.0, *) {
+ // Do nothing
+} else if #available(macOS 10.15, *) {
+ print ( "do some stuff" )
+}
+
+
Triggering Examples
+
if ↓ #available(iOS 14.0) {
+
+} else {
+ oldIos13TrackingLogic ( isEnabled : ASIdentifierManager . shared () . isAdvertisingTrackingEnabled )
+}
+
+
if ↓ #available(iOS 14.0) {
+ // we don't need to do anything here
+} else {
+ oldIos13TrackingLogic ( isEnabled : ASIdentifierManager . shared () . isAdvertisingTrackingEnabled )
+}
+
+
if ↓ #available(iOS 13, *) {} else {
+ loadMainWindow ()
+}
+
+
if ↓# unavailable ( iOS 13 ) {
+ // Do nothing
+} else if i < 2 {
+ loadMainWindow ()
+}
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/unavailable_function.html b/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/unavailable_function.html
new file mode 100644
index 000000000..f06b4cc94
--- /dev/null
+++ b/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/unavailable_function.html
@@ -0,0 +1,393 @@
+
+
+
+
unavailable_function Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SwiftLintFramework Reference
+
+ unavailable_function Reference
+
+
+
+
+
+
+
+
+
+
+
+
Unavailable Function
+
+
Unimplemented functions should be marked as unavailable.
+
+
+Identifier: unavailable_function
+Enabled by default: No
+Supports autocorrection: No
+Kind: idiomatic
+Analyzer rule: No
+Minimum Swift compiler version: 5.0.0
+Default configuration: warning
+
+
Non Triggering Examples
+
class ViewController : UIViewController {
+ @available ( * , unavailable )
+ public required init ?( coder aDecoder : NSCoder ) {
+ preconditionFailure ( "init(coder:) has not been implemented" )
+ }
+}
+
+
func jsonValue ( _ jsonString : String ) -> NSObject {
+ let data = jsonString . data ( using : . utf8 ) !
+ let result = try! JSONSerialization . jsonObject ( with : data , options : [])
+ if let dict = ( result as? [ String : Any ])? . bridge () {
+ return dict
+ } else if let array = ( result as? [ Any ])? . bridge () {
+ return array
+ }
+ fatalError ()
+}
+
+
func resetOnboardingStateAndCrash () -> Never {
+ resetUserDefaults ()
+ // Crash the app to re-start the onboarding flow.
+ fatalError ( "Onboarding re-start crash." )
+}
+
+
Triggering Examples
+
class ViewController : UIViewController {
+ public required ↓ init ?( coder aDecoder : NSCoder ) {
+ fatalError ( "init(coder:) has not been implemented" )
+ }
+}
+
+
class ViewController : UIViewController {
+ public required ↓ init ?( coder aDecoder : NSCoder ) {
+ let reason = "init(coder:) has not been implemented"
+ fatalError ( reason )
+ }
+}
+
+
class ViewController : UIViewController {
+ public required ↓ init ?( coder aDecoder : NSCoder ) {
+ preconditionFailure ( "init(coder:) has not been implemented" )
+ }
+}
+
+
↓ func resetOnboardingStateAndCrash () {
+ resetUserDefaults ()
+ // Crash the app to re-start the onboarding flow.
+ fatalError ( "Onboarding re-start crash." )
+}
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/unneeded_break_in_switch.html b/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/unneeded_break_in_switch.html
new file mode 100644
index 000000000..6c221706e
--- /dev/null
+++ b/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/unneeded_break_in_switch.html
@@ -0,0 +1,405 @@
+
+
+
+
unneeded_break_in_switch Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SwiftLintFramework Reference
+
+ unneeded_break_in_switch Reference
+
+
+
+
+
+
+
+
+
+
+
+
Unneeded Break in Switch
+
+
Avoid using unneeded break statements.
+
+
+Identifier: unneeded_break_in_switch
+Enabled by default: Yes
+Supports autocorrection: No
+Kind: idiomatic
+Analyzer rule: No
+Minimum Swift compiler version: 5.0.0
+Default configuration: warning
+
+
Non Triggering Examples
+
switch foo {
+case . bar :
+ break
+}
+
+
switch foo {
+default :
+ break
+}
+
+
switch foo {
+case . bar :
+ for i in [ 0 , 1 , 2 ] { break }
+}
+
+
switch foo {
+case . bar :
+ if true { break }
+}
+
+
switch foo {
+case . bar :
+ something ()
+}
+
+
let items = [ Int ]()
+for item in items {
+ if bar () {
+ do {
+ try foo ()
+ } catch {
+ bar ()
+ break
+ }
+ }
+}
+
+
Triggering Examples
+
switch foo {
+case . bar :
+ something ()
+ ↓ break
+}
+
+
switch foo {
+case . bar :
+ something ()
+ ↓ break // comment
+}
+
+
switch foo {
+default :
+ something ()
+ ↓ break
+}
+
+
switch foo {
+case . foo , . foo2 where condition :
+ something ()
+ ↓ break
+}
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/unneeded_parentheses_in_closure_argument.html b/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/unneeded_parentheses_in_closure_argument.html
new file mode 100644
index 000000000..464a6cab7
--- /dev/null
+++ b/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/unneeded_parentheses_in_closure_argument.html
@@ -0,0 +1,395 @@
+
+
+
+
unneeded_parentheses_in_closure_argument Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SwiftLintFramework Reference
+
+ unneeded_parentheses_in_closure_argument Reference
+
+
+
+
+
+
+
+
+
+
+
+
Unneeded Parentheses in Closure Argument
+
+
Parentheses are not needed when declaring closure arguments.
+
+
+Identifier: unneeded_parentheses_in_closure_argument
+Enabled by default: No
+Supports autocorrection: Yes
+Kind: style
+Analyzer rule: No
+Minimum Swift compiler version: 5.0.0
+Default configuration: warning
+
+
Non Triggering Examples
+
let foo = { ( bar : Int ) in }
+
+
+
let foo = { bar , _ in }
+
+
+
let foo = { bar in }
+
+
+
let foo = { bar -> Bool in return true }
+
+
+
DispatchQueue . main . async { () -> Void in
+ doSomething ()
+}
+
+
Triggering Examples
+
call ( arg : { ↓ ( bar ) in })
+
+
+
call ( arg : { ↓ ( bar , _ ) in })
+
+
+
let foo = { ↓ ( bar ) -> Bool in return true }
+
+
+
foo . map { ( $0 , $0 ) } . forEach { ↓ ( x , y ) in }
+
+
foo . bar { [ weak self ] ↓ ( x , y ) in }
+
+
[] . first { ↓ ( temp ) in
+ [] . first { ↓ ( temp ) in
+ [] . first { ↓ ( temp ) in
+ _ = temp
+ return false
+ }
+ return false
+ }
+ return false
+}
+
+
[] . first { temp in
+ [] . first { ↓ ( temp ) in
+ [] . first { ↓ ( temp ) in
+ _ = temp
+ return false
+ }
+ return false
+ }
+ return false
+}
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/unowned_variable_capture.html b/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/unowned_variable_capture.html
new file mode 100644
index 000000000..8b420ea49
--- /dev/null
+++ b/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/unowned_variable_capture.html
@@ -0,0 +1,362 @@
+
+
+
+
unowned_variable_capture Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SwiftLintFramework Reference
+
+ unowned_variable_capture Reference
+
+
+
+
+
+
+
+
+
+
+
+
Unowned Variable Capture
+
+
Prefer capturing references as weak to avoid potential crashes.
+
+
+Identifier: unowned_variable_capture
+Enabled by default: No
+Supports autocorrection: No
+Kind: lint
+Analyzer rule: No
+Minimum Swift compiler version: 5.0.0
+Default configuration: warning
+
+
Non Triggering Examples
+
foo { [ weak self ] in _ }
+
+
foo { [ weak self ] param in _ }
+
+
foo { [ weak bar ] in _ }
+
+
foo { [ weak bar ] param in _ }
+
+
foo { bar in _ }
+
+
foo { $0 }
+
+
Triggering Examples
+
foo { [ ↓ unowned self ] in _ }
+
+
foo { [ ↓ unowned bar ] in _ }
+
+
foo { [ bar , ↓ unowned self ] in _ }
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/untyped_error_in_catch.html b/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/untyped_error_in_catch.html
new file mode 100644
index 000000000..0e260ab61
--- /dev/null
+++ b/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/untyped_error_in_catch.html
@@ -0,0 +1,399 @@
+
+
+
+
untyped_error_in_catch Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SwiftLintFramework Reference
+
+ untyped_error_in_catch Reference
+
+
+
+
+
+
+
+
+
+
+
+
Untyped Error in Catch
+
+
Catch statements should not declare error variables without type casting.
+
+
+Identifier: untyped_error_in_catch
+Enabled by default: No
+Supports autocorrection: Yes
+Kind: idiomatic
+Analyzer rule: No
+Minimum Swift compiler version: 5.0.0
+Default configuration: warning
+
+
Non Triggering Examples
+
do {
+ try foo ()
+} catch {}
+
+
do {
+ try foo ()
+} catch Error . invalidOperation {
+} catch {}
+
+
do {
+ try foo ()
+} catch let error as MyError {
+} catch {}
+
+
do {
+ try foo ()
+} catch var error as MyError {
+} catch {}
+
+
do {
+ try something ()
+} catch let e where e . code == . fileError {
+ // can be ignored
+} catch {
+ print ( error )
+}
+
+
Triggering Examples
+
do {
+ try foo ()
+} ↓ catch var error {}
+
+
do {
+ try foo ()
+} ↓ catch let error {}
+
+
do {
+ try foo ()
+} ↓ catch let someError {}
+
+
do {
+ try foo ()
+} ↓ catch var someError {}
+
+
do {
+ try foo ()
+} ↓ catch let e {}
+
+
do {
+ try foo ()
+} ↓ catch ( let error ) {}
+
+
do {
+ try foo ()
+} ↓ catch ( let error ) {}
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/unused_capture_list.html b/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/unused_capture_list.html
new file mode 100644
index 000000000..47033fc0d
--- /dev/null
+++ b/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/unused_capture_list.html
@@ -0,0 +1,434 @@
+
+
+
+
unused_capture_list Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SwiftLintFramework Reference
+
+ unused_capture_list Reference
+
+
+
+
+
+
+
+
+
+
+
+
Unused Capture List
+
+
Unused reference in a capture list should be removed.
+
+
+Identifier: unused_capture_list
+Enabled by default: Yes
+Supports autocorrection: No
+Kind: lint
+Analyzer rule: No
+Minimum Swift compiler version: 5.0.0
+Default configuration: warning
+
+
Non Triggering Examples
+
[ 1 , 2 ] . map {
+ [ weak
+ delegate ,
+ unowned
+ self
+ ] num in
+ delegate . handle ( num )
+}
+
+
[ 1 , 2 ] . map { [ weak self ] num in
+ self ? . handle ( num )
+}
+
+
let failure : Failure = { [ weak self , unowned delegate = self . delegate ! ] foo in
+ delegate . handle ( foo , self )
+}
+
+
numbers . forEach ({
+ [ weak handler ] in
+ handler ? . handle ( $0 )
+})
+
+
withEnvironment ( apiService : MockService ( fetchProjectResponse : project )) {
+ [ Device . phone4_7inch , Device . phone5_8inch , Device . pad ] . forEach { device in
+ device . handle ()
+ }
+}
+
+
{ [ foo ] _ in foo . bar () }()
+
+
sizes . max () . flatMap { [( offset : offset , size : $0 )] } ?? []
+
+
[ 1 , 2 ] . map { [ self ] num in
+ handle ( num )
+}
+
+
[ 1 , 2 ] . map { [ unowned self ] num in
+ handle ( num )
+}
+
+
[ 1 , 2 ] . map { [ self , unowned delegate = self . delegate ! ] num in
+ delegate . handle ( num )
+}
+
+
[ 1 , 2 ] . map { [ unowned self , unowned delegate = self . delegate ! ] num in
+ delegate . handle ( num )
+}
+
+
[ 1 , 2 ] . map {
+ [ weak
+ delegate ,
+ self
+ ] num in
+ delegate . handle ( num )
+}
+
+
rx . onViewDidAppear . subscribe ( onNext : { [ unowned self ] in
+ doSomething ()
+}) . disposed ( by : disposeBag )
+
+
Triggering Examples
+
[ 1 , 2 ] . map { [ ↓ weak self ] num in
+ print ( num )
+}
+
+
let failure : Failure = { [ weak self , ↓ unowned delegate = self . delegate ! ] foo in
+ self ? . handle ( foo )
+}
+
+
let failure : Failure = { [ ↓ weak self , ↓ unowned delegate = self . delegate ! ] foo in
+ print ( foo )
+}
+
+
numbers . forEach ({
+ [ weak handler ] in
+ print ( $0 )
+})
+
+
numbers . forEach ({
+ [ self , ↓ weak handler ] in
+ print ( $0 )
+})
+
+
withEnvironment ( apiService : MockService ( fetchProjectResponse : project )) { [ ↓ foo ] in
+ [ Device . phone4_7inch , Device . phone5_8inch , Device . pad ] . forEach { device in
+ device . handle ()
+ }
+}
+
+
{ [ ↓ foo ] in _ }()
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/unused_closure_parameter.html b/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/unused_closure_parameter.html
new file mode 100644
index 000000000..33d1e43a6
--- /dev/null
+++ b/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/unused_closure_parameter.html
@@ -0,0 +1,482 @@
+
+
+
+
unused_closure_parameter Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SwiftLintFramework Reference
+
+ unused_closure_parameter Reference
+
+
+
+
+
+
+
+
+
+
+
+
Unused Closure Parameter
+
+
Unused parameter in a closure should be replaced with _.
+
+
+Identifier: unused_closure_parameter
+Enabled by default: Yes
+Supports autocorrection: Yes
+Kind: lint
+Analyzer rule: No
+Minimum Swift compiler version: 5.0.0
+Default configuration: warning
+
+
Non Triggering Examples
+
[ 1 , 2 ] . map { $0 + 1 }
+
+
+
[ 1 , 2 ] . map ({ $0 + 1 })
+
+
+
[ 1 , 2 ] . map { number in
+ number + 1
+}
+
+
+
[ 1 , 2 ] . map { _ in
+ 3
+}
+
+
+
[ 1 , 2 ] . something { number , idx in
+ return number * idx
+}
+
+
+
let isEmpty = [ 1 , 2 ] . isEmpty ()
+
+
+
violations . sorted ( by : { lhs , rhs in
+ return lhs . location > rhs . location
+})
+
+
+
rlmConfiguration . migrationBlock . map { rlmMigration in
+return { migration , schemaVersion in
+rlmMigration ( migration . rlmMigration , schemaVersion )
+}
+}
+
+
genericsFunc { ( a : Type , b ) in
+a + b
+}
+
+
+
var label : UILabel = { ( lbl : UILabel ) -> UILabel in
+ lbl . backgroundColor = . red
+ return lbl
+}( UILabel ())
+
+
+
hoge ( arg : num ) { num in
+ return num
+}
+
+
+
({ ( manager : FileManager ) in
+ print ( manager )
+})( FileManager . default )
+
+
withPostSideEffect { input in
+ if true { print ( " \( input ) " ) }
+}
+
+
viewModel ? . profileImage . didSet ( weak : self ) { ( self , profileImage ) in
+ self . profileImageView . image = profileImage
+}
+
+
let failure : Failure = { task , error in
+ observer . sendFailed ( error , task )
+}
+
+
List ( $ names ) { $ name in
+ Text ( name )
+}
+
+
List ( $ names ) { $ name in
+ TextField ( $ name )
+}
+
+
_ = [ "a" ] . filter { ` class ` in ` class ` . hasPrefix ( "a" ) }
+
+
let closure : ( Int ) -> Void = { ` foo ` in _ = foo }
+
+
let closure : ( Int ) -> Void = { foo in _ = ` foo ` }
+
+
Triggering Examples
+
[ 1 , 2 ] . map { ↓ number in
+ return 3
+}
+
+
+
[ 1 , 2 ] . map { ↓ number in
+ return numberWithSuffix
+}
+
+
+
[ 1 , 2 ] . map { ↓ number in
+ return 3 // number
+}
+
+
+
[ 1 , 2 ] . map { ↓ number in
+ return 3 "number"
+}
+
+
+
[ 1 , 2 ] . something { number , ↓ idx in
+ return number
+}
+
+
+
genericsFunc { ( ↓ number : TypeA , idx : TypeB ) in return idx
+}
+
+
+
hoge ( arg : num ) { ↓ num in
+}
+
+
+
fooFunc { ↓ 아 in
+ }
+
+
func foo () {
+ bar { ↓ number in
+ return 3
+}
+
+
+
viewModel ? . profileImage . didSet ( weak : self ) { ( ↓ self , profileImage ) in
+ profileImageView . image = profileImage
+}
+
+
let failure : Failure = { ↓ task , error in
+ observer . sendFailed ( error )
+}
+
+
List ( $ names ) { ↓$ name in
+ Text ( "Foo" )
+}
+
+
let class1 = "a"
+_ = [ "a" ] . filter { ↓ ` class ` in ` class1 ` . hasPrefix ( "a" ) }
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/unused_control_flow_label.html b/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/unused_control_flow_label.html
new file mode 100644
index 000000000..4d4aa76dc
--- /dev/null
+++ b/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/unused_control_flow_label.html
@@ -0,0 +1,387 @@
+
+
+
+
unused_control_flow_label Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SwiftLintFramework Reference
+
+ unused_control_flow_label Reference
+
+
+
+
+
+
+
+
+
+
+
+
Unused Control Flow Label
+
+
Unused control flow label should be removed.
+
+
+Identifier: unused_control_flow_label
+Enabled by default: Yes
+Supports autocorrection: Yes
+Kind: lint
+Analyzer rule: No
+Minimum Swift compiler version: 5.0.0
+Default configuration: warning
+
+
Non Triggering Examples
+
loop : while true { break loop }
+
+
loop : while true { continue loop }
+
+
loop :
+ while true { break loop }
+
+
while true { break }
+
+
loop : for x in array { break loop }
+
+
label : switch number {
+case 1 : print ( "1" )
+case 2 : print ( "2" )
+default : break label
+}
+
+
loop : repeat {
+ if x == 10 {
+ break loop
+ }
+} while true
+
+
Triggering Examples
+
↓ loop : while true { break }
+
+
↓ loop : while true { break loop1 }
+
+
↓ loop : while true { break outerLoop }
+
+
↓ loop : for x in array { break }
+
+
↓ label : switch number {
+case 1 : print ( "1" )
+case 2 : print ( "2" )
+default : break
+}
+
+
↓ loop : repeat {
+ if x == 10 {
+ break
+ }
+} while true
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/unused_declaration.html b/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/unused_declaration.html
new file mode 100644
index 000000000..b615776ff
--- /dev/null
+++ b/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/unused_declaration.html
@@ -0,0 +1,604 @@
+
+
+
+
unused_declaration Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SwiftLintFramework Reference
+
+ unused_declaration Reference
+
+
+
+
+
+
+
+
+
+
+
+
Unused Declaration
+
+
Declarations should be referenced at least once within all files linted.
+
+
+Identifier: unused_declaration
+Enabled by default: No
+Supports autocorrection: No
+Kind: lint
+Analyzer rule: Yes
+Minimum Swift compiler version: 5.0.0
+Default configuration: severity: error, include_public_and_open: false, related_usrs_to_skip: [“s:7SwiftUI15PreviewProviderP”]
+
+
Non Triggering Examples
+
let kConstant = 0
+_ = kConstant
+
+
enum Change < T > {
+ case insert ( T )
+ case delete ( T )
+}
+
+extension Sequence {
+ func deletes < T > () -> [ T ] where Element == Change < T > {
+ return compactMap { operation in
+ if case . delete ( let value ) = operation {
+ return value
+ } else {
+ return nil
+ }
+ }
+ }
+}
+
+let changes = [ Change . insert ( 0 ), . delete ( 0 )]
+_ = changes . deletes ()
+
+
struct Item : Codable {}
+struct ResponseModel : Codable {
+ let items : [ Item ]
+
+ enum CodingKeys : String , CodingKey {
+ case items = "ResponseItems"
+ }
+}
+
+_ = ResponseModel ( items : [ Item ()]) . items
+
+
class ResponseModel {
+ @objc func foo () {
+ }
+}
+_ = ResponseModel ()
+
+
public func foo () {}
+
+
protocol Foo {}
+
+extension Foo {
+ func bar () {}
+}
+
+struct MyStruct : Foo {}
+MyStruct () . bar ()
+
+
import XCTest
+class MyTests : XCTestCase {
+ func testExample () {}
+}
+
+
import XCTest
+open class BestTestCase : XCTestCase {}
+class MyTests : BestTestCase {
+ func testExample () {}
+}
+
+
enum Component {
+ case string ( StaticString )
+ indirect case array ([ Component ])
+ indirect case optional ( Component ?)
+}
+
+@resultBuilder
+struct ComponentBuilder {
+ static func buildBlock ( _ components : Component ... ) -> Component {
+ return . array ( components )
+ }
+
+ static func buildExpression ( _ string : StaticString ) -> Component {
+ return . string ( string )
+ }
+
+ static func buildOptional ( _ component : Component ?) -> Component {
+ return . optional ( component )
+ }
+
+ static func buildEither ( first component : Component ) -> Component {
+ return component
+ }
+
+ static func buildEither ( second component : Component ) -> Component {
+ return component
+ }
+
+ static func buildArray ( _ components : [ Component ]) -> Component {
+ return . array ( components )
+ }
+
+ static func buildLimitedAvailability ( _ component : Component ) -> Component {
+ return component
+ }
+
+ static func buildFinalResult ( _ component : Component ) -> Component {
+ return component
+ }
+
+ static func buildPartialBlock ( first component : Component ) -> Component {
+ return component
+ }
+
+ static func buildPartialBlock ( accumulated component : Component , next : Component ) -> Component {
+ return component
+ }
+}
+
+func acceptComponentBuilder ( @ComponentBuilder _ body : () -> Component ) {
+ print ( body ())
+}
+
+acceptComponentBuilder {
+ "hello"
+}
+
+
import Cocoa
+
+@NSApplicationMain
+final class AppDelegate : NSObject , NSApplicationDelegate {
+ func applicationWillFinishLaunching ( _ notification : Notification ) {}
+ func applicationWillBecomeActive ( _ notification : Notification ) {}
+}
+
+
import Foundation
+
+public final class Foo : NSObject {
+ @IBAction private func foo () {}
+}
+
+
import Foundation
+
+public final class Foo : NSObject {
+ @objc func foo () {}
+}
+
+
import Foundation
+
+public final class Foo : NSObject {
+ @IBInspectable private var innerPaddingWidth : Int {
+ set { self . backgroundView . innerPaddingWidth = newValue }
+ get { return self . backgroundView . innerPaddingWidth }
+ }
+}
+
+
import Foundation
+
+public final class Foo : NSObject {
+ @IBOutlet private var bar : NSObject ! {
+ set { fatalError () }
+ get { fatalError () }
+ }
+
+ @IBOutlet private var baz : NSObject ! {
+ willSet { print ( "willSet" ) }
+ }
+
+ @IBOutlet private var buzz : NSObject ! {
+ didSet { print ( "didSet" ) }
+ }
+}
+
+
Triggering Examples
+
let ↓ kConstant = 0
+
+
struct Item {}
+struct ↓ ResponseModel : Codable {
+ let ↓ items : [ Item ]
+
+ enum ↓ CodingKeys : String {
+ case items = "ResponseItems"
+ }
+}
+
+
class ↓ ResponseModel {
+ func ↓ foo () {
+ }
+}
+
+
public func ↓ foo () {}
+
+
protocol Foo {
+ func ↓ bar1 ()
+}
+
+extension Foo {
+ func bar1 () {}
+ func ↓ bar2 () {}
+}
+
+struct MyStruct : Foo {}
+_ = MyStruct ()
+
+
import XCTest
+class ↓ MyTests : NSObject {
+ func ↓ testExample () {}
+}
+
+
enum Component {
+ case string ( StaticString )
+ indirect case array ([ Component ])
+ indirect case optional ( Component ?)
+}
+
+struct ComponentBuilder {
+ func ↓ buildExpression ( _ string : StaticString ) -> Component {
+ return . string ( string )
+ }
+
+ func ↓ buildBlock ( _ components : Component ... ) -> Component {
+ return . array ( components )
+ }
+
+ func ↓ buildIf ( _ value : Component ?) -> Component {
+ return . optional ( value )
+ }
+
+ static func ↓ buildABear ( _ components : Component ... ) -> Component {
+ return . array ( components )
+ }
+}
+
+_ = ComponentBuilder ()
+
+
import Cocoa
+
+@NSApplicationMain
+final class AppDelegate : NSObject , NSApplicationDelegate {
+ func ↓ appWillFinishLaunching ( _ notification : Notification ) {}
+ func applicationWillBecomeActive ( _ notification : Notification ) {}
+}
+
+
import Cocoa
+
+final class ↓ AppDelegate : NSObject , NSApplicationDelegate {
+ func applicationWillFinishLaunching ( _ notification : Notification ) {}
+ func applicationWillBecomeActive ( _ notification : Notification ) {}
+}
+
+
import Foundation
+
+public final class Foo : NSObject {
+ @IBOutlet var ↓ bar : NSObject !
+}
+
+
import Foundation
+
+public final class Foo : NSObject {
+ @IBInspectable var ↓ bar : String !
+}
+
+
import Foundation
+
+final class Foo : NSObject {}
+final class ↓ Bar {
+ var ↓ foo = Foo ()
+}
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/unused_enumerated.html b/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/unused_enumerated.html
new file mode 100644
index 000000000..5b76d8c70
--- /dev/null
+++ b/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/unused_enumerated.html
@@ -0,0 +1,383 @@
+
+
+
+
unused_enumerated Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SwiftLintFramework Reference
+
+ unused_enumerated Reference
+
+
+
+
+
+
+
+
+
+
+
+
Unused Enumerated
+
+
When the index or the item is not used, .enumerated() can be removed.
+
+
+Identifier: unused_enumerated
+Enabled by default: Yes
+Supports autocorrection: No
+Kind: idiomatic
+Analyzer rule: No
+Minimum Swift compiler version: 5.0.0
+Default configuration: warning
+
+
Non Triggering Examples
+
for ( idx , foo ) in bar . enumerated () { }
+
+
+
for ( _ , foo ) in bar . enumerated () . something () { }
+
+
+
for ( _ , foo ) in bar . something () { }
+
+
+
for foo in bar . enumerated () { }
+
+
+
for foo in bar { }
+
+
+
for ( idx , _ ) in bar . enumerated () . something () { }
+
+
+
for ( idx , _ ) in bar . something () { }
+
+
+
for idx in bar . indices { }
+
+
+
for ( section , ( event , _ )) in data . enumerated () {}
+
+
+
Triggering Examples
+
for ( ↓ _ , foo ) in bar . enumerated () { }
+
+
+
for ( ↓ _ , foo ) in abc . bar . enumerated () { }
+
+
+
for ( ↓ _ , foo ) in abc . something () . enumerated () { }
+
+
+
for ( idx , ↓ _ ) in bar . enumerated () { }
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/unused_import.html b/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/unused_import.html
new file mode 100644
index 000000000..98f6a0e8a
--- /dev/null
+++ b/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/unused_import.html
@@ -0,0 +1,391 @@
+
+
+
+
unused_import Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SwiftLintFramework Reference
+
+ unused_import Reference
+
+
+
+
+
+
+
+
+
+
+
+
Unused Import
+
+
All imported modules should be required to make the file compile.
+
+
+Identifier: unused_import
+Enabled by default: No
+Supports autocorrection: Yes
+Kind: lint
+Analyzer rule: Yes
+Minimum Swift compiler version: 5.0.0
+Default configuration: severity: warning, require_explicit_imports: false, allowed_transitive_imports: [], always_keep_imports: []
+
+
Non Triggering Examples
+
import Dispatch // This is used
+dispatchMain ()
+
+
@testable import Dispatch
+dispatchMain ()
+
+
import Foundation
+@objc
+class A {}
+
+
import UnknownModule
+func foo ( error : Swift . Error ) {}
+
+
import Foundation
+import ObjectiveC
+let 👨 👩 👧 👦 = #selector( NSArray.contains(_:) )
+👨 👩 👧 👦 == 👨 👩 👧 👦
+
+
Triggering Examples
+
↓ import Dispatch
+struct A {
+ static func dispatchMain () {}
+}
+A . dispatchMain ()
+
+
↓ import Foundation // This is unused
+struct A {
+ static func dispatchMain () {}
+}
+A . dispatchMain ()
+↓ import Dispatch
+
+
+
↓ import Foundation
+dispatchMain ()
+
+
↓ import Foundation
+// @objc
+class A {}
+
+
↓ import Foundation
+import UnknownModule
+func foo ( error : Swift . Error ) {}
+
+
↓ import Swift
+↓ import SwiftShims
+func foo ( error : Swift . Error ) {}
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/unused_optional_binding.html b/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/unused_optional_binding.html
new file mode 100644
index 000000000..4bf31c059
--- /dev/null
+++ b/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/unused_optional_binding.html
@@ -0,0 +1,399 @@
+
+
+
+
unused_optional_binding Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SwiftLintFramework Reference
+
+ unused_optional_binding Reference
+
+
+
+
+
+
+
+
+
+
+
+
Unused Optional Binding
+
+
Prefer != nil over let _ =
+
+
+Identifier: unused_optional_binding
+Enabled by default: Yes
+Supports autocorrection: No
+Kind: style
+Analyzer rule: No
+Minimum Swift compiler version: 5.0.0
+Default configuration: warning, ignore_optional_try: false
+
+
Non Triggering Examples
+
if let bar = Foo . optionalValue {
+}
+
+
+
if let ( _ , second ) = getOptionalTuple () {
+}
+
+
+
if let ( _ , asd , _ ) = getOptionalTuple (), let bar = Foo . optionalValue {
+}
+
+
+
if foo () { let _ = bar () }
+
+
+
if foo () { _ = bar () }
+
+
+
if case . some ( _ ) = self {}
+
+
if let point = state . find ({ _ in true }) {}
+
+
Triggering Examples
+
if let ↓ _ = Foo . optionalValue {
+}
+
+
+
if let a = Foo . optionalValue , let ↓ _ = Foo . optionalValue2 {
+}
+
+
+
guard let a = Foo . optionalValue , let ↓ _ = Foo . optionalValue2 {
+}
+
+
+
if let ( first , second ) = getOptionalTuple (), let ↓ _ = Foo . optionalValue {
+}
+
+
+
if let ( first , _ ) = getOptionalTuple (), let ↓ _ = Foo . optionalValue {
+}
+
+
+
if let ( _ , second ) = getOptionalTuple (), let ↓ _ = Foo . optionalValue {
+}
+
+
+
if let ↓ ( _ , _ , _ ) = getOptionalTuple (), let bar = Foo . optionalValue {
+}
+
+
+
func foo () {
+if let ↓ _ = bar {
+}
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/unused_setter_value.html b/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/unused_setter_value.html
new file mode 100644
index 000000000..046bde4af
--- /dev/null
+++ b/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/unused_setter_value.html
@@ -0,0 +1,433 @@
+
+
+
+
unused_setter_value Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SwiftLintFramework Reference
+
+ unused_setter_value Reference
+
+
+
+
+
+
+
+
+
+
+
+
Unused Setter Value
+
+
Setter value is not used.
+
+
+Identifier: unused_setter_value
+Enabled by default: Yes
+Supports autocorrection: No
+Kind: lint
+Analyzer rule: No
+Minimum Swift compiler version: 5.0.0
+Default configuration: warning
+
+
Non Triggering Examples
+
var aValue : String {
+ get {
+ return Persister . shared . aValue
+ }
+ set {
+ Persister . shared . aValue = newValue
+ }
+}
+
+
var aValue : String {
+ set {
+ Persister . shared . aValue = newValue
+ }
+ get {
+ return Persister . shared . aValue
+ }
+}
+
+
var aValue : String {
+ get {
+ return Persister . shared . aValue
+ }
+ set ( value ) {
+ Persister . shared . aValue = value
+ }
+}
+
+
override var aValue : String {
+ get {
+ return Persister . shared . aValue
+ }
+ set { }
+}
+
+
Triggering Examples
+
var aValue : String {
+ get {
+ return Persister . shared . aValue
+ }
+ ↓ set {
+ Persister . shared . aValue = aValue
+ }
+}
+
+
var aValue : String {
+ ↓ set {
+ Persister . shared . aValue = aValue
+ }
+ get {
+ return Persister . shared . aValue
+ }
+}
+
+
var aValue : String {
+ get {
+ return Persister . shared . aValue
+ }
+ ↓ set {
+ Persister . shared . aValue = aValue
+ }
+}
+
+
var aValue : String {
+ get {
+ let newValue = Persister . shared . aValue
+ return newValue
+ }
+ ↓ set {
+ Persister . shared . aValue = aValue
+ }
+}
+
+
var aValue : String {
+ get {
+ return Persister . shared . aValue
+ }
+ ↓ set ( value ) {
+ Persister . shared . aValue = aValue
+ }
+}
+
+
override var aValue : String {
+ get {
+ return Persister . shared . aValue
+ }
+ ↓ set {
+ Persister . shared . aValue = aValue
+ }
+}
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/valid_ibinspectable.html b/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/valid_ibinspectable.html
new file mode 100644
index 000000000..6760cca26
--- /dev/null
+++ b/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/valid_ibinspectable.html
@@ -0,0 +1,420 @@
+
+
+
+
valid_ibinspectable Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SwiftLintFramework Reference
+
+ valid_ibinspectable Reference
+
+
+
+
+
+
+
+
+
+
+
+
Valid IBInspectable
+
+
@IBInspectable should be applied to variables only, have its type explicit and be of a supported type
+
+
+Identifier: valid_ibinspectable
+Enabled by default: Yes
+Supports autocorrection: No
+Kind: lint
+Analyzer rule: No
+Minimum Swift compiler version: 5.0.0
+Default configuration: warning
+
+
Non Triggering Examples
+
class Foo {
+ @IBInspectable private var x : Int
+}
+
+
class Foo {
+ @IBInspectable private var x : String ?
+}
+
+
class Foo {
+ @IBInspectable private var x : String !
+}
+
+
class Foo {
+ @IBInspectable private var count : Int = 0
+}
+
+
class Foo {
+ private var notInspectable = 0
+}
+
+
class Foo {
+ private let notInspectable : Int
+}
+
+
class Foo {
+ private let notInspectable : UInt8
+}
+
+
extension Foo {
+ @IBInspectable var color : UIColor {
+ set {
+ self . bar . textColor = newValue
+ }
+
+ get {
+ return self . bar . textColor
+ }
+ }
+}
+
+
class Foo {
+ @IBInspectable var borderColor : UIColor ? = nil {
+ didSet {
+ updateAppearance ()
+ }
+ }
+}
+
+
Triggering Examples
+
class Foo {
+ @IBInspectable private ↓ let count : Int
+}
+
+
class Foo {
+ @IBInspectable private ↓ var insets : UIEdgeInsets
+}
+
+
class Foo {
+ @IBInspectable private ↓ var count = 0
+}
+
+
class Foo {
+ @IBInspectable private ↓ var count : Int ?
+}
+
+
class Foo {
+ @IBInspectable private ↓ var count : Int !
+}
+
+
class Foo {
+ @IBInspectable private ↓ var count : Optional < Int >
+}
+
+
class Foo {
+ @IBInspectable private ↓ var x : Optional < String >
+}
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/vertical_parameter_alignment.html b/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/vertical_parameter_alignment.html
new file mode 100644
index 000000000..6028bf299
--- /dev/null
+++ b/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/vertical_parameter_alignment.html
@@ -0,0 +1,409 @@
+
+
+
+
vertical_parameter_alignment Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SwiftLintFramework Reference
+
+ vertical_parameter_alignment Reference
+
+
+
+
+
+
+
+
+
+
+
+
Vertical Parameter Alignment
+
+
Function parameters should be aligned vertically if they’re in multiple lines in a declaration.
+
+
+Identifier: vertical_parameter_alignment
+Enabled by default: Yes
+Supports autocorrection: No
+Kind: style
+Analyzer rule: No
+Minimum Swift compiler version: 5.0.0
+Default configuration: warning
+
+
Non Triggering Examples
+
func validateFunction ( _ file : SwiftLintFile , kind : SwiftDeclarationKind ,
+ dictionary : SourceKittenDictionary ) { }
+
+
func validateFunction ( _ file : SwiftLintFile , kind : SwiftDeclarationKind ,
+ dictionary : SourceKittenDictionary ) -> [ StyleViolation ]
+
+
func foo ( bar : Int )
+
+
func foo ( bar : Int ) -> String
+
+
func validateFunction ( _ file : SwiftLintFile , kind : SwiftDeclarationKind ,
+ dictionary : SourceKittenDictionary )
+ -> [ StyleViolation ]
+
+
func validateFunction (
+ _ file : SwiftLintFile , kind : SwiftDeclarationKind ,
+ dictionary : SourceKittenDictionary ) -> [ StyleViolation ]
+
+
func validateFunction (
+ _ file : SwiftLintFile , kind : SwiftDeclarationKind ,
+ dictionary : SourceKittenDictionary
+) -> [ StyleViolation ]
+
+
func regex ( _ pattern : String ,
+ options : NSRegularExpression . Options = [ . anchorsMatchLines ,
+ . dotMatchesLineSeparators ]) -> NSRegularExpression
+
+
func foo ( a : Void ,
+ b : [ String : String ] =
+ [:]) {
+}
+
+
func foo ( data : ( size : CGSize ,
+ identifier : String )) {}
+
+
func foo ( data : Data ,
+ @ViewBuilder content : @escaping ( Data . Element . IdentifiedValue ) -> Content ) {}
+
+
class A {
+ init ( bar : Int )
+}
+
+
class A {
+ init ( foo : Int ,
+ bar : String )
+}
+
+
Triggering Examples
+
func validateFunction ( _ file : SwiftLintFile , kind : SwiftDeclarationKind ,
+ ↓ dictionary : SourceKittenDictionary ) { }
+
+
func validateFunction ( _ file : SwiftLintFile , kind : SwiftDeclarationKind ,
+ ↓ dictionary : SourceKittenDictionary ) { }
+
+
func validateFunction ( _ file : SwiftLintFile ,
+ ↓ kind : SwiftDeclarationKind ,
+ ↓ dictionary : SourceKittenDictionary ) { }
+
+
func foo ( data : Data ,
+ ↓ @ViewBuilder content : @escaping ( Data . Element . IdentifiedValue ) -> Content ) {}
+
+
class A {
+ init ( data : Data ,
+ ↓ @ViewBuilder content : @escaping ( Data . Element . IdentifiedValue ) -> Content ) {}
+}
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/vertical_parameter_alignment_on_call.html b/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/vertical_parameter_alignment_on_call.html
new file mode 100644
index 000000000..7058a03f9
--- /dev/null
+++ b/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/vertical_parameter_alignment_on_call.html
@@ -0,0 +1,413 @@
+
+
+
+
vertical_parameter_alignment_on_call Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SwiftLintFramework Reference
+
+ vertical_parameter_alignment_on_call Reference
+
+
+
+
+
+
+
+
+
+
+
+
Vertical Parameter Alignment On Call
+
+
Function parameters should be aligned vertically if they’re in multiple lines in a method call.
+
+
+Identifier: vertical_parameter_alignment_on_call
+Enabled by default: No
+Supports autocorrection: No
+Kind: style
+Analyzer rule: No
+Minimum Swift compiler version: 5.0.0
+Default configuration: warning
+
+
Non Triggering Examples
+
foo ( param1 : 1 , param2 : bar
+ param3 : false , param4 : true )
+
+
foo ( param1 : 1 , param2 : bar )
+
+
foo ( param1 : 1 , param2 : bar
+ param3 : false ,
+ param4 : true )
+
+
foo (
+ param1 : 1
+) { _ in }
+
+
UIView . animate ( withDuration : 0.4 , animations : {
+ blurredImageView . alpha = 1
+}, completion : { _ in
+ self . hideLoading ()
+})
+
+
UIView . animate ( withDuration : 0.4 , animations : {
+ blurredImageView . alpha = 1
+},
+completion : { _ in
+ self . hideLoading ()
+})
+
+
foo ( param1 : 1 , param2 : { _ in },
+ param3 : false , param4 : true )
+
+
foo ({ _ in
+ bar ()
+ },
+ completion : { _ in
+ baz ()
+ }
+)
+
+
foo ( param1 : 1 , param2 : [
+ 0 ,
+ 1
+], param3 : 0 )
+
+
myFunc ( foo : 0 ,
+ bar : baz == 0 )
+
+
Triggering Examples
+
foo ( param1 : 1 , param2 : bar
+ ↓ param3 : false , param4 : true )
+
+
foo ( param1 : 1 , param2 : bar
+ ↓ param3 : false , param4 : true )
+
+
foo ( param1 : 1 , param2 : bar
+ ↓ param3 : false ,
+ ↓ param4 : true )
+
+
foo ( param1 : 1 ,
+ ↓ param2 : { _ in })
+
+
foo ( param1 : 1 ,
+ param2 : { _ in
+}, param3 : 2 ,
+ ↓ param4 : 0 )
+
+
foo ( param1 : 1 , param2 : { _ in },
+ ↓ param3 : false , param4 : true )
+
+
myFunc ( foo : 0 ,
+ ↓ bar : baz == 0 )
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/vertical_whitespace.html b/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/vertical_whitespace.html
new file mode 100644
index 000000000..5d9a58f14
--- /dev/null
+++ b/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/vertical_whitespace.html
@@ -0,0 +1,377 @@
+
+
+
+
vertical_whitespace Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SwiftLintFramework Reference
+
+ vertical_whitespace Reference
+
+
+
+
+
+
+
+
+
+
+
+
Vertical Whitespace
+
+
Limit vertical whitespace to a single empty line.
+
+
+Identifier: vertical_whitespace
+Enabled by default: Yes
+Supports autocorrection: Yes
+Kind: style
+Analyzer rule: No
+Minimum Swift compiler version: 5.0.0
+Default configuration: warning, max_empty_lines: 1
+
+
Non Triggering Examples
+
let abc = 0
+
+
+
let abc = 0
+
+
+
+
/* bcs
+
+
+
+*/
+
+
// bca
+
+
+
+
Triggering Examples
+
let aaaa = 0
+
+
+
+
+
struct AAAA {}
+
+
+
+
+
+
class BBBB {}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/vertical_whitespace_between_cases.html b/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/vertical_whitespace_between_cases.html
new file mode 100644
index 000000000..42634e063
--- /dev/null
+++ b/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/vertical_whitespace_between_cases.html
@@ -0,0 +1,431 @@
+
+
+
+
vertical_whitespace_between_cases Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SwiftLintFramework Reference
+
+ vertical_whitespace_between_cases Reference
+
+
+
+
+
+
+
+
+
+
+
+
Vertical Whitespace Between Cases
+
+
Include a single empty line between switch cases.
+
+
+Identifier: vertical_whitespace_between_cases
+Enabled by default: No
+Supports autocorrection: Yes
+Kind: style
+Analyzer rule: No
+Minimum Swift compiler version: 5.0.0
+Default configuration: warning
+
+
Non Triggering Examples
+
switch x {
+ case . valid :
+ print ( "multiple ..." )
+ print ( "... lines" )
+
+ case . invalid :
+ print ( "multiple ..." )
+ print ( "... lines" )
+ }
+
+
switch x {
+ case . valid :
+ print ( "x is valid" )
+
+ case . invalid :
+ print ( "x is invalid" )
+ }
+
+
switch x {
+ case 0 ..< 5 :
+ print ( "x is valid" )
+
+ default :
+ print ( "x is invalid" )
+ }
+
+
switch x {
+
+case 0 ..< 5 :
+ print ( "x is low" )
+
+case 5 ..< 10 :
+ print ( "x is high" )
+
+default :
+ print ( "x is invalid" )
+
+}
+
+
switch x {
+case 0 ..< 5 :
+ print ( "x is low" )
+
+case 5 ..< 10 :
+ print ( "x is high" )
+
+default :
+ print ( "x is invalid" )
+}
+
+
switch x {
+case 0 ..< 5 : print ( "x is low" )
+case 5 ..< 10 : print ( "x is high" )
+default : print ( "x is invalid" )
+}
+
+
switch x {
+case 1 :
+ print ( "one" )
+
+default :
+ print ( "not one" )
+}
+
+
Triggering Examples
+
switch x {
+ case . valid :
+ print ( "multiple ..." )
+ print ( "... lines" )
+↓ case . invalid :
+ print ( "multiple ..." )
+ print ( "... lines" )
+ }
+
+
switch x {
+ case . valid :
+ print ( "x is valid" )
+↓ case . invalid :
+ print ( "x is invalid" )
+ }
+
+
switch x {
+ case 0 ..< 5 :
+ print ( "x is valid" )
+↓ default :
+ print ( "x is invalid" )
+ }
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/vertical_whitespace_closing_braces.html b/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/vertical_whitespace_closing_braces.html
new file mode 100644
index 000000000..d1a644eb0
--- /dev/null
+++ b/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/vertical_whitespace_closing_braces.html
@@ -0,0 +1,468 @@
+
+
+
+
vertical_whitespace_closing_braces Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SwiftLintFramework Reference
+
+ vertical_whitespace_closing_braces Reference
+
+
+
+
+
+
+
+
+
+
+
+
Vertical Whitespace before Closing Braces
+
+
Don’t include vertical whitespace (empty line) before closing braces.
+
+
+Identifier: vertical_whitespace_closing_braces
+Enabled by default: No
+Supports autocorrection: Yes
+Kind: style
+Analyzer rule: No
+Minimum Swift compiler version: 5.0.0
+Default configuration: warning, only_enforce_before_trivial_lines: false
+
+
Non Triggering Examples
+
print ([
+ 1
+])
+
+
do {
+ print ( "x is 5" )
+}
+
+
func foo () {
+ run ( 5 ) { x in
+ print ( x )
+ }
+}
+
+
foo (
+ x : 5 ,
+ y : 6
+)
+
+
do {
+ print ( "x is 5" )
+}
+
+
do {
+ print ( "x is 5" )
+}
+
+
print ([ foo {
+ var sum = 0
+ for i in 1 ... 5 { sum += i }
+ return sum
+
+}, foo {
+ var mul = 1
+ for i in 1 ... 5 { mul *= i }
+ return mul
+}])
+
+
[
+1 ,
+2 ,
+3
+]
+
+
[ 1 , 2 ] . map { $0 } . filter { true }
+
+
[ 1 , 2 ] . map { $0 } . filter { num in true }
+
+
/*
+ class X {
+
+ let x = 5
+
+ }
+*/
+
+
if bool1 {
+ // do something
+ // do something
+
+} else if bool2 {
+ // do something
+ // do something
+ // do something
+
+} else {
+ // do something
+ // do something
+}
+
+
Triggering Examples
+
print ([
+ 1
+↓
+])
+
+
do {
+ print ( "x is 5" )
+↓
+
+}
+
+
func foo () {
+ run ( 5 ) { x in
+ print ( x )
+ }
+↓
+}
+
+
foo (
+ x : 5 ,
+ y : 6
+↓
+)
+
+
do {
+ print ( "x is 5" )
+↓
+
+}
+
+
do {
+ print ( "x is 5" )
+↓
+}
+
+
print ([ foo {
+ var sum = 0
+ for i in 1 ... 5 { sum += i }
+ return sum
+
+}, foo {
+ var mul = 1
+ for i in 1 ... 5 { mul *= i }
+ return mul
+↓
+}])
+
+
[
+1 ,
+2 ,
+3
+↓
+]
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/vertical_whitespace_opening_braces.html b/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/vertical_whitespace_opening_braces.html
new file mode 100644
index 000000000..d64253837
--- /dev/null
+++ b/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/vertical_whitespace_opening_braces.html
@@ -0,0 +1,458 @@
+
+
+
+
vertical_whitespace_opening_braces Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SwiftLintFramework Reference
+
+ vertical_whitespace_opening_braces Reference
+
+
+
+
+
+
+
+
+
+
+
+
Vertical Whitespace after Opening Braces
+
+
Don’t include vertical whitespace (empty line) after opening braces.
+
+
+Identifier: vertical_whitespace_opening_braces
+Enabled by default: No
+Supports autocorrection: Yes
+Kind: style
+Analyzer rule: No
+Minimum Swift compiler version: 5.0.0
+Default configuration: warning
+
+
Non Triggering Examples
+
/*
+ class X {
+
+ let x = 5
+
+ }
+*/
+
+
// [1, 2].map { $0 }.filter { num in true }
+
+
KingfisherManager . shared . retrieveImage ( with : url , options : nil , progressBlock : nil ) { image , _ , _ , _ in
+ guard let img = image else { return }
+}
+
+
[
+1 ,
+2 ,
+3
+]
+
+
[ 1 , 2 ] . map { $0 } . filter { num in true }
+
+
[ 1 , 2 ] . map { $0 } . foo ()
+
+
class X {
+ struct Y {
+ class Z {
+ }
+ }
+}
+
+
foo (
+ x : 5 ,
+ y : 6
+)
+
+
foo ({ }) { _ in
+ self . dismiss ( animated : false , completion : {
+ })
+}
+
+
func foo () {
+ run ( 5 ) { x in
+ print ( x )
+ }
+}
+
+
if x == 5 {
+ print ( "x is 5" )
+}
+
+
if x == 5 {
+ print ( "x is 5" )
+}
+
+
struct MyStruct {
+ let x = 5
+}
+
+
Triggering Examples
+
KingfisherManager . shared . retrieveImage ( with : url , options : nil , progressBlock : nil ) { image , _ , _ , _ in
+↓
+ guard let img = image else { return }
+}
+
+
[
+↓
+1 ,
+2 ,
+3
+]
+
+
class X {
+ struct Y {
+↓
+ class Z {
+ }
+ }
+}
+
+
foo (
+↓
+ x : 5 ,
+ y : 6
+)
+
+
foo ({ }) { _ in
+↓
+ self . dismiss ( animated : false , completion : {
+ })
+}
+
+
func foo () {
+↓
+ run ( 5 ) { x in
+ print ( x )
+ }
+}
+
+
if x == 5 {
+↓
+
+ print ( "x is 5" )
+}
+
+
if x == 5 {
+↓
+ print ( "x is 5" )
+}
+
+
struct MyStruct {
+↓
+ let x = 5
+}
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/void_function_in_ternary.html b/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/void_function_in_ternary.html
new file mode 100644
index 000000000..2a46d9601
--- /dev/null
+++ b/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/void_function_in_ternary.html
@@ -0,0 +1,423 @@
+
+
+
+
void_function_in_ternary Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SwiftLintFramework Reference
+
+ void_function_in_ternary Reference
+
+
+
+
+
+
+
+
+
+
+
+
Void Function in Ternary
+
+
Using ternary to call Void functions should be avoided.
+
+
+Identifier: void_function_in_ternary
+Enabled by default: Yes
+Supports autocorrection: No
+Kind: idiomatic
+Analyzer rule: No
+Minimum Swift compiler version: 5.1.0
+Default configuration: warning
+
+
Non Triggering Examples
+
let result = success ? foo () : bar ()
+
+
if success {
+ askQuestion ()
+} else {
+ exit ()
+}
+
+
var price : Double {
+ return hasDiscount ? calculatePriceWithDiscount () : calculateRegularPrice ()
+}
+
+
foo ( x == 2 ? a () : b ())
+
+
chevronView . image = collapsed ? . icon ( . mediumChevronDown ) : . icon ( . mediumChevronUp )
+
+
array . map { elem in
+ elem . isEmpty () ? . emptyValue () : . number ( elem )
+}
+
+
func compute ( data : [ Int ]) -> Int {
+ data . isEmpty ? 0 : expensiveComputation ( data )
+}
+
+
var value : Int {
+ mode == . fast ? fastComputation () : expensiveComputation ()
+}
+
+
var value : Int {
+ get {
+ mode == . fast ? fastComputation () : expensiveComputation ()
+ }
+}
+
+
subscript ( index : Int ) -> Int {
+ get {
+ index == 0 ? defaultValue () : compute ( index )
+ }
+
+
subscript ( index : Int ) -> Int {
+ index == 0 ? defaultValue () : compute ( index )
+
+
Triggering Examples
+
success ↓ ? askQuestion () : exit ()
+
+
perform { elem in
+ elem . isEmpty () ↓ ? . emptyValue () : . number ( elem )
+ return 1
+}
+
+
DispatchQueue . main . async {
+ self . sectionViewModels [ section ] . collapsed . toggle ()
+ self . sectionViewModels [ section ] . collapsed
+ ↓ ? self . tableView . deleteRows ( at : [ IndexPath ( row : 0 , section : section )], with : . automatic )
+ : self . tableView . insertRows ( at : [ IndexPath ( row : 0 , section : section )], with : . automatic )
+ self . tableView . scrollToRow ( at : IndexPath ( row : NSNotFound , section : section ), at : . top , animated : true )
+}
+
+
subscript ( index : Int ) -> Int {
+ index == 0 ↓ ? something () : somethingElse ( index )
+ return index
+
+
var value : Int {
+ mode == . fast ↓ ? something () : somethingElse ()
+ return 0
+}
+
+
var value : Int {
+ get {
+ mode == . fast ↓ ? something () : somethingElse ()
+ return 0
+ }
+}
+
+
subscript ( index : Int ) -> Int {
+ get {
+ index == 0 ↓ ? something () : somethingElse ( index )
+ return index
+ }
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/void_return.html b/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/void_return.html
new file mode 100644
index 000000000..e0851924d
--- /dev/null
+++ b/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/void_return.html
@@ -0,0 +1,386 @@
+
+
+
+
void_return Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SwiftLintFramework Reference
+
+ void_return Reference
+
+
+
+
+
+
+
+
+
+
+
+
Void Return
+
+
Prefer -> Void over -> ().
+
+
+Identifier: void_return
+Enabled by default: Yes
+Supports autocorrection: Yes
+Kind: style
+Analyzer rule: No
+Minimum Swift compiler version: 5.0.0
+Default configuration: warning
+
+
Non Triggering Examples
+
let abc : () -> Void = {}
+
+
+
let abc : () -> ( VoidVoid ) = {}
+
+
+
func foo ( completion : () -> Void )
+
+
+
let foo : ( ConfigurationTests ) -> () throws -> Void
+
+
+
let foo : ( ConfigurationTests ) -> () throws -> Void
+
+
+
let foo : ( ConfigurationTests ) -> () throws -> Void
+
+
+
let foo : ( ConfigurationTests ) -> () -> Void
+
+
+
Triggering Examples
+
let abc : () -> ↓ () = {}
+
+
+
let abc : () -> ↓ ( Void ) = {}
+
+
+
let abc : () -> ↓ ( Void ) = {}
+
+
+
func foo ( completion : () -> ↓ ())
+
+
+
func foo ( completion : () -> ↓ ( ))
+
+
+
func foo ( completion : () -> ↓ ( Void ))
+
+
+
let foo : ( ConfigurationTests ) -> () throws -> ↓ ()
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/weak_delegate.html b/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/weak_delegate.html
new file mode 100644
index 000000000..946c7003a
--- /dev/null
+++ b/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/weak_delegate.html
@@ -0,0 +1,435 @@
+
+
+
+
weak_delegate Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SwiftLintFramework Reference
+
+ weak_delegate Reference
+
+
+
+
+
+
+
+
+
+
+
+
Weak Delegate
+
+
Delegates should be weak to avoid reference cycles.
+
+
+Identifier: weak_delegate
+Enabled by default: No
+Supports autocorrection: No
+Kind: lint
+Analyzer rule: No
+Minimum Swift compiler version: 5.0.0
+Default configuration: warning
+
+
Non Triggering Examples
+
class Foo {
+ weak var delegate : SomeProtocol ?
+}
+
+
+
class Foo {
+ weak var someDelegate : SomeDelegateProtocol ?
+}
+
+
+
class Foo {
+ weak var delegateScroll : ScrollDelegate ?
+}
+
+
+
class Foo {
+ var scrollHandler : ScrollDelegate ?
+}
+
+
+
func foo () {
+ var delegate : SomeDelegate
+}
+
+
+
class Foo {
+ var delegateNotified : Bool ?
+}
+
+
+
protocol P {
+ var delegate : AnyObject ? { get set }
+}
+
+
+
class Foo {
+ protocol P {
+ var delegate : AnyObject ? { get set }
+}
+}
+
+
+
class Foo {
+ var computedDelegate : ComputedDelegate {
+ return bar ()
+}
+}
+
+
class Foo {
+ var computedDelegate : ComputedDelegate {
+ get {
+ return bar ()
+ }
+ }
+
+
struct Foo {
+ @UIApplicationDelegateAdaptor ( AppDelegate . self ) var appDelegate
+}
+
+
struct Foo {
+ @NSApplicationDelegateAdaptor ( AppDelegate . self ) var appDelegate
+}
+
+
struct Foo {
+ @WKExtensionDelegateAdaptor ( ExtensionDelegate . self ) var extensionDelegate
+}
+
+
class Foo {
+ func makeDelegate () -> SomeDelegate {
+ let delegate = SomeDelegate ()
+ return delegate
+ }
+}
+
+
Triggering Examples
+
class Foo {
+ ↓ var delegate : SomeProtocol ?
+}
+
+
+
class Foo {
+ ↓ var scrollDelegate : ScrollDelegate ?
+}
+
+
+
class Foo {
+ ↓ var delegate : SomeProtocol ? {
+ didSet {
+ print ( "Updated delegate" )
+ }
+ }
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/xct_specific_matcher.html b/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/xct_specific_matcher.html
new file mode 100644
index 000000000..6b5c5337a
--- /dev/null
+++ b/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/xct_specific_matcher.html
@@ -0,0 +1,488 @@
+
+
+
+
xct_specific_matcher Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SwiftLintFramework Reference
+
+ xct_specific_matcher Reference
+
+
+
+
+
+
+
+
+
+
+
+
XCTest Specific Matcher
+
+
Prefer specific XCTest matchers over XCTAssertEqual and XCTAssertNotEqual
+
+
+Identifier: xct_specific_matcher
+Enabled by default: No
+Supports autocorrection: No
+Kind: idiomatic
+Analyzer rule: No
+Minimum Swift compiler version: 5.0.0
+Default configuration: warning
+
+
Non Triggering Examples
+
XCTAssertFalse ( foo )
+
+
XCTAssertTrue ( foo )
+
+
XCTAssertNil ( foo )
+
+
XCTAssertNotNil ( foo )
+
+
XCTAssertEqual ( foo , 2 )
+
+
XCTAssertNotEqual ( foo , "false" )
+
+
XCTAssertEqual ( foo , [ 1 , 2 , 3 , true ])
+
+
XCTAssertEqual ( foo , [ 1 , 2 , 3 , false ])
+
+
XCTAssertEqual ( foo , [ 1 , 2 , 3 , nil ])
+
+
XCTAssertEqual ( foo , [ true , nil , true , nil ])
+
+
XCTAssertEqual ([ 1 , 2 , 3 , true ], foo )
+
+
XCTAssertEqual ([ 1 , 2 , 3 , false ], foo )
+
+
XCTAssertEqual ([ 1 , 2 , 3 , nil ], foo )
+
+
XCTAssertEqual ([ true , nil , true , nil ], foo )
+
+
XCTAssertEqual ( 2 , foo )
+
+
XCTAssertNotEqual ( "false" ), foo )
+
+
XCTAssertEqual ( false , foo ? . bar )
+
+
XCTAssertEqual ( true , foo ? . bar )
+
+
XCTAssertFalse ( foo )
+
+
XCTAssertTrue ( foo )
+
+
XCTAssertNil ( foo )
+
+
XCTAssertNotNil ( foo )
+
+
XCTAssertEqual ( foo , 2 )
+
+
XCTAssertNotEqual ( foo , "false" )
+
+
XCTAssertEqual ( foo ? . bar , false )
+
+
XCTAssertEqual ( foo ? . bar , true )
+
+
XCTAssertNil ( foo ? . bar )
+
+
XCTAssertNotNil ( foo ? . bar )
+
+
XCTAssertEqual ( foo ? . bar , 2 )
+
+
XCTAssertNotEqual ( foo ? . bar , "false" )
+
+
XCTAssertEqual ( foo ? . bar , toto ())
+
+
XCTAssertEqual ( foo ? . bar , . toto ( . zoo ))
+
+
XCTAssertEqual ( toto (), foo ? . bar )
+
+
XCTAssertEqual ( . toto ( . zoo ), foo ? . bar )
+
+
Triggering Examples
+
↓ XCTAssertEqual ( foo , true )
+
+
↓ XCTAssertEqual ( foo , false )
+
+
↓ XCTAssertEqual ( foo , nil )
+
+
↓ XCTAssertNotEqual ( foo , true )
+
+
↓ XCTAssertNotEqual ( foo , false )
+
+
↓ XCTAssertNotEqual ( foo , nil )
+
+
↓ XCTAssertEqual ( true , foo )
+
+
↓ XCTAssertEqual ( false , foo )
+
+
↓ XCTAssertEqual ( nil , foo )
+
+
↓ XCTAssertNotEqual ( true , foo )
+
+
↓ XCTAssertNotEqual ( false , foo )
+
+
↓ XCTAssertNotEqual ( nil , foo )
+
+
↓ XCTAssertEqual ( foo , true , "toto" )
+
+
↓ XCTAssertEqual ( foo , false , "toto" )
+
+
↓ XCTAssertEqual ( foo , nil , "toto" )
+
+
↓ XCTAssertNotEqual ( foo , true , "toto" )
+
+
↓ XCTAssertNotEqual ( foo , false , "toto" )
+
+
↓ XCTAssertNotEqual ( foo , nil , "toto" )
+
+
↓ XCTAssertEqual ( true , foo , "toto" )
+
+
↓ XCTAssertEqual ( false , foo , "toto" )
+
+
↓ XCTAssertEqual ( nil , foo , "toto" )
+
+
↓ XCTAssertNotEqual ( true , foo , "toto" )
+
+
↓ XCTAssertNotEqual ( false , foo , "toto" )
+
+
↓ XCTAssertNotEqual ( nil , foo , "toto" )
+
+
↓ XCTAssertEqual ( foo , true )
+
+
↓ XCTAssertEqual ( foo , false )
+
+
↓ XCTAssertEqual ( foo , nil )
+
+
↓ XCTAssertEqual ( true , [ 1 , 2 , 3 , true ] . hasNumbers ())
+
+
↓ XCTAssertEqual ([ 1 , 2 , 3 , true ] . hasNumbers (), true )
+
+
↓ XCTAssertEqual ( foo ? . bar , nil )
+
+
↓ XCTAssertNotEqual ( foo ? . bar , nil )
+
+
↓ XCTAssertEqual ( nil , true )
+
+
↓ XCTAssertEqual ( nil , false )
+
+
↓ XCTAssertEqual ( true , nil )
+
+
↓ XCTAssertEqual ( false , nil )
+
+
↓ XCTAssertEqual ( nil , nil )
+
+
↓ XCTAssertEqual ( true , true )
+
+
↓ XCTAssertEqual ( false , false )
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/xctfail_message.html b/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/xctfail_message.html
new file mode 100644
index 000000000..69ca46ef6
--- /dev/null
+++ b/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/xctfail_message.html
@@ -0,0 +1,360 @@
+
+
+
+
xctfail_message Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SwiftLintFramework Reference
+
+ xctfail_message Reference
+
+
+
+
+
+
+
+
+
+
+
+
XCTFail Message
+
+
An XCTFail call should include a description of the assertion.
+
+
+Identifier: xctfail_message
+Enabled by default: Yes
+Supports autocorrection: No
+Kind: idiomatic
+Analyzer rule: No
+Minimum Swift compiler version: 5.0.0
+Default configuration: warning
+
+
Non Triggering Examples
+
func testFoo () {
+ XCTFail ( "bar" )
+}
+
+
func testFoo () {
+ XCTFail ( bar )
+}
+
+
Triggering Examples
+
func testFoo () {
+ ↓ XCTFail ()
+}
+
+
func testFoo () {
+ ↓ XCTFail ( "" )
+}
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/yoda_condition.html b/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/yoda_condition.html
new file mode 100644
index 000000000..0947f3317
--- /dev/null
+++ b/docsets/SwiftLintFramework.docset/Contents/Resources/Documents/yoda_condition.html
@@ -0,0 +1,390 @@
+
+
+
+
yoda_condition Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SwiftLintFramework Reference
+
+ yoda_condition Reference
+
+
+
+
+
+
+
+
+
+
+
+
Yoda condition rule
+
+
The constant literal should be placed on the right-hand side of the comparison operator.
+
+
+Identifier: yoda_condition
+Enabled by default: No
+Supports autocorrection: No
+Kind: lint
+Analyzer rule: No
+Minimum Swift compiler version: 5.0.0
+Default configuration: warning
+
+
Non Triggering Examples
+
if foo == 42 {}
+
+
+
if foo <= 42.42 {}
+
+
+
guard foo >= 42 else { return }
+
+
+
guard foo != "str str" else { return }
+
+
while foo < 10 { }
+
+
+
while foo > 1 { }
+
+
+
while foo + 1 == 2 {}
+
+
if optionalValue ? . property ?? 0 == 2 {}
+
+
if foo == nil {}
+
+
if flags & 1 == 1 {}
+
+
Triggering Examples
+
if ↓ 42 == foo {}
+
+
+
if ↓ 42.42 >= foo {}
+
+
+
guard ↓ 42 <= foo else { return }
+
+
+
guard ↓ "str str" != foo else { return }
+
+
while ↓ 10 > foo { }
+
+
while ↓ 1 < foo { }
+
+
if ↓ nil == foo {}
+
+
while ↓ 1 > i + 5 {}
+
+
if ↓ 200 <= i && i <= 299 || ↓ 600 <= i {}
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docsets/SwiftLintFramework.docset/Contents/Resources/docSet.dsidx b/docsets/SwiftLintFramework.docset/Contents/Resources/docSet.dsidx
new file mode 100644
index 000000000..54c725d63
Binary files /dev/null and b/docsets/SwiftLintFramework.docset/Contents/Resources/docSet.dsidx differ
diff --git a/docsets/SwiftLintFramework.tgz b/docsets/SwiftLintFramework.tgz
new file mode 100644
index 000000000..1f24fe814
Binary files /dev/null and b/docsets/SwiftLintFramework.tgz differ
diff --git a/docsets/SwiftLintFramework.xml b/docsets/SwiftLintFramework.xml
new file mode 100644
index 000000000..b3ced2674
--- /dev/null
+++ b/docsets/SwiftLintFramework.xml
@@ -0,0 +1 @@
+
0.50.3 https://realm.github.io/SwiftLint/docsets/SwiftLintFramework.tgz
diff --git a/duplicate_enum_cases.html b/duplicate_enum_cases.html
new file mode 100644
index 000000000..7d7935cee
--- /dev/null
+++ b/duplicate_enum_cases.html
@@ -0,0 +1,380 @@
+
+
+
+
duplicate_enum_cases Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SwiftLintFramework Reference
+
+ duplicate_enum_cases Reference
+
+
+
+
+
+
+
+
+
+
+
+
Duplicate Enum Cases
+
+
Enum can’t contain multiple cases with the same name.
+
+
+Identifier: duplicate_enum_cases
+Enabled by default: Yes
+Supports autocorrection: No
+Kind: lint
+Analyzer rule: No
+Minimum Swift compiler version: 5.0.0
+Default configuration: error
+
+
Non Triggering Examples
+
enum PictureImport {
+ case addImage ( image : UIImage )
+ case addData ( data : Data )
+}
+
+
enum A {
+ case add ( image : UIImage )
+}
+enum B {
+ case add ( image : UIImage )
+}
+
+
enum Tag : String {
+#if CONFIG_A
+ case value = "CONFIG_A"
+#elseif CONFIG_B
+ case value = "CONFIG_B"
+#else
+ case value = "CONFIG_DEFAULT"
+#endif
+}
+
+
enum Target {
+#if os(iOS)
+ case file
+#else
+ case file ( URL )
+#endif
+}
+
+
Triggering Examples
+
enum PictureImport {
+ case ↓ add ( image : UIImage )
+ case addURL ( url : URL )
+ case ↓ add ( data : Data )
+}
+
+
+
+
+
+
+
+
+
+
+
diff --git a/duplicate_imports.html b/duplicate_imports.html
new file mode 100644
index 000000000..2b223b55a
--- /dev/null
+++ b/duplicate_imports.html
@@ -0,0 +1,445 @@
+
+
+
+
duplicate_imports Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SwiftLintFramework Reference
+
+ duplicate_imports Reference
+
+
+
+
+
+
+
+
+
+
+
+
Duplicate Imports
+
+
Imports should be unique.
+
+
+Identifier: duplicate_imports
+Enabled by default: Yes
+Supports autocorrection: Yes
+Kind: idiomatic
+Analyzer rule: No
+Minimum Swift compiler version: 5.0.0
+Default configuration: warning
+
+
Non Triggering Examples
+
import A
+import B
+import C
+
+
import A . B
+import A . C
+
+
@_implementationOnly import A
+@_implementationOnly import B
+
+
@testable import A
+@testable import B
+
+
#if DEBUG
+ @testable import KsApi
+#else
+ import KsApi
+#endif
+
+
import A // module
+import B // module
+
+
#if TEST
+func test () {
+}
+
+
Triggering Examples
+
@_implementationOnly import A
+↓ @_implementationOnly import A
+
+
+
@testable import A
+↓ @testable import A
+
+
+
import A
+#if DEBUG
+ @testable import KsApi
+#else
+ import KsApi
+#endif
+↓ import A
+
+
+
import A
+↓ import class A . Foo
+
+
+
import A
+↓ import enum A . Foo
+
+
+
import A
+↓ import func A . Foo
+
+
+
import A
+↓ import let A . Foo
+
+
+
import A
+↓ import protocol A . Foo
+
+
+
import A
+↓ import struct A . Foo
+
+
+
import A
+↓ import typealias A . Foo
+
+
+
import A
+↓ import var A . Foo
+
+
+
import A . B
+↓ import A . B . C
+
+
+
import Foundation
+import Dispatch
+↓ import Foundation
+
+
+
import Foundation
+↓ import Foundation
+↓ import Foundation
+
+
+
import Foundation
+↓ import Foundation . NSString
+
+
+
↓ import A . B . C
+import A . B
+
+
+
↓ import Foundation . NSString
+import Foundation
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/duplicated_key_in_dictionary_literal.html b/duplicated_key_in_dictionary_literal.html
new file mode 100644
index 000000000..e3318557e
--- /dev/null
+++ b/duplicated_key_in_dictionary_literal.html
@@ -0,0 +1,398 @@
+
+
+
+
duplicated_key_in_dictionary_literal Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SwiftLintFramework Reference
+
+ duplicated_key_in_dictionary_literal Reference
+
+
+
+
+
+
+
+
+
+
+
+
Duplicated Key in Dictionary Literal
+
+
Dictionary literals with duplicated keys will crash in runtime.
+
+
+Identifier: duplicated_key_in_dictionary_literal
+Enabled by default: Yes
+Supports autocorrection: No
+Kind: lint
+Analyzer rule: No
+Minimum Swift compiler version: 5.0.0
+Default configuration: warning
+
+
Non Triggering Examples
+
[
+ 1 : "1" ,
+ 2 : "2"
+ ]
+
+
[
+ "1" : 1 ,
+ "2" : 2
+ ]
+
+
[
+ foo : "1" ,
+ bar : "2"
+ ]
+
+
[
+ UUID (): "1" ,
+ UUID (): "2"
+ ]
+
+
[
+ #line: "1",
+ #line: "2"
+ ]
+
+
Triggering Examples
+
[
+ 1 : "1" ,
+ 2 : "2" ,
+ ↓ 1 : "one"
+ ]
+
+
[
+ "1" : 1 ,
+ "2" : 2 ,
+ ↓ "2" : 2
+ ]
+
+
[
+ foo : "1" ,
+ bar : "2" ,
+ baz : "3" ,
+ ↓ foo : "4" ,
+ zaz : "5"
+ ]
+
+
[
+ . one : "1" ,
+ . two : "2" ,
+ . three : "3" ,
+ ↓ . one : "1" ,
+ . four : "4" ,
+ . five : "5"
+ ]
+
+
+
+
+
+
+
+
+
+
+
diff --git a/dynamic_inline.html b/dynamic_inline.html
new file mode 100644
index 000000000..4f0304441
--- /dev/null
+++ b/dynamic_inline.html
@@ -0,0 +1,376 @@
+
+
+
+
dynamic_inline Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SwiftLintFramework Reference
+
+ dynamic_inline Reference
+
+
+
+
+
+
+
+
+
+
+
+
Dynamic Inline
+
+
Avoid using ‘dynamic’ and ‘@inline(__always)’ together.
+
+
+Identifier: dynamic_inline
+Enabled by default: Yes
+Supports autocorrection: No
+Kind: lint
+Analyzer rule: No
+Minimum Swift compiler version: 5.0.0
+Default configuration: error
+
+
Non Triggering Examples
+
class C {
+dynamic func f () {}}
+
+
class C {
+@inline ( __always ) func f () {}}
+
+
class C {
+@inline ( never ) dynamic func f () {}}
+
+
Triggering Examples
+
class C {
+@inline ( __always ) dynamic ↓ func f () {}
+}
+
+
class C {
+@inline ( __always ) public dynamic ↓ func f () {}
+}
+
+
class C {
+@inline ( __always ) dynamic internal ↓ func f () {}
+}
+
+
class C {
+@inline ( __always )
+dynamic ↓ func f () {}
+}
+
+
class C {
+@inline ( __always )
+dynamic
+↓ func f () {}
+}
+
+
+
+
+
+
+
+
+
+
+
diff --git a/empty_collection_literal.html b/empty_collection_literal.html
new file mode 100644
index 000000000..b24d019c9
--- /dev/null
+++ b/empty_collection_literal.html
@@ -0,0 +1,368 @@
+
+
+
+
empty_collection_literal Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SwiftLintFramework Reference
+
+ empty_collection_literal Reference
+
+
+
+
+
+
+
+
+
+
+
+
Empty Collection Literal
+
+
Prefer checking isEmpty over comparing collection to an empty array or dictionary literal.
+
+
+Identifier: empty_collection_literal
+Enabled by default: No
+Supports autocorrection: No
+Kind: performance
+Analyzer rule: No
+Minimum Swift compiler version: 5.0.0
+Default configuration: warning
+
+
Non Triggering Examples
+
myArray = []
+
+
myArray . isEmpty
+
+
! myArray . isEmpty
+
+
myDict = [:]
+
+
Triggering Examples
+
myArray ↓ == []
+
+
myArray ↓ != []
+
+
myArray ↓ == [ ]
+
+
myDict ↓ == [:]
+
+
myDict ↓ != [:]
+
+
myDict ↓ == [: ]
+
+
myDict ↓ == [ :]
+
+
myDict ↓ == [ : ]
+
+
+
+
+
+
+
+
+
+
+
diff --git a/empty_count.html b/empty_count.html
new file mode 100644
index 000000000..680cb62c2
--- /dev/null
+++ b/empty_count.html
@@ -0,0 +1,401 @@
+
+
+
+
empty_count Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SwiftLintFramework Reference
+
+ empty_count Reference
+
+
+
+
+
+
+
+
+
+
+
+
Empty Count
+
+
Prefer checking isEmpty over comparing count to zero.
+
+
+Identifier: empty_count
+Enabled by default: No
+Supports autocorrection: No
+Kind: performance
+Analyzer rule: No
+Minimum Swift compiler version: 5.0.0
+Default configuration: error, only_after_dot: false
+
+
Non Triggering Examples
+
var count = 0
+
+
+
[ Int ]() . isEmpty
+
+
+
[ Int ]() . count > 1
+
+
+
[ Int ]() . count == 1
+
+
+
[ Int ]() . count == 0xff
+
+
+
[ Int ]() . count == 0b01
+
+
+
[ Int ]() . count == 0o07
+
+
+
discount == 0
+
+
+
order . discount == 0
+
+
+
Triggering Examples
+
[ Int ]() . ↓ count == 0
+
+
+
0 == [ Int ]() . ↓ count
+
+
+
[ Int ]() . ↓ count == 0
+
+
+
[ Int ]() . ↓ count > 0
+
+
+
[ Int ]() . ↓ count != 0
+
+
+
[ Int ]() . ↓ count == 0x0
+
+
+
[ Int ]() . ↓ count == 0x00_00
+
+
+
[ Int ]() . ↓ count == 0b00
+
+
+
[ Int ]() . ↓ count == 0o00
+
+
+
↓ count == 0
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/empty_enum_arguments.html b/empty_enum_arguments.html
new file mode 100644
index 000000000..7d0daa435
--- /dev/null
+++ b/empty_enum_arguments.html
@@ -0,0 +1,459 @@
+
+
+
+
empty_enum_arguments Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SwiftLintFramework Reference
+
+ empty_enum_arguments Reference
+
+
+
+
+
+
+
+
+
+
+
+
Empty Enum Arguments
+
+
Arguments can be omitted when matching enums with associated values if they are not used.
+
+
+Identifier: empty_enum_arguments
+Enabled by default: Yes
+Supports autocorrection: Yes
+Kind: style
+Analyzer rule: No
+Minimum Swift compiler version: 5.0.0
+Default configuration: warning
+
+
Non Triggering Examples
+
switch foo {
+case . bar : break
+}
+
+
switch foo {
+case . bar ( let x ): break
+}
+
+
switch foo {
+case let . bar ( x ): break
+}
+
+
switch ( foo , bar ) {
+case ( _ , _ ): break
+}
+
+
switch foo {
+case "bar" . uppercased (): break
+}
+
+
switch ( foo , bar ) {
+case ( _ , _ ) where ! something : break
+}
+
+
switch foo {
+case ( let f as () -> String )?: break
+}
+
+
switch foo {
+case . bar ( Baz ()): break
+}
+
+
switch foo {
+case . bar ( . init ()): break
+}
+
+
switch foo {
+default : break
+}
+
+
if case . bar = foo {
+}
+
+
guard case . bar = foo else {
+}
+
+
if foo == . bar () {}
+
+
guard foo == . bar () else { return }
+
+
if case . appStore = self . appInstaller , ! UIDevice . isSimulator () {
+ viewController . present ( self , animated : false )
+} else {
+ UIApplication . shared . open ( self . appInstaller . url )
+}
+
+
let updatedUserNotificationSettings = deepLink . filter { nav in
+ guard case . settings ( . notifications ( _ , nil )) = nav else { return false }
+ return true
+}
+
+
Triggering Examples
+
switch foo {
+case . bar ↓ ( _ ): break
+}
+
+
switch foo {
+case . bar ↓ (): break
+}
+
+
switch foo {
+case . bar ↓ ( _ ), . bar2 ↓ ( _ ): break
+}
+
+
switch foo {
+case . bar ↓ () where method () > 2 : break
+}
+
+
switch foo {
+case . bar ( . baz ↓ ()): break
+}
+
+
switch foo {
+case . bar ( . baz ↓ ( _ )): break
+}
+
+
func example ( foo : Foo ) {
+ switch foo {
+ case case . bar ↓ ( _ ):
+ break
+ }
+}
+
+
if case . bar ↓ ( _ ) = foo {
+}
+
+
guard case . bar ↓ ( _ ) = foo else {
+}
+
+
if case . bar ↓ () = foo {
+}
+
+
guard case . bar ↓ () = foo else {
+}
+
+
if case . appStore ↓ ( _ ) = self . appInstaller , ! UIDevice . isSimulator () {
+ viewController . present ( self , animated : false )
+} else {
+ UIApplication . shared . open ( self . appInstaller . url )
+}
+
+
let updatedUserNotificationSettings = deepLink . filter { nav in
+ guard case . settings ( . notifications ↓ ( _ , _ )) = nav else { return false }
+ return true
+}
+
+
+
+
+
+
+
+
+
+
+
diff --git a/empty_parameters.html b/empty_parameters.html
new file mode 100644
index 000000000..fecd79d52
--- /dev/null
+++ b/empty_parameters.html
@@ -0,0 +1,374 @@
+
+
+
+
empty_parameters Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SwiftLintFramework Reference
+
+ empty_parameters Reference
+
+
+
+
+
+
+
+
+
+
+
+
Empty Parameters
+
+
Prefer () -> over Void ->.
+
+
+Identifier: empty_parameters
+Enabled by default: Yes
+Supports autocorrection: Yes
+Kind: style
+Analyzer rule: No
+Minimum Swift compiler version: 5.0.0
+Default configuration: warning
+
+
Non Triggering Examples
+
let abc : () -> Void = {}
+
+
+
func foo ( completion : () -> Void )
+
+
+
func foo ( completion : () throws -> Void )
+
+
+
let foo : ( ConfigurationTests ) -> Void throws -> Void )
+
+
+
let foo : ( ConfigurationTests ) -> Void throws -> Void )
+
+
+
let foo : ( ConfigurationTests ) -> Void throws -> Void )
+
+
+
Triggering Examples
+
let abc : ↓ ( Void ) -> Void = {}
+
+
+
func foo ( completion : ↓ ( Void ) -> Void )
+
+
+
func foo ( completion : ↓ ( Void ) throws -> Void )
+
+
+
let foo : ↓ ( Void ) -> () throws -> Void )
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/empty_parentheses_with_trailing_closure.html b/empty_parentheses_with_trailing_closure.html
new file mode 100644
index 000000000..cd5241928
--- /dev/null
+++ b/empty_parentheses_with_trailing_closure.html
@@ -0,0 +1,387 @@
+
+
+
+
empty_parentheses_with_trailing_closure Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SwiftLintFramework Reference
+
+ empty_parentheses_with_trailing_closure Reference
+
+
+
+
+
+
+
+
+
+
+
+
Empty Parentheses with Trailing Closure
+
+
When using trailing closures, empty parentheses should be avoided after the method call.
+
+
+Identifier: empty_parentheses_with_trailing_closure
+Enabled by default: Yes
+Supports autocorrection: Yes
+Kind: style
+Analyzer rule: No
+Minimum Swift compiler version: 5.0.0
+Default configuration: warning
+
+
Non Triggering Examples
+
[ 1 , 2 ] . map { $0 + 1 }
+
+
+
[ 1 , 2 ] . map ({ $0 + 1 })
+
+
+
[ 1 , 2 ] . reduce ( 0 ) { $0 + $1 }
+
+
[ 1 , 2 ] . map { number in
+ number + 1
+}
+
+
+
let isEmpty = [ 1 , 2 ] . isEmpty ()
+
+
+
UIView . animateWithDuration ( 0.3 , animations : {
+ self . disableInteractionRightView . alpha = 0
+}, completion : { _ in
+ ()
+})
+
+
Triggering Examples
+
[ 1 , 2 ] . map ↓ () { $0 + 1 }
+
+
+
[ 1 , 2 ] . map ↓ ( ) { $0 + 1 }
+
+
+
[ 1 , 2 ] . map ↓ () { number in
+ number + 1
+}
+
+
+
[ 1 , 2 ] . map ↓ ( ) { number in
+ number + 1
+}
+
+
+
func foo () -> [ Int ] {
+ return [ 1 , 2 ] . map ↓ () { $0 + 1 }
+}
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/empty_string.html b/empty_string.html
new file mode 100644
index 000000000..75822b8ff
--- /dev/null
+++ b/empty_string.html
@@ -0,0 +1,362 @@
+
+
+
+
empty_string Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SwiftLintFramework Reference
+
+ empty_string Reference
+
+
+
+
+
+
+
+
+
+
+
+
Empty String
+
+
Prefer checking isEmpty over comparing string to an empty string literal.
+
+
+Identifier: empty_string
+Enabled by default: No
+Supports autocorrection: No
+Kind: performance
+Analyzer rule: No
+Minimum Swift compiler version: 5.0.0
+Default configuration: warning
+
+
Non Triggering Examples
+
myString . isEmpty
+
+
! myString . isEmpty
+
+
"""
+foo==
+"""
+
+
Triggering Examples
+
myString ↓ == ""
+
+
myString ↓ != ""
+
+
myString ↓ == ""
+
+
myString ↓ == # "" #
+
+
myString ↓ == ## "" ##
+
+
+
+
+
+
+
+
+
+
+
diff --git a/empty_xctest_method.html b/empty_xctest_method.html
new file mode 100644
index 000000000..d207315f8
--- /dev/null
+++ b/empty_xctest_method.html
@@ -0,0 +1,483 @@
+
+
+
+
empty_xctest_method Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SwiftLintFramework Reference
+
+ empty_xctest_method Reference
+
+
+
+
+
+
+
+
+
+
+
+
Empty XCTest Method
+
+
Empty XCTest method should be avoided.
+
+
+Identifier: empty_xctest_method
+Enabled by default: No
+Supports autocorrection: No
+Kind: lint
+Analyzer rule: No
+Minimum Swift compiler version: 5.0.0
+Default configuration: warning, test_parent_classes: [“QuickSpec”, “XCTestCase”]
+
+
Non Triggering Examples
+
class TotoTests : XCTestCase {
+ var foobar : Foobar ?
+
+ override func setUp () {
+ super . setUp ()
+ foobar = Foobar ()
+ }
+
+ override func setUpWithError () throws {
+ foobar = nil
+ }
+
+ override func tearDown () {
+ foobar = nil
+ super . tearDown ()
+ }
+
+ func testFoo () {
+ XCTAssertTrue ( foobar ? . foo )
+ }
+
+ func testBar () {
+ // comment...
+
+ XCTAssertFalse ( foobar ? . bar )
+
+ // comment...
+ }
+
+ func testBaz () {
+ _ = 4 + 4
+ }
+}
+
+
class Foobar {
+ func setUp () {}
+
+ func tearDown () {}
+
+ func testFoo () {}
+}
+
+
class TotoTests : XCTestCase {
+ func setUp ( with object : Foobar ) {}
+
+ func tearDown ( object : Foobar ) {}
+
+ func testFoo ( _ foo : Foobar ) {}
+
+ func testBar ( bar : ( String ) -> Int ) {}
+}
+
+
class TotoTests : XCTestCase {
+ func testFoo () { XCTAssertTrue ( foobar ? . foo ) }
+
+ func testBar () { XCTAssertFalse ( foobar ? . bar ) }
+}
+
+
class TotoTests : XCTestCase {
+ override class var runsForEachTargetApplicationUIConfiguration : Bool { true }
+
+ static var allTests = [( "testFoo" , testFoo )]
+
+ func testFoo () { XCTAssert ( true ) }
+}
+
+
Triggering Examples
+
class TotoTests : XCTestCase {
+ override ↓ func setUp () {
+ }
+
+ override ↓ func tearDown () {
+
+ }
+
+ ↓ func testFoo () {
+
+
+ }
+
+ ↓ func testBar () {
+
+
+
+ }
+
+ func helperFunction () {
+ }
+}
+
+
class TotoTests : XCTestCase {
+ override ↓ func setUp () {}
+
+ override ↓ func tearDown () {}
+
+ ↓ func testFoo () {}
+
+ func helperFunction () {}
+}
+
+
class TotoTests : XCTestCase {
+ override ↓ func setUp () {
+ // comment...
+ }
+
+ override ↓ func tearDown () {
+ // comment...
+ // comment...
+ }
+
+ ↓ func testFoo () {
+ // comment...
+
+ // comment...
+
+ // comment...
+ }
+
+ ↓ func testBar () {
+ /*
+ * comment...
+ *
+ * comment...
+ *
+ * comment...
+ */
+ }
+
+ func helperFunction () {
+ }
+}
+
+
class FooTests : XCTestCase {
+ override ↓ func setUp () {}
+}
+
+class BarTests : XCTestCase {
+ ↓ func testFoo () {}
+}
+
+
+
+
+
+
+
+
+
+
+
diff --git a/enum_case_associated_values_count.html b/enum_case_associated_values_count.html
new file mode 100644
index 000000000..9c9187d57
--- /dev/null
+++ b/enum_case_associated_values_count.html
@@ -0,0 +1,362 @@
+
+
+
+
enum_case_associated_values_count Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SwiftLintFramework Reference
+
+ enum_case_associated_values_count Reference
+
+
+
+
+
+
+
+
+
+
+
+
Enum Case Associated Values Count
+
+
Number of associated values in an enum case should be low
+
+
+Identifier: enum_case_associated_values_count
+Enabled by default: No
+Supports autocorrection: No
+Kind: metrics
+Analyzer rule: No
+Minimum Swift compiler version: 5.0.0
+Default configuration: warning: 5, error: 6
+
+
Non Triggering Examples
+
enum Employee {
+ case fullTime ( name : String , retirement : Date , designation : String , contactNumber : Int )
+ case partTime ( name : String , age : Int , contractEndDate : Date )
+}
+
+
enum Barcode {
+ case upc ( Int , Int , Int , Int )
+}
+
+
Triggering Examples
+
enum Employee {
+ case ↓ fullTime ( name : String , retirement : Date , age : Int , designation : String , contactNumber : Int )
+ case ↓ partTime ( name : String , contractEndDate : Date , age : Int , designation : String , contactNumber : Int )
+}
+
+
enum Barcode {
+ case ↓ upc ( Int , Int , Int , Int , Int , Int )
+}
+
+
+
+
+
+
+
+
+
+
+
diff --git a/expiring_todo.html b/expiring_todo.html
new file mode 100644
index 000000000..c942ea530
--- /dev/null
+++ b/expiring_todo.html
@@ -0,0 +1,386 @@
+
+
+
+
expiring_todo Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SwiftLintFramework Reference
+
+ expiring_todo Reference
+
+
+
+
+
+
+
+
+
+
+
+
Expiring Todo
+
+
TODOs and FIXMEs should be resolved prior to their expiry date.
+
+
+Identifier: expiring_todo
+Enabled by default: No
+Supports autocorrection: No
+Kind: lint
+Analyzer rule: No
+Minimum Swift compiler version: 5.0.0
+Default configuration: approaching_expiry_severity: warning, expired_severity: error, bad_formatting_severity: error, approaching_expiry_threshold: 15, date_format: MM/dd/yyyy, date_delimiters: { opening: [, closing: ] }, date_separator: /
+
+
Non Triggering Examples
+
// notaTODO:
+
+
+
// notaFIXME:
+
+
+
// TODO: [12/31/9999]
+
+
+
// TODO(note)
+
+
+
// FIXME(note)
+
+
+
/* FIXME: */
+
+
+
/* TODO: */
+
+
+
/** FIXME: */
+
+
+
/** TODO: */
+
+
+
Triggering Examples
+
// TODO: [↓10/14/2019]
+
+
+
// FIXME: [↓10/14/2019]
+
+
+
// FIXME: [↓1/14/2019]
+
+
+
// FIXME: [↓10/14/2019]
+
+
+
// TODO: [↓9999/14/10]
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/explicit_acl.html b/explicit_acl.html
new file mode 100644
index 000000000..0a0c8e66d
--- /dev/null
+++ b/explicit_acl.html
@@ -0,0 +1,436 @@
+
+
+
+
explicit_acl Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SwiftLintFramework Reference
+
+ explicit_acl Reference
+
+
+
+
+
+
+
+
+
+
+
+
Explicit ACL
+
+
All declarations should specify Access Control Level keywords explicitly.
+
+
+Identifier: explicit_acl
+Enabled by default: No
+Supports autocorrection: No
+Kind: idiomatic
+Analyzer rule: No
+Minimum Swift compiler version: 5.0.0
+Default configuration: warning
+
+
Non Triggering Examples
+
internal enum A {}
+
+
+
public final class B {}
+
+
+
private struct C {}
+
+
+
internal enum A {
+ internal enum B {}
+}
+
+
internal final class Foo {}
+
+
internal
+class Foo {
+ private let bar = 5
+}
+
+
internal func a () { let a = }
+
+
+
private func a () { func innerFunction () { } }
+
+
private enum Foo { enum Bar { } }
+
+
private struct C { let d = 5 }
+
+
internal protocol A {
+ func b ()
+}
+
+
internal protocol A {
+ var b : Int
+}
+
+
internal class A { deinit {} }
+
+
extension A : Equatable {}
+
+
extension A {}
+
+
extension Foo {
+ internal func bar () {}
+}
+
+
internal enum Foo {
+ case bar
+}
+
+
extension Foo {
+ public var isValid : Bool {
+ let result = true
+ return result
+ }
+}
+
+
extension Foo {
+ private var isValid : Bool {
+ get {
+ return true
+ }
+ set ( newValue ) {
+ print ( newValue )
+ }
+ }
+}
+
+
Triggering Examples
+
↓ enum A {}
+
+
+
final ↓ class B {}
+
+
+
internal struct C { ↓ let d = 5 }
+
+
+
public struct C { ↓ let d = 5 }
+
+
+
func a () {}
+
+
+
internal let a = 0
+↓ func b () {}
+
+
+
extension Foo {
+ ↓ func bar () {}
+}
+
+
+
+
+
+
+
+
+
+
+
diff --git a/explicit_enum_raw_value.html b/explicit_enum_raw_value.html
new file mode 100644
index 000000000..530d7d543
--- /dev/null
+++ b/explicit_enum_raw_value.html
@@ -0,0 +1,396 @@
+
+
+
+
explicit_enum_raw_value Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SwiftLintFramework Reference
+
+ explicit_enum_raw_value Reference
+
+
+
+
+
+
+
+
+
+
+
+
Explicit Enum Raw Value
+
+
Enums should be explicitly assigned their raw values.
+
+
+Identifier: explicit_enum_raw_value
+Enabled by default: No
+Supports autocorrection: No
+Kind: idiomatic
+Analyzer rule: No
+Minimum Swift compiler version: 5.0.0
+Default configuration: warning
+
+
Non Triggering Examples
+
enum Numbers {
+ case int ( Int )
+ case short ( Int16 )
+}
+
+
enum Numbers : Int {
+ case one = 1
+ case two = 2
+}
+
+
enum Numbers : Double {
+ case one = 1.1
+ case two = 2.2
+}
+
+
enum Numbers : String {
+ case one = "one"
+ case two = "two"
+}
+
+
protocol Algebra {}
+enum Numbers : Algebra {
+ case one
+}
+
+
Triggering Examples
+
enum Numbers : Int {
+ case one = 10 , ↓ two , three = 30
+}
+
+
enum Numbers : NSInteger {
+ case ↓ one
+}
+
+
enum Numbers : String {
+ case ↓ one
+ case ↓ two
+}
+
+
enum Numbers : String {
+ case ↓ one , two = "two"
+}
+
+
enum Numbers : Decimal {
+ case ↓ one , ↓ two
+}
+
+
enum Outer {
+ enum Numbers : Decimal {
+ case ↓ one , ↓ two
+ }
+}
+
+
+
+
+
+
+
+
+
+
+
diff --git a/explicit_init.html b/explicit_init.html
new file mode 100644
index 000000000..5043c83de
--- /dev/null
+++ b/explicit_init.html
@@ -0,0 +1,394 @@
+
+
+
+
explicit_init Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SwiftLintFramework Reference
+
+ explicit_init Reference
+
+
+
+
+
+
+
+
+
+
+
+
Explicit Init
+
+
Explicitly calling .init() should be avoided.
+
+
+Identifier: explicit_init
+Enabled by default: No
+Supports autocorrection: Yes
+Kind: idiomatic
+Analyzer rule: No
+Minimum Swift compiler version: 5.0.0
+Default configuration: warning
+
+
Non Triggering Examples
+
import Foundation
+class C : NSObject {
+ override init () {
+ super . init ()
+ }
+}
+
+
struct S {
+ let n : Int
+}
+extension S {
+ init () {
+ self . init ( n : 1 )
+ }
+}
+
+
[ 1 ] . flatMap ( String . init )
+
+
[ String . self ] . map { $0 . init ( 1 ) }
+
+
[ String . self ] . map { type in type . init ( 1 ) }
+
+
Observable . zip ( obs1 , obs2 , resultSelector : MyType . init ) . asMaybe ()
+
+
_ = GleanMetrics . Tabs . someType . init ()
+
+
Observable . zip (
+ obs1 ,
+ obs2 ,
+ resultSelector : MyType . init
+) . asMaybe ()
+
+
Triggering Examples
+
[ 1 ] . flatMap { String ↓ . init ( $0 )}
+
+
[ String . self ] . map { Type in Type ↓ . init ( 1 ) }
+
+
func foo () -> [ String ] {
+ return [ 1 ] . flatMap { String ↓ . init ( $0 ) }
+}
+
+
_ = GleanMetrics . Tabs . GroupedTabExtra ↓ . init ()
+
+
_ = Set < KsApi . Category > ↓ . init ()
+
+
Observable . zip (
+ obs1 ,
+ obs2 ,
+ resultSelector : { MyType ↓ . init ( $0 , $1 ) }
+) . asMaybe ()
+
+
+
+
+
+
+
+
+
+
+
diff --git a/explicit_self.html b/explicit_self.html
new file mode 100644
index 000000000..7ad9d07b1
--- /dev/null
+++ b/explicit_self.html
@@ -0,0 +1,415 @@
+
+
+
+
explicit_self Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SwiftLintFramework Reference
+
+ explicit_self Reference
+
+
+
+
+
+
+
+
+
+
+
+
Explicit Self
+
+
Instance variables and functions should be explicitly accessed with ‘self.’.
+
+
+Identifier: explicit_self
+Enabled by default: No
+Supports autocorrection: Yes
+Kind: style
+Analyzer rule: Yes
+Minimum Swift compiler version: 5.0.0
+Default configuration: warning
+
+
Non Triggering Examples
+
struct A {
+ func f1 () {}
+ func f2 () {
+ self . f1 ()
+ }
+}
+
+
struct A {
+ let p1 : Int
+ func f1 () {
+ _ = self . p1
+ }
+}
+
+
@propertyWrapper
+struct Wrapper < Value > {
+ let wrappedValue : Value
+ var projectedValue : [ Value ] {
+ [ self . wrappedValue ]
+ }
+}
+struct A {
+ @Wrapper var p1 : Int
+ func f1 () {
+ self . $ p1
+ self . _p1
+ }
+}
+func f1 () {
+ A ( p1 : 10 ) . $ p1
+}
+
+
Triggering Examples
+
struct A {
+ func f1 () {}
+ func f2 () {
+ ↓ f1 ()
+ }
+}
+
+
struct A {
+ let p1 : Int
+ func f1 () {
+ _ = ↓ p1
+ }
+}
+
+
struct A {
+ func f1 ( a b : Int ) {}
+ func f2 () {
+ ↓ f1 ( a : 0 )
+ }
+}
+
+
@propertyWrapper
+struct Wrapper < Value > {
+ let wrappedValue : Value
+ var projectedValue : [ Value ] {
+ [ self . wrappedValue ]
+ }
+}
+struct A {
+ @Wrapper var p1 : Int
+ func f1 () {
+ ↓$ p1
+ ↓ _p1
+ }
+}
+func f1 () {
+ A ( p1 : 10 ) . $ p1
+}
+
+
+
+
+
+
+
+
+
+
+
diff --git a/explicit_top_level_acl.html b/explicit_top_level_acl.html
new file mode 100644
index 000000000..839408fa6
--- /dev/null
+++ b/explicit_top_level_acl.html
@@ -0,0 +1,385 @@
+
+
+
+
explicit_top_level_acl Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SwiftLintFramework Reference
+
+ explicit_top_level_acl Reference
+
+
+
+
+
+
+
+
+
+
+
+
Explicit Top Level ACL
+
+
Top-level declarations should specify Access Control Level keywords explicitly.
+
+
+Identifier: explicit_top_level_acl
+Enabled by default: No
+Supports autocorrection: No
+Kind: idiomatic
+Analyzer rule: No
+Minimum Swift compiler version: 5.0.0
+Default configuration: warning
+
+
Non Triggering Examples
+
internal enum A {}
+
+
+
public final class B {}
+
+
+
private struct C {}
+
+
+
internal enum A {
+ enum B {}
+}
+
+
internal final class Foo {}
+
+
internal
+class Foo {}
+
+
internal func a () {}
+
+
+
extension A : Equatable {}
+
+
extension A {}
+
+
Triggering Examples
+
↓ enum A {}
+
+
+
final ↓ class B {}
+
+
+
↓ struct C {}
+
+
+
↓ func a () {}
+
+
+
internal let a = 0
+↓ func b () {}
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/explicit_type_interface.html b/explicit_type_interface.html
new file mode 100644
index 000000000..acbe5c20c
--- /dev/null
+++ b/explicit_type_interface.html
@@ -0,0 +1,384 @@
+
+
+
+
explicit_type_interface Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SwiftLintFramework Reference
+
+ explicit_type_interface Reference
+
+
+
+
+
+
+
+
+
+
+
+
Explicit Type Interface
+
+
Properties should have a type interface
+
+
+Identifier: explicit_type_interface
+Enabled by default: No
+Supports autocorrection: No
+Kind: idiomatic
+Analyzer rule: No
+Minimum Swift compiler version: 5.0.0
+Default configuration: warning, excluded: [], allow_redundancy: false
+
+
Non Triggering Examples
+
class Foo {
+ var myVar : Int ? = 0
+}
+
+
class Foo {
+ let myVar : Int ? = 0
+}
+
+
class Foo {
+ static var myVar : Int ? = 0
+}
+
+
class Foo {
+ class var myVar : Int ? = 0
+}
+
+
Triggering Examples
+
class Foo {
+ ↓ var myVar = 0
+}
+
+
class Foo {
+ ↓ let mylet = 0
+}
+
+
class Foo {
+ ↓ static var myStaticVar = 0
+}
+
+
class Foo {
+ ↓ class var myClassVar = 0
+}
+
+
class Foo {
+ ↓ let myVar = Int ( 0 )
+}
+
+
class Foo {
+ ↓ let myVar = Set < Int > ( 0 )
+}
+
+
+
+
+
+
+
+
+
+
+
diff --git a/extension_access_modifier.html b/extension_access_modifier.html
new file mode 100644
index 000000000..06e5ab335
--- /dev/null
+++ b/extension_access_modifier.html
@@ -0,0 +1,407 @@
+
+
+
+
extension_access_modifier Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SwiftLintFramework Reference
+
+ extension_access_modifier Reference
+
+
+
+
+
+
+
+
+
+
+
+
Extension Access Modifier
+
+
Prefer to use extension access modifiers
+
+
+Identifier: extension_access_modifier
+Enabled by default: No
+Supports autocorrection: No
+Kind: idiomatic
+Analyzer rule: No
+Minimum Swift compiler version: 5.0.0
+Default configuration: warning
+
+
Non Triggering Examples
+
extension Foo : SomeProtocol {
+ public var bar : Int { return 1 }
+}
+
+
extension Foo {
+ private var bar : Int { return 1 }
+ public var baz : Int { return 1 }
+}
+
+
extension Foo {
+ private var bar : Int { return 1 }
+ public func baz () {}
+}
+
+
extension Foo {
+ var bar : Int { return 1 }
+ var baz : Int { return 1 }
+}
+
+
public extension Foo {
+ var bar : Int { return 1 }
+ var baz : Int { return 1 }
+}
+
+
extension Foo {
+ private bar : Int { return 1 }
+ private baz : Int { return 1 }
+}
+
+
extension Foo {
+ open bar : Int { return 1 }
+ open baz : Int { return 1 }
+}
+
+
extension Foo {
+ func setup () {}
+ public func update () {}
+}
+
+
Triggering Examples
+
↓ extension Foo {
+ public var bar : Int { return 1 }
+ public var baz : Int { return 1 }
+}
+
+
↓ extension Foo {
+ public var bar : Int { return 1 }
+ public func baz () {}
+}
+
+
public extension Foo {
+ public ↓ func bar () {}
+ public ↓ func baz () {}
+}
+
+
↓ extension Foo {
+ public var bar : Int {
+ let value = 1
+ return value
+ }
+
+ public var baz : Int { return 1 }
+}
+
+
+
+
+
+
+
+
+
+
+
diff --git a/fallthrough.html b/fallthrough.html
new file mode 100644
index 000000000..9f1916057
--- /dev/null
+++ b/fallthrough.html
@@ -0,0 +1,356 @@
+
+
+
+
fallthrough Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SwiftLintFramework Reference
+
+ fallthrough Reference
+
+
+
+
+
+
+
+
+
+
+
+
Fallthrough
+
+
Fallthrough should be avoided.
+
+
+Identifier: fallthrough
+Enabled by default: No
+Supports autocorrection: No
+Kind: idiomatic
+Analyzer rule: No
+Minimum Swift compiler version: 5.0.0
+Default configuration: warning
+
+
Non Triggering Examples
+
switch foo {
+case . bar , . bar2 , . bar3 :
+ something ()
+}
+
+
Triggering Examples
+
switch foo {
+case . bar :
+ ↓ fallthrough
+case . bar2 :
+ something ()
+}
+
+
+
+
+
+
+
+
+
+
+
diff --git a/fatal_error_message.html b/fatal_error_message.html
new file mode 100644
index 000000000..3ca80da9a
--- /dev/null
+++ b/fatal_error_message.html
@@ -0,0 +1,360 @@
+
+
+
+
fatal_error_message Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SwiftLintFramework Reference
+
+ fatal_error_message Reference
+
+
+
+
+
+
+
+
+
+
+
+
Fatal Error Message
+
+
A fatalError call should have a message.
+
+
+Identifier: fatal_error_message
+Enabled by default: No
+Supports autocorrection: No
+Kind: idiomatic
+Analyzer rule: No
+Minimum Swift compiler version: 5.0.0
+Default configuration: warning
+
+
Non Triggering Examples
+
func foo () {
+ fatalError ( "Foo" )
+}
+
+
func foo () {
+ fatalError ( x )
+}
+
+
Triggering Examples
+
func foo () {
+ ↓ fatalError ( "" )
+}
+
+
func foo () {
+ ↓ fatalError ()
+}
+
+
+
+
+
+
+
+
+
+
+
diff --git a/file_header.html b/file_header.html
new file mode 100644
index 000000000..e1d897b68
--- /dev/null
+++ b/file_header.html
@@ -0,0 +1,365 @@
+
+
+
+
file_header Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SwiftLintFramework Reference
+
+ file_header Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Header comments should be consistent with project patterns. The SWIFTLINT_CURRENT_FILENAME placeholder can optionally be used in the required and forbidden patterns. It will be replaced by the real file name.
+
+
+Identifier: file_header
+Enabled by default: No
+Supports autocorrection: No
+Kind: style
+Analyzer rule: No
+Minimum Swift compiler version: 5.0.0
+Default configuration: warning, required_string: None, required_pattern: None, forbidden_string: None, forbidden_pattern: None
+
+
Non Triggering Examples
+
let foo = "Copyright"
+
+
let foo = 2 // Copyright
+
+
let foo = 2
+ // Copyright
+
+
Triggering Examples
+
// ↓Copyright
+
+
+
//
+// ↓Copyright
+
+
//
+// FileHeaderRule.swift
+// SwiftLint
+//
+// Created by Marcelo Fabri on 27/11/16.
+// ↓Copyright © 2016 Realm. All rights reserved.
+//
+
+
+
+
+
+
+
+
+
+
+
diff --git a/file_length.html b/file_length.html
new file mode 100644
index 000000000..fcf36b1b5
--- /dev/null
+++ b/file_length.html
@@ -0,0 +1,1955 @@
+
+
+
+
file_length Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SwiftLintFramework Reference
+
+ file_length Reference
+
+
+
+
+
+
+
+
+
+
+
+
File Length
+
+
Files should not span too many lines.
+
+
+Identifier: file_length
+Enabled by default: Yes
+Supports autocorrection: No
+Kind: metrics
+Analyzer rule: No
+Minimum Swift compiler version: 5.0.0
+Default configuration: warning: 400, error: 1000, ignore_comment_only_lines: false
+
+
Non Triggering Examples
+
print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+
+
+
Triggering Examples
+
print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+
+
+
print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+print ( "swiftlint" )
+//
+
+
+
print ( "swiftlint" )
+
+print ( "swiftlint" )
+
+print ( "swiftlint" )
+
+print ( "swiftlint" )
+
+print ( "swiftlint" )
+
+print ( "swiftlint" )
+
+print ( "swiftlint" )
+
+print ( "swiftlint" )
+
+print ( "swiftlint" )
+
+print ( "swiftlint" )
+
+print ( "swiftlint" )
+
+print ( "swiftlint" )
+
+print ( "swiftlint" )
+
+print ( "swiftlint" )
+
+print ( "swiftlint" )
+
+print ( "swiftlint" )
+
+print ( "swiftlint" )
+
+print ( "swiftlint" )
+
+print ( "swiftlint" )
+
+print ( "swiftlint" )
+
+print ( "swiftlint" )
+
+print ( "swiftlint" )
+
+print ( "swiftlint" )
+
+print ( "swiftlint" )
+
+print ( "swiftlint" )
+
+print ( "swiftlint" )
+
+print ( "swiftlint" )
+
+print ( "swiftlint" )
+
+print ( "swiftlint" )
+
+print ( "swiftlint" )
+
+print ( "swiftlint" )
+
+print ( "swiftlint" )
+
+print ( "swiftlint" )
+
+print ( "swiftlint" )
+
+print ( "swiftlint" )
+
+print ( "swiftlint" )
+
+print ( "swiftlint" )
+
+print ( "swiftlint" )
+
+print ( "swiftlint" )
+
+print ( "swiftlint" )
+
+print ( "swiftlint" )
+
+print ( "swiftlint" )
+
+print ( "swiftlint" )
+
+print ( "swiftlint" )
+
+print ( "swiftlint" )
+
+print ( "swiftlint" )
+
+print ( "swiftlint" )
+
+print ( "swiftlint" )
+
+print ( "swiftlint" )
+
+print ( "swiftlint" )
+
+print ( "swiftlint" )
+
+print ( "swiftlint" )
+
+print ( "swiftlint" )
+
+print ( "swiftlint" )
+
+print ( "swiftlint" )
+
+print ( "swiftlint" )
+
+print ( "swiftlint" )
+
+print ( "swiftlint" )
+
+print ( "swiftlint" )
+
+print ( "swiftlint" )
+
+print ( "swiftlint" )
+
+print ( "swiftlint" )
+
+print ( "swiftlint" )
+
+print ( "swiftlint" )
+
+print ( "swiftlint" )
+
+print ( "swiftlint" )
+
+print ( "swiftlint" )
+
+print ( "swiftlint" )
+
+print ( "swiftlint" )
+
+print ( "swiftlint" )
+
+print ( "swiftlint" )
+
+print ( "swiftlint" )
+
+print ( "swiftlint" )
+
+print ( "swiftlint" )
+
+print ( "swiftlint" )
+
+print ( "swiftlint" )
+
+print ( "swiftlint" )
+
+print ( "swiftlint" )
+
+print ( "swiftlint" )
+
+print ( "swiftlint" )
+
+print ( "swiftlint" )
+
+print ( "swiftlint" )
+
+print ( "swiftlint" )
+
+print ( "swiftlint" )
+
+print ( "swiftlint" )
+
+print ( "swiftlint" )
+
+print ( "swiftlint" )
+
+print ( "swiftlint" )
+
+print ( "swiftlint" )
+
+print ( "swiftlint" )
+
+print ( "swiftlint" )
+
+print ( "swiftlint" )
+
+print ( "swiftlint" )
+
+print ( "swiftlint" )
+
+print ( "swiftlint" )
+
+print ( "swiftlint" )
+
+print ( "swiftlint" )
+
+print ( "swiftlint" )
+
+print ( "swiftlint" )
+
+print ( "swiftlint" )
+
+print ( "swiftlint" )
+
+print ( "swiftlint" )
+
+print ( "swiftlint" )
+
+print ( "swiftlint" )
+
+print ( "swiftlint" )
+
+print ( "swiftlint" )
+
+print ( "swiftlint" )
+
+print ( "swiftlint" )
+
+print ( "swiftlint" )
+
+print ( "swiftlint" )
+
+print ( "swiftlint" )
+
+print ( "swiftlint" )
+
+print ( "swiftlint" )
+
+print ( "swiftlint" )
+
+print ( "swiftlint" )
+
+print ( "swiftlint" )
+
+print ( "swiftlint" )
+
+print ( "swiftlint" )
+
+print ( "swiftlint" )
+
+print ( "swiftlint" )
+
+print ( "swiftlint" )
+
+print ( "swiftlint" )
+
+print ( "swiftlint" )
+
+print ( "swiftlint" )
+
+print ( "swiftlint" )
+
+print ( "swiftlint" )
+
+print ( "swiftlint" )
+
+print ( "swiftlint" )
+
+print ( "swiftlint" )
+
+print ( "swiftlint" )
+
+print ( "swiftlint" )
+
+print ( "swiftlint" )
+
+print ( "swiftlint" )
+
+print ( "swiftlint" )
+
+print ( "swiftlint" )
+
+print ( "swiftlint" )
+
+print ( "swiftlint" )
+
+print ( "swiftlint" )
+
+print ( "swiftlint" )
+
+print ( "swiftlint" )
+
+print ( "swiftlint" )
+
+print ( "swiftlint" )
+
+print ( "swiftlint" )
+
+print ( "swiftlint" )
+
+print ( "swiftlint" )
+
+print ( "swiftlint" )
+
+print ( "swiftlint" )
+
+print ( "swiftlint" )
+
+print ( "swiftlint" )
+
+print ( "swiftlint" )
+
+print ( "swiftlint" )
+
+print ( "swiftlint" )
+
+print ( "swiftlint" )
+
+print ( "swiftlint" )
+
+print ( "swiftlint" )
+
+print ( "swiftlint" )
+
+print ( "swiftlint" )
+
+print ( "swiftlint" )
+
+print ( "swiftlint" )
+
+print ( "swiftlint" )
+
+print ( "swiftlint" )
+
+print ( "swiftlint" )
+
+print ( "swiftlint" )
+
+print ( "swiftlint" )
+
+print ( "swiftlint" )
+
+print ( "swiftlint" )
+
+print ( "swiftlint" )
+
+print ( "swiftlint" )
+
+print ( "swiftlint" )
+
+print ( "swiftlint" )
+
+print ( "swiftlint" )
+
+print ( "swiftlint" )
+
+print ( "swiftlint" )
+
+print ( "swiftlint" )
+
+print ( "swiftlint" )
+
+print ( "swiftlint" )
+
+print ( "swiftlint" )
+
+print ( "swiftlint" )
+
+print ( "swiftlint" )
+
+print ( "swiftlint" )
+
+print ( "swiftlint" )
+
+print ( "swiftlint" )
+
+print ( "swiftlint" )
+
+print ( "swiftlint" )
+
+print ( "swiftlint" )
+
+print ( "swiftlint" )
+
+print ( "swiftlint" )
+
+print ( "swiftlint" )
+
+print ( "swiftlint" )
+
+print ( "swiftlint" )
+
+print ( "swiftlint" )
+
+print ( "swiftlint" )
+
+print ( "swiftlint" )
+
+print ( "swiftlint" )
+
+print ( "swiftlint" )
+
+print ( "swiftlint" )
+
+print ( "swiftlint" )
+
+print ( "swiftlint" )
+
+print ( "swiftlint" )
+
+print ( "swiftlint" )
+
+print ( "swiftlint" )
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/file_name.html b/file_name.html
new file mode 100644
index 000000000..36e15614a
--- /dev/null
+++ b/file_name.html
@@ -0,0 +1,342 @@
+
+
+
+
file_name Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SwiftLintFramework Reference
+
+ file_name Reference
+
+
+
+
+
+
+
+
+
+
+
+
File Name
+
+
File name should match a type or extension declared in the file (if any).
+
+
+Identifier: file_name
+Enabled by default: No
+Supports autocorrection: No
+Kind: idiomatic
+Analyzer rule: No
+Minimum Swift compiler version: 5.0.0
+Default configuration: (severity) warning, excluded: [“LinuxMain.swift”, “main.swift”], prefix_pattern: , suffix_pattern: +.*, nested_type_separator: .
+
+
+
+
+
+
+
+
+
+
+
diff --git a/file_name_no_space.html b/file_name_no_space.html
new file mode 100644
index 000000000..2b8aa27f3
--- /dev/null
+++ b/file_name_no_space.html
@@ -0,0 +1,342 @@
+
+
+
+
file_name_no_space Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SwiftLintFramework Reference
+
+ file_name_no_space Reference
+
+
+
+
+
+
+
+
+
+
+
+
File Name No Space
+
+
File name should not contain any whitespace.
+
+
+Identifier: file_name_no_space
+Enabled by default: No
+Supports autocorrection: No
+Kind: idiomatic
+Analyzer rule: No
+Minimum Swift compiler version: 5.0.0
+Default configuration: (severity) warning, excluded: []
+
+
+
+
+
+
+
+
+
+
+
diff --git a/file_types_order.html b/file_types_order.html
new file mode 100644
index 000000000..c97e9e28a
--- /dev/null
+++ b/file_types_order.html
@@ -0,0 +1,549 @@
+
+
+
+
file_types_order Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SwiftLintFramework Reference
+
+ file_types_order Reference
+
+
+
+
+
+
+
+
+
+
+
+
File Types Order
+
+
Specifies how the types within a file should be ordered.
+
+
+Identifier: file_types_order
+Enabled by default: No
+Supports autocorrection: No
+Kind: style
+Analyzer rule: No
+Minimum Swift compiler version: 5.0.0
+Default configuration: warning, order: [[SwiftLintFramework.FileType.supportingType], [SwiftLintFramework.FileType.mainType], [SwiftLintFramework.FileType.extension], [SwiftLintFramework.FileType.previewProvider], [SwiftLintFramework.FileType.libraryContentProvider]]
+
+
Non Triggering Examples
+
// Supporting Types
+protocol TestViewControllerDelegate {
+ func didPressTrackedButton ()
+}
+
+// Main Type
+class TestViewController : UIViewController {
+ // Type Aliases
+ typealias CompletionHandler = (( TestEnum ) -> Void )
+
+ // Subtypes
+ class TestClass {
+ // 10 lines
+ }
+
+ struct TestStruct {
+ // 3 lines
+ }
+
+ enum TestEnum {
+ // 5 lines
+ }
+
+ // Stored Type Properties
+ static let cellIdentifier : String = "AmazingCell"
+
+ // Stored Instance Properties
+ var shouldLayoutView1 : Bool !
+ weak var delegate : TestViewControllerDelegate ?
+ private var hasLayoutedView1 : Bool = false
+ private var hasLayoutedView2 : Bool = false
+
+ // Computed Instance Properties
+ private var hasAnyLayoutedView : Bool {
+ return hasLayoutedView1 || hasLayoutedView2
+ }
+
+ // IBOutlets
+ @IBOutlet private var view1 : UIView !
+ @IBOutlet private var view2 : UIView !
+
+ // Initializers
+ override init ( nibName nibNameOrNil : String ?, bundle nibBundleOrNil : Bundle ?) {
+ super . init ( nibName : nibNameOrNil , bundle : nibBundleOrNil )
+ }
+
+ required init ?( coder aDecoder : NSCoder ) {
+ fatalError ( "init(coder:) has not been implemented" )
+ }
+
+ // Type Methods
+ static func makeViewController () -> TestViewController {
+ // some code
+ }
+
+ // Life-Cycle Methods
+ override func viewDidLoad () {
+ super . viewDidLoad ()
+ }
+
+ override func viewDidLayoutSubviews () {
+ super . viewDidLayoutSubviews ()
+ }
+
+ // IBActions
+ @IBAction func goNextButtonPressed () {
+ goToNextVc ()
+ delegate ? . didPressTrackedButton ()
+ }
+
+ @objc
+ func goToRandomVcButtonPressed () {
+ goToRandomVc ()
+ }
+
+ // MARK: Other Methods
+ func goToNextVc () { /* TODO */ }
+
+ func goToInfoVc () { /* TODO */ }
+
+ func goToRandomVc () {
+ let viewCtrl = getRandomVc ()
+ present ( viewCtrl , animated : true )
+ }
+
+ private func getRandomVc () -> UIViewController { return UIViewController () }
+
+ // Subscripts
+ subscript ( _ someIndexThatIsNotEvenUsed : Int ) -> String {
+ get {
+ return "This is just a test"
+ }
+
+ set {
+ log . warning ( "Just a test" , newValue )
+ }
+ }
+}
+
+// Extensions
+extension TestViewController : UITableViewDataSource {
+ func tableView ( _ tableView : UITableView , numberOfRowsInSection section : Int ) -> Int {
+ return 1
+ }
+}
+
+
// Only extensions
+extension Foo {}
+extension Bar {
+}
+
+
// Main Type
+struct ContentView : View {
+ var body : some View {
+ Text ( "Hello, World!" )
+ }
+}
+
+// Preview Provider
+struct ContentView_Previews : PreviewProvider {
+ static var previews : some View { ContentView () }
+}
+
+// Library Content Provider
+struct ContentView_LibraryContent : LibraryContentProvider {
+ var views : [ LibraryItem ] {
+ LibraryItem ( ContentView ())
+ }
+}
+
+
Triggering Examples
+
↓ class TestViewController : UIViewController {}
+
+// Supporting Types
+protocol TestViewControllerDelegate {
+ func didPressTrackedButton ()
+}
+
+
// Extensions
+↓ extension TestViewController : UITableViewDataSource {
+ func tableView ( _ tableView : UITableView , numberOfRowsInSection section : Int ) -> Int {
+ return 1
+ }
+}
+
+class TestViewController : UIViewController {}
+
+
// Supporting Types
+protocol TestViewControllerDelegate {
+ func didPressTrackedButton ()
+}
+
+↓ class TestViewController : UIViewController {}
+
+// Supporting Types
+protocol TestViewControllerDelegate {
+ func didPressTrackedButton ()
+}
+
+
// Supporting Types
+protocol TestViewControllerDelegate {
+ func didPressTrackedButton ()
+}
+
+// Extensions
+↓ extension TestViewController : UITableViewDataSource {
+ func tableView ( _ tableView : UITableView , numberOfRowsInSection section : Int ) -> Int {
+ return 1
+ }
+}
+
+class TestViewController : UIViewController {}
+
+// Extensions
+extension TestViewController : UITableViewDataSource {
+ func tableView ( _ tableView : UITableView , numberOfRowsInSection section : Int ) -> Int {
+ return 1
+ }
+}
+
+
// Preview Provider
+↓ struct ContentView_Previews : PreviewProvider {
+ static var previews : some View { ContentView () }
+}
+
+// Main Type
+struct ContentView : View {
+ var body : some View {
+ Text ( "Hello, World!" )
+ }
+}
+
+
// Library Content Provider
+↓ struct ContentView_LibraryContent : LibraryContentProvider {
+ var views : [ LibraryItem ] {
+ LibraryItem ( ContentView ())
+ }
+}
+
+// Main Type
+struct ContentView : View {
+ var body : some View {
+ Text ( "Hello, World!" )
+ }
+}
+
+
+
+
+
+
+
+
+
+
+
diff --git a/first_where.html b/first_where.html
new file mode 100644
index 000000000..bb7827c99
--- /dev/null
+++ b/first_where.html
@@ -0,0 +1,388 @@
+
+
+
+
first_where Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SwiftLintFramework Reference
+
+ first_where Reference
+
+
+
+
+
+
+
+
+
+
+
+
First Where
+
+
Prefer using .first(where:) over .filter { }.first in collections.
+
+
+Identifier: first_where
+Enabled by default: No
+Supports autocorrection: No
+Kind: performance
+Analyzer rule: No
+Minimum Swift compiler version: 5.0.0
+Default configuration: warning
+
+
Non Triggering Examples
+
kinds . filter ( excludingKinds . contains ) . isEmpty && kinds . first == . identifier
+
+
+
myList . first ( where : { $0 % 2 == 0 })
+
+
+
match ( pattern : pattern ) . filter { $0 . first == . identifier }
+
+
+
( myList . filter { $0 == 1 } . suffix ( 2 )) . first
+
+
+
collection . filter ( "stringCol = '3'" ) . first
+
+
realm ? . objects ( User . self ) . filter ( NSPredicate ( format : "email ==[c] %@" , email )) . first
+
+
if let pause = timeTracker . pauses . filter ( "beginDate < %@" , beginDate ) . first { print ( pause ) }
+
+
Triggering Examples
+
↓ myList . filter { $0 % 2 == 0 } . first
+
+
+
↓ myList . filter ({ $0 % 2 == 0 }) . first
+
+
+
↓ myList . map { $0 + 1 } . filter ({ $0 % 2 == 0 }) . first
+
+
+
↓ myList . map { $0 + 1 } . filter ({ $0 % 2 == 0 }) . first ? . something ()
+
+
+
↓ myList . filter ( someFunction ) . first
+
+
+
↓ myList . filter ({ $0 % 2 == 0 })
+. first
+
+
+
( ↓ myList . filter { $0 == 1 }) . first
+
+
+
↓ myListOfDict . filter { dict in dict [ "1" ] } . first
+
+
↓ myListOfDict . filter { $0 [ "someString" ] } . first
+
+
+
+
+
+
+
+
+
+
+
diff --git a/flatmap_over_map_reduce.html b/flatmap_over_map_reduce.html
new file mode 100644
index 000000000..ec263f704
--- /dev/null
+++ b/flatmap_over_map_reduce.html
@@ -0,0 +1,350 @@
+
+
+
+
flatmap_over_map_reduce Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SwiftLintFramework Reference
+
+ flatmap_over_map_reduce Reference
+
+
+
+
+
+
+
+
+
+
+
+
FlatMap over map and reduce
+
+
Prefer flatMap over map followed by reduce([], +).
+
+
+Identifier: flatmap_over_map_reduce
+Enabled by default: No
+Supports autocorrection: No
+Kind: performance
+Analyzer rule: No
+Minimum Swift compiler version: 5.0.0
+Default configuration: warning
+
+
Non Triggering Examples
+
let foo = bar . map { $0 . count } . reduce ( 0 , + )
+
+
let foo = bar . flatMap { $0 . array }
+
+
Triggering Examples
+
let foo = ↓ bar . map { $0 . array } . reduce ([], + )
+
+
+
+
+
+
+
+
+
+
+
diff --git a/for_where.html b/for_where.html
new file mode 100644
index 000000000..c2b45dc36
--- /dev/null
+++ b/for_where.html
@@ -0,0 +1,421 @@
+
+
+
+
for_where Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SwiftLintFramework Reference
+
+ for_where Reference
+
+
+
+
+
+
+
+
+
+
+
+
For Where
+
+
where clauses are preferred over a single if inside a for.
+
+
+Identifier: for_where
+Enabled by default: Yes
+Supports autocorrection: No
+Kind: idiomatic
+Analyzer rule: No
+Minimum Swift compiler version: 5.0.0
+Default configuration: warning, allow_for_as_filter: false
+
+
Non Triggering Examples
+
for user in users where user . id == 1 { }
+
+
for user in users {
+ if let id = user . id { }
+}
+
+
for user in users {
+ if var id = user . id { }
+}
+
+
for user in users {
+ if user . id == 1 { } else { }
+}
+
+
for user in users {
+ if user . id == 1 {
+ } else if user . id == 2 { }
+}
+
+
for user in users {
+ if user . id == 1 { }
+ print ( user )
+}
+
+
for user in users {
+ let id = user . id
+ if id == 1 { }
+}
+
+
for user in users {
+ if user . id == 1 { }
+ return true
+}
+
+
for user in users {
+ if user . id == 1 && user . age > 18 { }
+}
+
+
for user in users {
+ if user . id == 1 , user . age > 18 { }
+}
+
+
for ( index , value ) in array . enumerated () {
+ if case . valueB ( _ ) = value {
+ return index
+ }
+}
+
+
for user in users {
+ if user . id == 1 { return true }
+}
+
+
for user in users {
+ if user . id == 1 {
+ let derivedValue = calculateValue ( from : user )
+ return derivedValue != 0
+ }
+}
+
+
Triggering Examples
+
for user in users {
+ ↓ if user . id == 1 { return true }
+}
+
+
for subview in subviews {
+ ↓ if ! ( subview is UIStackView ) {
+ subview . removeConstraints ( subview . constraints )
+ subview . removeFromSuperview ()
+ }
+}
+
+
for subview in subviews {
+ ↓ if ! ( subview is UIStackView ) {
+ subview . removeConstraints ( subview . constraints )
+ subview . removeFromSuperview ()
+ }
+}
+
+
+
+
+
+
+
+
+
+
+
diff --git a/force_cast.html b/force_cast.html
new file mode 100644
index 000000000..8280d9811
--- /dev/null
+++ b/force_cast.html
@@ -0,0 +1,350 @@
+
+
+
+
force_cast Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SwiftLintFramework Reference
+
+ force_cast Reference
+
+
+
+
+
+
+
+
+
+
+
+
Force Cast
+
+
Force casts should be avoided.
+
+
+Identifier: force_cast
+Enabled by default: Yes
+Supports autocorrection: No
+Kind: idiomatic
+Analyzer rule: No
+Minimum Swift compiler version: 5.0.0
+Default configuration: error
+
+
Non Triggering Examples
+
NSNumber () as? Int
+
+
+
Triggering Examples
+
NSNumber () ↓ as! Int
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/force_try.html b/force_try.html
new file mode 100644
index 000000000..97695fad2
--- /dev/null
+++ b/force_try.html
@@ -0,0 +1,352 @@
+
+
+
+
force_try Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SwiftLintFramework Reference
+
+ force_try Reference
+
+
+
+
+
+
+
+
+
+
+
+
Force Try
+
+
Force tries should be avoided.
+
+
+Identifier: force_try
+Enabled by default: Yes
+Supports autocorrection: No
+Kind: idiomatic
+Analyzer rule: No
+Minimum Swift compiler version: 5.0.0
+Default configuration: error
+
+
Non Triggering Examples
+
func a () throws {}
+do {
+ try a ()
+} catch {}
+
+
Triggering Examples
+
func a () throws {}
+↓ try! a ()
+
+
+
+
+
+
+
+
+
+
+
diff --git a/force_unwrapping.html b/force_unwrapping.html
new file mode 100644
index 000000000..50f28937b
--- /dev/null
+++ b/force_unwrapping.html
@@ -0,0 +1,422 @@
+
+
+
+
force_unwrapping Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SwiftLintFramework Reference
+
+ force_unwrapping Reference
+
+
+
+
+
+
+
+
+
+
+
+
Force Unwrapping
+
+
Force unwrapping should be avoided.
+
+
+Identifier: force_unwrapping
+Enabled by default: No
+Supports autocorrection: No
+Kind: idiomatic
+Analyzer rule: No
+Minimum Swift compiler version: 5.0.0
+Default configuration: warning
+
+
Non Triggering Examples
+
if let url = NSURL ( string : query )
+
+
navigationController ? . pushViewController ( viewController , animated : true )
+
+
let s as! Test
+
+
try! canThrowErrors ()
+
+
let object : Any !
+
+
@IBOutlet var constraints : [ NSLayoutConstraint ] !
+
+
setEditing ( ! editing , animated : true )
+
+
navigationController . setNavigationBarHidden ( ! navigationController . navigationBarHidden , animated : true )
+
+
if addedToPlaylist && ( ! self . selectedFilters . isEmpty || self . searchBar ? . text ? . isEmpty == false ) {}
+
+
print ( " \( xVar ) !" )
+
+
var test = ( ! bar )
+
+
var a : [ Int ] !
+
+
private var myProperty : ( Void -> Void ) !
+
+
func foo ( _ options : [ AnyHashable : Any ] ! ) {
+
+
func foo () -> [ Int ] !
+
+
func foo () -> [ AnyHashable : Any ] !
+
+
func foo () -> [ Int ] ! { return [] }
+
+
return self
+
+
Triggering Examples
+
let url = NSURL ( string : query ) ↓ !
+
+
navigationController ↓ !. pushViewController ( viewController , animated : true )
+
+
let unwrapped = optional ↓ !
+
+
return cell ↓ !
+
+
let url = NSURL ( string : "http://www.google.com" ) ↓ !
+
+
let dict = [ "Boooo" : "👻" ]
+func bla () -> String {
+ return dict [ "Boooo" ] ↓ !
+}
+
+
let dict = [ "Boooo" : "👻" ]
+func bla () -> String {
+ return dict [ "Boooo" ] ↓ !. contains ( "B" )
+}
+
+
let a = dict [ "abc" ] ↓ !. contains ( "B" )
+
+
dict [ "abc" ] ↓ !. bar ( "B" )
+
+
if dict [ "a" ] ↓ ! ↓ ! ↓ ! ↓ ! {}
+
+
var foo : [ Bool ] ! = dict [ "abc" ] ↓ !
+
+
realm . objects ( SwiftUTF8Object . self ) . filter ( "%K == %@" , "柱нǢкƱаم👍" , utf8TestString ) . first ↓ !
+
+
context ( "abc" ) {
+ var foo : [ Bool ] ! = dict [ "abc" ] ↓ !
+}
+
+
open var computed : String { return foo . bar ↓ ! }
+
+
return self ↓ !
+
+
[ 1 , 3 , 5 , 6 ] . first { $0 . isMultiple ( of : 2 ) } ↓ !
+
+
map [ "a" ] ↓ ! ↓ !
+
+
+
+
+
+
+
+
+
+
+
diff --git a/function_body_length.html b/function_body_length.html
new file mode 100644
index 000000000..b1c6fbfdd
--- /dev/null
+++ b/function_body_length.html
@@ -0,0 +1,342 @@
+
+
+
+
function_body_length Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SwiftLintFramework Reference
+
+ function_body_length Reference
+
+
+
+
+
+
+
+
+
+
+
+
Function Body Length
+
+
Functions bodies should not span too many lines.
+
+
+Identifier: function_body_length
+Enabled by default: Yes
+Supports autocorrection: No
+Kind: metrics
+Analyzer rule: No
+Minimum Swift compiler version: 5.0.0
+Default configuration: warning: 50, error: 100
+
+
+
+
+
+
+
+
+
+
+
diff --git a/function_default_parameter_at_end.html b/function_default_parameter_at_end.html
new file mode 100644
index 000000000..a5b0e483d
--- /dev/null
+++ b/function_default_parameter_at_end.html
@@ -0,0 +1,382 @@
+
+
+
+
function_default_parameter_at_end Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SwiftLintFramework Reference
+
+ function_default_parameter_at_end Reference
+
+
+
+
+
+
+
+
+
+
+
+
Function Default Parameter at End
+
+
Prefer to locate parameters with defaults toward the end of the parameter list.
+
+
+Identifier: function_default_parameter_at_end
+Enabled by default: No
+Supports autocorrection: No
+Kind: idiomatic
+Analyzer rule: No
+Minimum Swift compiler version: 5.0.0
+Default configuration: warning
+
+
Non Triggering Examples
+
func foo ( baz : String , bar : Int = 0 ) {}
+
+
func foo ( x : String , y : Int = 0 , z : CGFloat = 0 ) {}
+
+
func foo ( bar : String , baz : Int = 0 , z : () -> Void ) {}
+
+
func foo ( bar : String , z : () -> Void , baz : Int = 0 ) {}
+
+
func foo ( bar : Int = 0 ) {}
+
+
func foo () {}
+
+
class A : B {
+ override func foo ( bar : Int = 0 , baz : String ) {}
+
+
func foo ( bar : Int = 0 , completion : @escaping CompletionHandler ) {}
+
+
func foo ( a : Int , b : CGFloat = 0 ) {
+ let block = { ( error : Error ?) in }
+}
+
+
func foo ( a : String , b : String ? = nil ,
+ c : String ? = nil , d : @escaping AlertActionHandler = { _ in }) {}
+
+
override init ?( for date : Date = Date (), coordinate : CLLocationCoordinate2D ) {}
+
+
func handleNotification ( _ userInfo : NSDictionary ,
+ userInteraction : Bool = false ,
+ completionHandler : (( UIBackgroundFetchResult ) -> Void )?) {}
+
+
func write ( withoutNotifying tokens : [ NotificationToken ] = {}, _ block : (() throws -> Int )) {}
+
+
Triggering Examples
+
↓ func foo ( bar : Int = 0 , baz : String ) {}
+
+
private ↓ func foo ( bar : Int = 0 , baz : String ) {}
+
+
public ↓ init ?( for date : Date = Date (), coordinate : CLLocationCoordinate2D ) {}
+
+
+
+
+
+
+
+
+
+
+
diff --git a/function_parameter_count.html b/function_parameter_count.html
new file mode 100644
index 000000000..9be635040
--- /dev/null
+++ b/function_parameter_count.html
@@ -0,0 +1,375 @@
+
+
+
+
function_parameter_count Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SwiftLintFramework Reference
+
+ function_parameter_count Reference
+
+
+
+
+
+
+
+
+
+
+
+
Function Parameter Count
+
+
Number of function parameters should be low.
+
+
+Identifier: function_parameter_count
+Enabled by default: Yes
+Supports autocorrection: No
+Kind: metrics
+Analyzer rule: No
+Minimum Swift compiler version: 5.0.0
+Default configuration: warning: 5, error: 8ignores_default_parameters: true
+
+
Non Triggering Examples
+
init ( a : Int , b : Int , c : Int , d : Int , e : Int , f : Int ) {}
+
+
init ( a : Int , b : Int , c : Int , d : Int , e : Int , f : Int ) {}
+
+
` init `( a : Int , b : Int , c : Int , d : Int , e : Int , f : Int ) {}
+
+
init ?( a : Int , b : Int , c : Int , d : Int , e : Int , f : Int ) {}
+
+
init ? < T > ( a : T , b : Int , c : Int , d : Int , e : Int , f : Int ) {}
+
+
init ? < T : String > ( a : T , b : Int , c : Int , d : Int , e : Int , f : Int ) {}
+
+
func f2 ( p1 : Int , p2 : Int ) { }
+
+
func f ( a : Int , b : Int , c : Int , d : Int , x : Int = 42 ) {}
+
+
func f ( a : [ Int ], b : Int , c : Int , d : Int , f : Int ) -> [ Int ] {
+ let s = a . flatMap { $0 as? [ String : Int ] } ?? []}}
+
+
override func f ( a : Int , b : Int , c : Int , d : Int , e : Int , f : Int ) {}
+
+
Triggering Examples
+
↓ func f ( a : Int , b : Int , c : Int , d : Int , e : Int , f : Int ) {}
+
+
↓ func initialValue ( a : Int , b : Int , c : Int , d : Int , e : Int , f : Int ) {}
+
+
private ↓ func f ( a : Int , b : Int , c : Int , d : Int , e : Int , f : Int = 2 , g : Int ) {}
+
+
struct Foo {
+ init ( a : Int , b : Int , c : Int , d : Int , e : Int , f : Int ) {}
+ ↓ func bar ( a : Int , b : Int , c : Int , d : Int , e : Int , f : Int ) {}}
+
+
+
+
+
+
+
+
+
+
+
diff --git a/generic_type_name.html b/generic_type_name.html
new file mode 100644
index 000000000..c4cf3ab9b
--- /dev/null
+++ b/generic_type_name.html
@@ -0,0 +1,452 @@
+
+
+
+
generic_type_name Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SwiftLintFramework Reference
+
+ generic_type_name Reference
+
+
+
+
+
+
+
+
+
+
+
+
Generic Type Name
+
+
Generic type name should only contain alphanumeric characters, start with an uppercase character and span between 1 and 20 characters in length.
+
+
+Identifier: generic_type_name
+Enabled by default: Yes
+Supports autocorrection: No
+Kind: idiomatic
+Analyzer rule: No
+Minimum Swift compiler version: 5.0.0
+Default configuration: (min_length) w/e: 1/0, (max_length) w/e: 20/1000, excluded: [], allowed_symbols: [], validates_start_with_lowercase: true
+
+
Non Triggering Examples
+
func foo < T > () {}
+
+
+
func foo < T > () -> T {}
+
+
+
func foo < T , U > ( param : U ) -> T {}
+
+
+
func foo < T : Hashable , U : Rule > ( param : U ) -> T {}
+
+
+
struct Foo < T > {}
+
+
+
class Foo < T > {}
+
+
+
enum Foo < T > {}
+
+
+
func run ( _ options : NoOptions < CommandantError < () >> ) {}
+
+
+
func foo ( _ options : Set < type > ) {}
+
+
+
func < < T : Comparable > ( lhs : T ?, rhs : T ?) -> Bool
+
+
+
func configureWith ( data : Either < MessageThread , ( project : Project , backing : Backing ) > )
+
+
+
typealias StringDictionary < T > = Dictionary < String , T >
+
+
+
typealias BackwardTriple < T1 , T2 , T3 > = ( T3 , T2 , T1 )
+
+
+
typealias DictionaryOfStrings < T : Hashable > = Dictionary < T , String >
+
+
+
Triggering Examples
+
func foo < ↓ T_Foo > () {}
+
+
+
func foo < T , ↓ U_Foo > ( param : U_Foo ) -> T {}
+
+
+
func foo < ↓ TTTTTTTTTTTTTTTTTTTTT > () {}
+
+
+
func foo < ↓ type > () {}
+
+
+
typealias StringDictionary < ↓ T_Foo > = Dictionary < String , T_Foo >
+
+
+
typealias BackwardTriple < T1 , ↓ T2_Bar , T3 > = ( T3 , T2_Bar , T1 )
+
+
+
typealias DictionaryOfStrings < ↓ T_Foo : Hashable > = Dictionary < T_Foo , String >
+
+
+
class Foo < ↓ T_Foo > {}
+
+
+
class Foo < T , ↓ U_Foo > {}
+
+
+
class Foo < ↓ T_Foo , ↓ U_Foo > {}
+
+
+
class Foo < ↓ TTTTTTTTTTTTTTTTTTTTT > {}
+
+
+
class Foo < ↓ type > {}
+
+
+
struct Foo < ↓ T_Foo > {}
+
+
+
struct Foo < T , ↓ U_Foo > {}
+
+
+
struct Foo < ↓ T_Foo , ↓ U_Foo > {}
+
+
+
struct Foo < ↓ TTTTTTTTTTTTTTTTTTTTT > {}
+
+
+
struct Foo < ↓ type > {}
+
+
+
enum Foo < ↓ T_Foo > {}
+
+
+
enum Foo < T , ↓ U_Foo > {}
+
+
+
enum Foo < ↓ T_Foo , ↓ U_Foo > {}
+
+
+
enum Foo < ↓ TTTTTTTTTTTTTTTTTTTTT > {}
+
+
+
enum Foo < ↓ type > {}
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/ibinspectable_in_extension.html b/ibinspectable_in_extension.html
new file mode 100644
index 000000000..f432455a1
--- /dev/null
+++ b/ibinspectable_in_extension.html
@@ -0,0 +1,352 @@
+
+
+
+
ibinspectable_in_extension Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SwiftLintFramework Reference
+
+ ibinspectable_in_extension Reference
+
+
+
+
+
+
+
+
+
+
+
+
IBInspectable in Extension
+
+
Extensions shouldn’t add @IBInspectable properties.
+
+
+Identifier: ibinspectable_in_extension
+Enabled by default: No
+Supports autocorrection: No
+Kind: lint
+Analyzer rule: No
+Minimum Swift compiler version: 5.0.0
+Default configuration: warning
+
+
Non Triggering Examples
+
class Foo {
+ @IBInspectable private var x : Int
+}
+
+
Triggering Examples
+
extension Foo {
+ ↓ @IBInspectable private var x : Int
+}
+
+
+
+
+
+
+
+
+
+
+
diff --git a/identical_operands.html b/identical_operands.html
new file mode 100644
index 000000000..e5480bd2b
--- /dev/null
+++ b/identical_operands.html
@@ -0,0 +1,830 @@
+
+
+
+
identical_operands Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SwiftLintFramework Reference
+
+ identical_operands Reference
+
+
+
+
+
+
+
+
+
+
+
+
Identical Operands
+
+
Comparing two identical operands is likely a mistake.
+
+
+Identifier: identical_operands
+Enabled by default: No
+Supports autocorrection: No
+Kind: lint
+Analyzer rule: No
+Minimum Swift compiler version: 5.0.0
+Default configuration: warning
+
+
Non Triggering Examples
+
1 == 2
+
+
foo == bar
+
+
prefixedFoo == foo
+
+
foo . aProperty == foo . anotherProperty
+
+
self . aProperty == self . anotherProperty
+
+
"1 == 1"
+
+
self . aProperty == aProperty
+
+
lhs . aProperty == rhs . aProperty
+
+
lhs . identifier == rhs . identifier
+
+
i == index
+
+
$0 == 0
+
+
keyValues ? . count ?? 0 == 0
+
+
string == string . lowercased ()
+
+
let num : Int ? = 0
+_ = num != nil && num == num ? . byteSwapped
+
+
num == num !. byteSwapped
+
+
1 + 1 == 1 + 2
+
+
f ( i : 2 ) == f ( i : 3 )
+
+
1 != 2
+
+
foo != bar
+
+
prefixedFoo != foo
+
+
foo . aProperty != foo . anotherProperty
+
+
self . aProperty != self . anotherProperty
+
+
"1 != 1"
+
+
self . aProperty != aProperty
+
+
lhs . aProperty != rhs . aProperty
+
+
lhs . identifier != rhs . identifier
+
+
i != index
+
+
$0 != 0
+
+
keyValues ? . count ?? 0 != 0
+
+
string != string . lowercased ()
+
+
let num : Int ? = 0
+_ = num != nil && num != num ? . byteSwapped
+
+
num != num !. byteSwapped
+
+
1 + 1 != 1 + 2
+
+
f ( i : 2 ) != f ( i : 3 )
+
+
1 === 2
+
+
foo === bar
+
+
prefixedFoo === foo
+
+
foo . aProperty === foo . anotherProperty
+
+
self . aProperty === self . anotherProperty
+
+
"1 === 1"
+
+
self . aProperty === aProperty
+
+
lhs . aProperty === rhs . aProperty
+
+
lhs . identifier === rhs . identifier
+
+
i === index
+
+
$0 === 0
+
+
keyValues ? . count ?? 0 === 0
+
+
string === string . lowercased ()
+
+
let num : Int ? = 0
+_ = num != nil && num === num ? . byteSwapped
+
+
num === num !. byteSwapped
+
+
1 + 1 === 1 + 2
+
+
f ( i : 2 ) === f ( i : 3 )
+
+
1 !== 2
+
+
foo !== bar
+
+
prefixedFoo !== foo
+
+
foo . aProperty !== foo . anotherProperty
+
+
self . aProperty !== self . anotherProperty
+
+
"1 !== 1"
+
+
self . aProperty !== aProperty
+
+
lhs . aProperty !== rhs . aProperty
+
+
lhs . identifier !== rhs . identifier
+
+
i !== index
+
+
$0 !== 0
+
+
keyValues ? . count ?? 0 !== 0
+
+
string !== string . lowercased ()
+
+
let num : Int ? = 0
+_ = num != nil && num !== num ? . byteSwapped
+
+
num !== num !. byteSwapped
+
+
1 + 1 !== 1 + 2
+
+
f ( i : 2 ) !== f ( i : 3 )
+
+
1 > 2
+
+
foo > bar
+
+
prefixedFoo > foo
+
+
foo . aProperty > foo . anotherProperty
+
+
self . aProperty > self . anotherProperty
+
+
"1 > 1"
+
+
self . aProperty > aProperty
+
+
lhs . aProperty > rhs . aProperty
+
+
lhs . identifier > rhs . identifier
+
+
i > index
+
+
$0 > 0
+
+
keyValues ? . count ?? 0 > 0
+
+
string > string . lowercased ()
+
+
let num : Int ? = 0
+_ = num != nil && num > num ? . byteSwapped
+
+
num > num !. byteSwapped
+
+
1 + 1 > 1 + 2
+
+
f ( i : 2 ) > f ( i : 3 )
+
+
1 >= 2
+
+
foo >= bar
+
+
prefixedFoo >= foo
+
+
foo . aProperty >= foo . anotherProperty
+
+
self . aProperty >= self . anotherProperty
+
+
"1 >= 1"
+
+
self . aProperty >= aProperty
+
+
lhs . aProperty >= rhs . aProperty
+
+
lhs . identifier >= rhs . identifier
+
+
i >= index
+
+
$0 >= 0
+
+
keyValues ? . count ?? 0 >= 0
+
+
string >= string . lowercased ()
+
+
let num : Int ? = 0
+_ = num != nil && num >= num ? . byteSwapped
+
+
num >= num !. byteSwapped
+
+
1 + 1 >= 1 + 2
+
+
f ( i : 2 ) >= f ( i : 3 )
+
+
1 < 2
+
+
foo < bar
+
+
prefixedFoo < foo
+
+
foo . aProperty < foo . anotherProperty
+
+
self . aProperty < self . anotherProperty
+
+
"1 < 1"
+
+
self . aProperty < aProperty
+
+
lhs . aProperty < rhs . aProperty
+
+
lhs . identifier < rhs . identifier
+
+
i < index
+
+
$0 < 0
+
+
keyValues ? . count ?? 0 < 0
+
+
string < string . lowercased ()
+
+
let num : Int ? = 0
+_ = num != nil && num < num ? . byteSwapped
+
+
num < num !. byteSwapped
+
+
1 + 1 < 1 + 2
+
+
f ( i : 2 ) < f ( i : 3 )
+
+
1 <= 2
+
+
foo <= bar
+
+
prefixedFoo <= foo
+
+
foo . aProperty <= foo . anotherProperty
+
+
self . aProperty <= self . anotherProperty
+
+
"1 <= 1"
+
+
self . aProperty <= aProperty
+
+
lhs . aProperty <= rhs . aProperty
+
+
lhs . identifier <= rhs . identifier
+
+
i <= index
+
+
$0 <= 0
+
+
keyValues ? . count ?? 0 <= 0
+
+
string <= string . lowercased ()
+
+
let num : Int ? = 0
+_ = num != nil && num <= num ? . byteSwapped
+
+
num <= num !. byteSwapped
+
+
1 + 1 <= 1 + 2
+
+
f ( i : 2 ) <= f ( i : 3 )
+
+
func evaluate ( _ mode : CommandMode ) -> Result < AutoCorrectOptions , CommandantError < CommandantError < () >>>
+
+
let array = Array < Array < Int >> ()
+
+
guard Set ( identifiers ) . count != identifiers . count else { return }
+
+
expect ( "foo" ) == "foo"
+
+
type ( of : model ) . cachePrefix == cachePrefix
+
+
histogram [ 156 ] . 0 == 0x003B8D96 && histogram [ 156 ] . 1 == 1
+
+
[ Wrapper ( type : . three ), Wrapper ( type : . one )] . sorted { " \( $0 . type ) " > " \( $1 . type ) " }
+
+
array . sorted { " \( $0 ) " < " \( $1 ) " }
+
+
Triggering Examples
+
↓ 1 == 1
+
+
↓ foo == foo
+
+
↓ foo . aProperty == foo . aProperty
+
+
↓ self . aProperty == self . aProperty
+
+
↓ $0 == $0
+
+
↓ a ? . b == a ? . b
+
+
if ( ↓ elem == elem ) {}
+
+
XCTAssertTrue ( ↓ s3 == s3 )
+
+
if let tab = tabManager . selectedTab , ↓ tab . webView == tab . webView
+
+
↓ 1 + 1 == 1 + 1
+
+
↓ f ( i : 2 ) == f ( i :
+ 2 )
+
+
↓ 1 != 1
+
+
↓ foo != foo
+
+
↓ foo . aProperty != foo . aProperty
+
+
↓ self . aProperty != self . aProperty
+
+
↓ $0 != $0
+
+
↓ a ? . b != a ? . b
+
+
if ( ↓ elem != elem ) {}
+
+
XCTAssertTrue ( ↓ s3 != s3 )
+
+
if let tab = tabManager . selectedTab , ↓ tab . webView != tab . webView
+
+
↓ 1 + 1 != 1 + 1
+
+
↓ f ( i : 2 ) != f ( i :
+ 2 )
+
+
↓ 1 === 1
+
+
↓ foo === foo
+
+
↓ foo . aProperty === foo . aProperty
+
+
↓ self . aProperty === self . aProperty
+
+
↓ $0 === $0
+
+
↓ a ? . b === a ? . b
+
+
if ( ↓ elem === elem ) {}
+
+
XCTAssertTrue ( ↓ s3 === s3 )
+
+
if let tab = tabManager . selectedTab , ↓ tab . webView === tab . webView
+
+
↓ 1 + 1 === 1 + 1
+
+
↓ f ( i : 2 ) === f ( i :
+ 2 )
+
+
↓ 1 !== 1
+
+
↓ foo !== foo
+
+
↓ foo . aProperty !== foo . aProperty
+
+
↓ self . aProperty !== self . aProperty
+
+
↓ $0 !== $0
+
+
↓ a ? . b !== a ? . b
+
+
if ( ↓ elem !== elem ) {}
+
+
XCTAssertTrue ( ↓ s3 !== s3 )
+
+
if let tab = tabManager . selectedTab , ↓ tab . webView !== tab . webView
+
+
↓ 1 + 1 !== 1 + 1
+
+
↓ f ( i : 2 ) !== f ( i :
+ 2 )
+
+
↓ 1 > 1
+
+
↓ foo > foo
+
+
↓ foo . aProperty > foo . aProperty
+
+
↓ self . aProperty > self . aProperty
+
+
↓ $0 > $0
+
+
↓ a ? . b > a ? . b
+
+
if ( ↓ elem > elem ) {}
+
+
XCTAssertTrue ( ↓ s3 > s3 )
+
+
if let tab = tabManager . selectedTab , ↓ tab . webView > tab . webView
+
+
↓ 1 + 1 > 1 + 1
+
+
↓ f ( i : 2 ) > f ( i :
+ 2 )
+
+
↓ 1 >= 1
+
+
↓ foo >= foo
+
+
↓ foo . aProperty >= foo . aProperty
+
+
↓ self . aProperty >= self . aProperty
+
+
↓ $0 >= $0
+
+
↓ a ? . b >= a ? . b
+
+
if ( ↓ elem >= elem ) {}
+
+
XCTAssertTrue ( ↓ s3 >= s3 )
+
+
if let tab = tabManager . selectedTab , ↓ tab . webView >= tab . webView
+
+
↓ 1 + 1 >= 1 + 1
+
+
↓ f ( i : 2 ) >= f ( i :
+ 2 )
+
+
↓ 1 < 1
+
+
↓ foo < foo
+
+
↓ foo . aProperty < foo . aProperty
+
+
↓ self . aProperty < self . aProperty
+
+
↓ $0 < $0
+
+
↓ a ? . b < a ? . b
+
+
if ( ↓ elem < elem ) {}
+
+
XCTAssertTrue ( ↓ s3 < s3 )
+
+
if let tab = tabManager . selectedTab , ↓ tab . webView < tab . webView
+
+
↓ 1 + 1 < 1 + 1
+
+
↓ f ( i : 2 ) < f ( i :
+ 2 )
+
+
↓ 1 <= 1
+
+
↓ foo <= foo
+
+
↓ foo . aProperty <= foo . aProperty
+
+
↓ self . aProperty <= self . aProperty
+
+
↓ $0 <= $0
+
+
↓ a ? . b <= a ? . b
+
+
if ( ↓ elem <= elem ) {}
+
+
XCTAssertTrue ( ↓ s3 <= s3 )
+
+
if let tab = tabManager . selectedTab , ↓ tab . webView <= tab . webView
+
+
↓ 1 + 1 <= 1 + 1
+
+
↓ f ( i : 2 ) <= f ( i :
+ 2 )
+
+
return ↓ lhs . foo == lhs . foo &&
+ lhs . bar == rhs . bar
+
+
return lhs . foo == rhs . foo &&
+ ↓ lhs . bar == lhs . bar
+
+
+
+
+
+
+
+
+
+
+
diff --git a/identifier_name.html b/identifier_name.html
new file mode 100644
index 000000000..1c143f6d3
--- /dev/null
+++ b/identifier_name.html
@@ -0,0 +1,394 @@
+
+
+
+
identifier_name Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SwiftLintFramework Reference
+
+ identifier_name Reference
+
+
+
+
+
+
+
+
+
+
+
+
Identifier Name
+
+
Identifier names should only contain alphanumeric characters and start with a lowercase character or should only contain capital letters. In an exception to the above, variable names may start with a capital letter when they are declared static and immutable. Variable names should not be too long or too short.
+
+
+Identifier: identifier_name
+Enabled by default: Yes
+Supports autocorrection: No
+Kind: style
+Analyzer rule: No
+Minimum Swift compiler version: 5.0.0
+Default configuration: (min_length) w/e: 3/2, (max_length) w/e: 40/60, excluded: [“id”], allowed_symbols: [], validates_start_with_lowercase: true
+
+
Non Triggering Examples
+
let myLet = 0
+
+
var myVar = 0
+
+
private let _myLet = 0
+
+
class Abc { static let MyLet = 0 }
+
+
let URL : NSURL ? = nil
+
+
let XMLString : String ? = nil
+
+
override var i = 0
+
+
enum Foo { case myEnum }
+
+
func isOperator ( name : String ) -> Bool
+
+
func typeForKind ( _ kind : SwiftDeclarationKind ) -> String
+
+
func == ( lhs : SyntaxToken , rhs : SyntaxToken ) -> Bool
+
+
override func IsOperator ( name : String ) -> Bool
+
+
enum Foo { case ` private ` }
+
+
enum Foo { case value ( String ) }
+
+
Triggering Examples
+
↓ let MyLet = 0
+
+
↓ let _myLet = 0
+
+
private ↓ let myLet_ = 0
+
+
↓ let myExtremelyVeryVeryVeryVeryVeryVeryLongLet = 0
+
+
↓ var myExtremelyVeryVeryVeryVeryVeryVeryLongVar = 0
+
+
private ↓ let _myExtremelyVeryVeryVeryVeryVeryVeryLongLet = 0
+
+
↓ let i = 0
+
+
↓ var aa = 0
+
+
private ↓ let _i = 0
+
+
↓ func IsOperator ( name : String ) -> Bool
+
+
enum Foo { case ↓ MyEnum }
+
+
+
+
+
+
+
+
+
+
+
diff --git a/img/carat.png b/img/carat.png
new file mode 100755
index 000000000..29d2f7fd4
Binary files /dev/null and b/img/carat.png differ
diff --git a/img/dash.png b/img/dash.png
new file mode 100755
index 000000000..6f694c7a0
Binary files /dev/null and b/img/dash.png differ
diff --git a/img/gh.png b/img/gh.png
new file mode 100755
index 000000000..628da97c7
Binary files /dev/null and b/img/gh.png differ
diff --git a/img/spinner.gif b/img/spinner.gif
new file mode 100644
index 000000000..e3038d0a4
Binary files /dev/null and b/img/spinner.gif differ
diff --git a/implicit_getter.html b/implicit_getter.html
new file mode 100644
index 000000000..da2fd8c7d
--- /dev/null
+++ b/implicit_getter.html
@@ -0,0 +1,555 @@
+
+
+
+
implicit_getter Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SwiftLintFramework Reference
+
+ implicit_getter Reference
+
+
+
+
+
+
+
+
+
+
+
+
Implicit Getter
+
+
Computed read-only properties and subscripts should avoid using the get keyword.
+
+
+Identifier: implicit_getter
+Enabled by default: Yes
+Supports autocorrection: No
+Kind: style
+Analyzer rule: No
+Minimum Swift compiler version: 5.0.0
+Default configuration: warning
+
+
Non Triggering Examples
+
class Foo {
+ var foo : Int {
+ get { return 3 }
+ set { _abc = newValue }
+ }
+}
+
+
class Foo {
+ var foo : Int {
+ return 20
+ }
+}
+
+
class Foo {
+ static var foo : Int {
+ return 20
+ }
+}
+
+
class Foo {
+ static var foo : Int {
+ get { return 3 }
+ set { _abc = newValue }
+ }
+}
+
+
class Foo {
+ var foo : Int
+}
+
+
class Foo {
+ var foo : Int {
+ return getValueFromDisk ()
+ }
+}
+
+
class Foo {
+ var foo : String {
+ return "get"
+ }
+}
+
+
protocol Foo {
+ var foo : Int { get }
+}
+
+
protocol Foo {
+ var foo : Int { get set }
+}
+
+
class Foo {
+ var foo : Int {
+ struct Bar {
+ var bar : Int {
+ get { return 1 }
+ set { _ = newValue }
+ }
+ }
+
+ return Bar () . bar
+ }
+}
+
+
var _objCTaggedPointerBits : UInt {
+ @inline ( __always ) get { return 0 }
+}
+
+
var next : Int ? {
+ mutating get {
+ defer { self . count += 1 }
+ return self . count
+ }
+}
+
+
extension Foo {
+ var bar : Bool {
+ get { _bar }
+ set { self . _bar = newValue }
+ }
+}
+
+
extension Foo {
+ var bar : Bool {
+ get { _bar }
+ set ( newValue ) { self . _bar = newValue }
+ }
+}
+
+
extension Float {
+ var clamped : Float {
+ set {
+ self = min ( 1 , max ( 0 , newValue ))
+ }
+ get {
+ min ( 1 , max ( 0 , self ))
+ }
+ }
+}
+
+
extension Reactive where Base : UITapGestureRecognizer {
+ var tapped : CocoaAction < Base > ? {
+ get {
+ return associatedAction . withValue { $0 . flatMap { $0 . action } }
+ }
+ nonmutating set {
+ setAction ( newValue )
+ }
+ }
+}
+
+
extension Test {
+ var foo : Bool {
+ get {
+ bar ? . boolValue ?? true // Comment mentioning word set which triggers violation
+ }
+ set {
+ bar = NSNumber ( value : newValue as Bool )
+ }
+ }
+}
+
+
class Foo {
+ subscript ( i : Int ) -> Int {
+ return 20
+ }
+}
+
+
class Foo {
+ subscript ( i : Int ) -> Int {
+ get { return 3 }
+ set { _abc = newValue }
+ }
+}
+
+
protocol Foo {
+ subscript ( i : Int ) -> Int { get }
+}
+
+
protocol Foo {
+ subscript ( i : Int ) -> Int { get set }
+}
+
+
class DatabaseEntity {
+ var isSynced : Bool {
+ get async {
+ await database . isEntitySynced ( self )
+ }
+ }
+}
+
+
struct Test {
+ subscript ( value : Int ) -> Int {
+ get throws {
+ if value == 0 {
+ throw NSError ()
+ } else {
+ return value
+ }
+ }
+ }
+}
+
+
Triggering Examples
+
class Foo {
+ var foo : Int {
+ ↓ get {
+ return 20
+ }
+ }
+}
+
+
class Foo {
+ var foo : Int {
+ ↓ get { return 20 }
+ }
+}
+
+
class Foo {
+ static var foo : Int {
+ ↓ get {
+ return 20
+ }
+ }
+}
+
+
var foo : Int {
+ ↓ get { return 20 }
+}
+
+
class Foo {
+ @objc func bar () {}
+ var foo : Int {
+ ↓ get {
+ return 20
+ }
+ }
+}
+
+
extension Foo {
+ var bar : Bool {
+ ↓ get { _bar }
+ }
+}
+
+
class Foo {
+ subscript ( i : Int ) -> Int {
+ ↓ get {
+ return 20
+ }
+ }
+}
+
+
+
+
+
+
+
+
+
+
+
diff --git a/implicit_return.html b/implicit_return.html
new file mode 100644
index 000000000..dee648596
--- /dev/null
+++ b/implicit_return.html
@@ -0,0 +1,428 @@
+
+
+
+
implicit_return Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SwiftLintFramework Reference
+
+ implicit_return Reference
+
+
+
+
+
+
+
+
+
+
+
+
Implicit Return
+
+
Prefer implicit returns in closures, functions and getters.
+
+
+Identifier: implicit_return
+Enabled by default: No
+Supports autocorrection: Yes
+Kind: style
+Analyzer rule: No
+Minimum Swift compiler version: 5.0.0
+Default configuration: warning, included: [closure, function, getter]
+
+
Non Triggering Examples
+
if foo {
+ return 0
+}
+
+
foo . map { $0 + 1 }
+
+
foo . map ({ $0 + 1 })
+
+
foo . map { value in value + 1 }
+
+
[ 1 , 2 ] . first ( where : {
+ true
+})
+
+
func foo () -> Int {
+ 0
+}
+
+
class Foo {
+ func foo () -> Int { 0 }
+}
+
+
func fetch () -> Data ? {
+ do {
+ return try loadData ()
+ } catch {
+ return nil
+ }
+}
+
+
var foo : Bool { true }
+
+
class Foo {
+ var bar : Int {
+ get {
+ 0
+ }
+ }
+}
+
+
class Foo {
+ static var bar : Int {
+ 0
+ }
+}
+
+
Triggering Examples
+
foo . map { value in
+ return value + 1
+}
+
+
foo . map {
+ return $0 + 1
+}
+
+
foo . map ({ return $0 + 1 })
+
+
[ 1 , 2 ] . first ( where : {
+ return true
+})
+
+
func foo () -> Int {
+ return 0
+}
+
+
class Foo {
+ func foo () -> Int { return 0 }
+}
+
+
var foo : Bool { return true }
+
+
class Foo {
+ var bar : Int {
+ get {
+ return 0
+ }
+ }
+}
+
+
class Foo {
+ static var bar : Int {
+ return 0
+ }
+}
+
+
+
+
+
+
+
+
+
+
+
diff --git a/implicitly_unwrapped_optional.html b/implicitly_unwrapped_optional.html
new file mode 100644
index 000000000..f89cb0b36
--- /dev/null
+++ b/implicitly_unwrapped_optional.html
@@ -0,0 +1,376 @@
+
+
+
+
implicitly_unwrapped_optional Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SwiftLintFramework Reference
+
+ implicitly_unwrapped_optional Reference
+
+
+
+
+
+
+
+
+
+
+
+
Implicitly Unwrapped Optional
+
+
Implicitly unwrapped optionals should be avoided when possible.
+
+
+Identifier: implicitly_unwrapped_optional
+Enabled by default: No
+Supports autocorrection: No
+Kind: idiomatic
+Analyzer rule: No
+Minimum Swift compiler version: 5.0.0
+Default configuration: warning, mode: allExceptIBOutlets
+
+
Non Triggering Examples
+
@IBOutlet private var label : UILabel !
+
+
@IBOutlet var label : UILabel !
+
+
@IBOutlet var label : [ UILabel ! ]
+
+
if ! boolean {}
+
+
let int : Int ? = 42
+
+
let int : Int ? = nil
+
+
Triggering Examples
+
let label : UILabel !
+
+
let IBOutlet : UILabel !
+
+
let labels : [ UILabel ! ]
+
+
var ints : [ Int ! ] = [ 42 , nil , 42 ]
+
+
let label : IBOutlet !
+
+
let int : Int ! = 42
+
+
let int : Int ! = nil
+
+
var int : Int ! = 42
+
+
let collection : AnyCollection < Int !>
+
+
func foo ( int : Int ! ) {}
+
+
+
+
+
+
+
+
+
+
+
diff --git a/inclusive_language.html b/inclusive_language.html
new file mode 100644
index 000000000..d39e45946
--- /dev/null
+++ b/inclusive_language.html
@@ -0,0 +1,378 @@
+
+
+
+
inclusive_language Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SwiftLintFramework Reference
+
+ inclusive_language Reference
+
+
+
+
+
+
+
+
+
+
+
+
Inclusive Language
+
+
Identifiers should use inclusive language that avoids discrimination against groups of people based on race, gender, or socioeconomic status
+
+
+Identifier: inclusive_language
+Enabled by default: Yes
+Supports autocorrection: No
+Kind: style
+Analyzer rule: No
+Minimum Swift compiler version: 5.0.0
+Default configuration: warning, additional_terms: [], override_terms: [], override_allowed_terms: []
+
+
Non Triggering Examples
+
let foo = "abc"
+
+
enum AllowList {
+ case foo , bar
+}
+
+
func updateAllowList ( add : String ) {}
+
+
enum WalletItemType {
+ case visa
+ case mastercard
+}
+
+
func chargeMasterCard ( _ card : Card ) {}
+
+
Triggering Examples
+
let ↓ slave = "abc"
+
+
enum ↓ BlackList {
+ case foo , bar
+}
+
+
func ↓ updateWhiteList ( add : String ) {}
+
+
enum ListType {
+ case ↓ whitelist
+ case ↓ blacklist
+}
+
+
init ( ↓ master : String , ↓ slave : String ) {}
+
+
final class FooBar {
+ func register < ↓ Master , ↓ Slave > ( one : Master , two : Slave ) {}
+}
+
+
+
+
+
+
+
+
+
+
+
diff --git a/indentation_width.html b/indentation_width.html
new file mode 100644
index 000000000..d416cd20f
--- /dev/null
+++ b/indentation_width.html
@@ -0,0 +1,382 @@
+
+
+
+
indentation_width Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SwiftLintFramework Reference
+
+ indentation_width Reference
+
+
+
+
+
+
+
+
+
+
+
+
Indentation Width
+
+
Indent code using either one tab or the configured amount of spaces, unindent to match previous indentations. Don’t indent the first line.
+
+
+Identifier: indentation_width
+Enabled by default: No
+Supports autocorrection: No
+Kind: style
+Analyzer rule: No
+Minimum Swift compiler version: 5.0.0
+Default configuration: severity: warning, indentation_width: 4, include_comments: true
+
+
Non Triggering Examples
+
firstLine
+secondLine
+
+
firstLine
+ secondLine
+
+
firstLine
+ secondLine
+ thirdLine
+
+ fourthLine
+
+
firstLine
+ secondLine
+ thirdLine
+ //test
+ fourthLine
+
+
firstLine
+ secondLine
+ thirdLine
+fourthLine
+
+
Triggering Examples
+
↓ firstLine
+
+
firstLine
+ secondLine
+
+
firstLine
+ secondLine
+
+↓ fourthLine
+
+
firstLine
+ secondLine
+ thirdLine
+↓ fourthLine
+
+
+
+
+
+
+
+
+
+
+
diff --git a/index.html b/index.html
new file mode 100644
index 000000000..c50c460e4
--- /dev/null
+++ b/index.html
@@ -0,0 +1,1020 @@
+
+
+
+
SwiftLintFramework Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SwiftLintFramework Reference
+
+ SwiftLintFramework Reference
+
+
+
+
+
+
+
+
+
+
+
+
SwiftLint
+
+
A tool to enforce Swift style and conventions, loosely based on the now archived GitHub Swift Style Guide . SwiftLint enforces the style guide rules that are generally accepted by the Swift community. These rules are well described in popular style guides like Ray Wenderlich’s Swift Style Guide .
+
+
SwiftLint hooks into Clang and
+SourceKit to use the
+AST representation
+of your source files for more accurate results.
+
+
+
+
+
+
+
This project adheres to the Contributor Covenant Code of Conduct .
+By participating, you are expected to uphold this code. Please report
+unacceptable behavior to info@realm.io .
+
+
+Language Switch: 中文 , 한국어 .
+
+
Installation
+
+
brew install swiftlint
+
+
+
+
Simply add the following line to your Podfile:
+
pod 'SwiftLint'
+
+
+
This will download the SwiftLint binaries and dependencies in Pods/ during your next
+pod install execution and will allow you to invoke it via ${PODS_ROOT}/SwiftLint/swiftlint
+in your Script Build Phases.
+
+
This is the recommended way to install a specific version of SwiftLint since it supports
+installing a pinned version rather than simply the latest (which is the case with Homebrew).
+
+
Note that this will add the SwiftLint binaries, its dependencies’ binaries, and the Swift binary
+library distribution to the Pods/ directory, so checking in this directory to SCM such as
+git is discouraged.
+
+
$ mint install realm/SwiftLint
+
+
Using a pre-built package:
+
+
You can also install SwiftLint by downloading SwiftLint.pkg from the
+latest GitHub release and
+running it.
+
Installing from source:
+
+
You can also build and install from source by cloning this project and running
+make install (Xcode 13.3 or later).
+
Using Bazel
+
+
Put this in your WORKSPACE:
+
+
+
+WORKSPACE
+
+“`python
+load(”@bazel_tools//tools/build_defs/repo:http.bzl", “http_archive”)
+
+http_archive(
+ name = “build_bazel_rules_apple”,
+ sha256 = “f94e6dddf74739ef5cb30f000e13a2a613f6ebfa5e63588305a71fce8a8a9911”,
+ url = “https://github.com/bazelbuild/rules_apple/releases/download/1.1.3/rules_apple.1.1.3.tar.gz”,
+)
+
+load(
+ “@build_bazel_rules_apple//apple:repositories.bzl”,
+ “apple_rules_dependencies”,
+)
+
+apple_rules_dependencies()
+
+load(
+ “@build_bazel_rules_swift//swift:repositories.bzl”,
+ “swift_rules_dependencies”,
+)
+
+swift_rules_dependencies()
+
+load(
+ “@build_bazel_rules_swift//swift:extras.bzl”,
+ “swift_rules_extra_dependencies”,
+)
+
+swift_rules_extra_dependencies()
+
+http_archive(
+ name = “SwiftLint”,
+ sha256 = “7c454ff4abeeecdd9513f6293238a6d9f803b587eb93de147f9aa1be0d8337c4”,
+ url = “https://github.com/realm/SwiftLint/releases/download/0.49.1/bazel.tar.gz”,
+)
+
+load(“@SwiftLint//bazel:repos.bzl”, “swiftlint_repos”)
+
+swiftlint_repos()
+
+load(“@SwiftLint//bazel:deps.bzl”, “swiftlint_deps”)
+
+swiftlint_deps()
+“`
+
+
+
+
Then you can run SwiftLint in the current directory with this command:
+
bazel run -c opt @SwiftLint//:swiftlint
+
+
Usage
+
Presentation
+
+
To get a high-level overview of recommended ways to integrate SwiftLint into your project,
+we encourage you to watch this presentation or read the transcript:
+
+
+
Xcode
+
+
Integrate SwiftLint into your Xcode project to get warnings and errors displayed
+in the issue navigator.
+
+
To do this select the project in the file navigator, then select the primary app
+target, and go to Build Phases. Click the + and select "New Run Script Phase”.
+Insert the following as the script:
+
+
+
+
If you installed SwiftLint via Homebrew on Apple Silicon, you might experience this warning:
+
+
+
That is because Homebrew on Apple Silicon installs the binaries into the /opt/homebrew/bin
+folder by default. To instruct Xcode where to find SwiftLint, you can either add
+/opt/homebrew/bin to the PATH environment variable in your build phase
+
export PATH = " $PATH :/opt/homebrew/bin"
+if which swiftlint > /dev/null; then
+ swiftlint
+else
+ echo "warning: SwiftLint not installed, download from https://github.com/realm/SwiftLint"
+fi
+
+
+
or you can create a symbolic link in /usr/local/bin pointing to the actual binary:
+
ln -s /opt/homebrew/bin/swiftlint /usr/local/bin/swiftlint
+
+
+
You might want to move your SwiftLint phase directly before the ‘Compile Sources’
+step to detect errors quickly before compiling. However, SwiftLint is designed
+to run on valid Swift code that cleanly completes the compiler’s parsing stage.
+So running SwiftLint before ‘Compile Sources’ might yield some incorrect
+results.
+
+
If you wish to fix violations as well, your script could run
+swiftlint --fix && swiftlint instead of just swiftlint. This will mean
+that all correctable violations are fixed while ensuring warnings show up in
+your project for remaining violations.
+
+
If you’ve installed SwiftLint via CocoaPods the script should look like this:
+
" ${ PODS_ROOT } /SwiftLint/swiftlint"
+
+
Plug-in Support
+
+
SwiftLint can be used as a build tool plug-in for both Xcode projects as well as
+Swift packages.
+
+
+Due to limitations with Swift Package Manager Plug-ins this is only
+recommended for projects that have a SwiftLint configuration in their root directory as
+there is currently no way to pass any additional options to the SwiftLint executable.
+
+
Xcode
+
+
You can integrate SwiftLint as a Xcode Build Tool Plug-in if you’re working
+with a project in Xcode.
+
+
Add SwiftLint as a package dependency to your project without linking any of the
+products.
+
+
Select the target you want to add linting to and open the Build Phases inspector.
+Open Run Build Tool Plug-ins and select the + button.
+Select SwiftLintPlugin from the list and add it to the project.
+
+
+
Swift Package
+
+
You can integrate SwiftLint as a Swift Package Manager Plug-in if you’re working with
+a Swift Package with a Package.swift manifest.
+
+
Add SwiftLint as a package dependency to your Package.swift file.
+Add SwiftLint to a target using the plugins parameter.
+
. target (
+ ...
+ plugins : [ . plugin ( name : "SwiftLintPlugin" , package : "SwiftLint" )]
+),
+
+
AppCode
+
+
To integrate SwiftLint with AppCode, install
+this plugin and configure
+SwiftLint’s installed path in the plugin’s preferences.
+The fix action is available via ⌥⏎.
+
Visual Studio Code
+
+
To integrate SwiftLint with vscode , install the
+vscode-swiftlint extension from the marketplace.
+
fastlane
+
+
You can use the official swiftlint fastlane action to run SwiftLint as part of your fastlane process.
+
swiftlint (
+ mode: :lint , # SwiftLint mode: :lint (default) or :autocorrect
+ executable: "Pods/SwiftLint/swiftlint" , # The SwiftLint binary path (optional). Important if you've installed it via CocoaPods
+ path: "/path/to/lint" , # Specify path to lint (optional)
+ output_file: "swiftlint.result.json" , # The path of the output file (optional)
+ reporter: "json" , # The custom reporter to use (optional)
+ config_file: ".swiftlint-ci.yml" , # The path of the configuration file (optional)
+ files: [ # List of files to process (optional)
+ "AppDelegate.swift" ,
+ "path/to/project/Model.swift"
+ ],
+ ignore_exit_status: true , # Allow fastlane to continue even if SwiftLint returns a non-zero exit status (Default: false)
+ quiet: true , # Don't print status logs like 'Linting ' & 'Done linting' (Default: false)
+ strict: true # Fail on warnings? (Default: false)
+)
+
+
Docker
+
+
swiftlint is also available as a Docker image using Ubuntu.
+So just the first time you need to pull the docker image using the next command:
+
docker pull ghcr.io/realm/swiftlint:latest
+
+
+
Then following times, you just run swiftlint inside of the docker like:
+
docker run -it -v ` pwd ` :` pwd ` -w ` pwd ` ghcr.io/realm/swiftlint:latest
+
+
+
This will execute swiftlint in the folder where you are right now (pwd), showing an output like:
+
$ docker run -it -v ` pwd ` :` pwd ` -w ` pwd ` ghcr.io/realm/swiftlint:latest
+Linting Swift files in current working directory
+Linting 'RuleDocumentation.swift' ( 1/490)
+...
+Linting 'YamlSwiftLintTests.swift' ( 490/490)
+Done linting! Found 0 violations, 0 serious in 490 files.
+
+
+
Here you have more documentation about the usage of Docker Images .
+
Command Line
+
$ swiftlint help
+OVERVIEW: A tool to enforce Swift style and conventions.
+
+USAGE: swiftlint <subcommand>
+
+OPTIONS:
+ --version Show the version.
+ -h, --help Show help information.
+
+SUBCOMMANDS:
+ analyze Run analysis rules
+ docs Open SwiftLint documentation website in the default web browser
+ generate-docs Generates markdown documentation for all rules
+ lint (default) Print lint warnings and errors
+ rules Display the list of rules and their identifiers
+ version Display the current version of SwiftLint
+
+ See 'swiftlint help <subcommand>' for detailed help.
+
+
+
Run swiftlint in the directory containing the Swift files to lint. Directories
+will be searched recursively.
+
+
To specify a list of files when using lint or analyze
+(like the list of files modified by Xcode specified by the
+ExtraBuildPhase Xcode
+plugin, or modified files in the working tree based on git ls-files -m), you
+can do so by passing the option --use-script-input-files and setting the
+following instance variables: SCRIPT_INPUT_FILE_COUNT and
+SCRIPT_INPUT_FILE_0, SCRIPT_INPUT_FILE_1…SCRIPT_INPUT_FILE_{SCRIPT_INPUT_FILE_COUNT - 1}.
+
+
These are same environment variables set for input files to
+custom Xcode script phases .
+
Working With Multiple Swift Versions
+
+
SwiftLint hooks into SourceKit so it continues working even as Swift evolves!
+
+
This also keeps SwiftLint lean, as it doesn’t need to ship with a full Swift
+compiler, it just communicates with the official one you already have installed
+on your machine.
+
+
You should always run SwiftLint with the same toolchain you use to compile your
+code.
+
+
You may want to override SwiftLint’s default Swift toolchain if you have
+multiple toolchains or Xcodes installed.
+
+
Here’s the order in which SwiftLint determines which Swift toolchain to use:
+
+
+$XCODE_DEFAULT_TOOLCHAIN_OVERRIDE
+$TOOLCHAIN_DIR or $TOOLCHAINS
+xcrun -find swift
+/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain
+/Applications/Xcode-beta.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain
+~/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain
+~/Applications/Xcode-beta.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain
+
+
+
sourcekitd.framework is expected to be found in the usr/lib/ subdirectory of
+the value passed in the paths above.
+
+
You may also set the TOOLCHAINS environment variable to the reverse-DNS
+notation that identifies a Swift toolchain version:
+
$ TOOLCHAINS = com.apple.dt.toolchain.Swift_2_3 swiftlint --fix
+
+
+
On Linux, SourceKit is expected to be located in
+/usr/lib/libsourcekitdInProc.so or specified by the LINUX_SOURCEKIT_LIB_PATH
+environment variable.
+
pre-commit
+
+
SwiftLint can be run as a pre-commit hook.
+Once installed , add this to the
+.pre-commit-config.yaml in the root of your repository:
+
repos :
+ - repo : https://github.com/realm/SwiftLint
+ rev : 0.44.0
+ hooks :
+ - id : swiftlint
+
+
+
Adjust rev to the SwiftLint version of your choice.
+
Rules
+
+
Over 200 rules are included in SwiftLint and the Swift community (that’s you!)
+continues to contribute more over time.
+Pull requests are encouraged.
+
+
You can find an updated list of rules and more information about them
+here .
+
+
You can also check Source/SwiftLintFramework/Rules
+directory to see their implementation.
+
Opt-In Rules
+
+
opt_in_rules are disabled by default (i.e., you have to explicitly enable them
+in your configuration file).
+
+
Guidelines on when to mark a rule as opt-in:
+
+
+A rule that can have many false positives (e.g. empty_count )
+A rule that is too slow
+A rule that is not general consensus or is only useful in some cases
+(e.g. force_unwrapping )
+
+
Disable rules in code
+
+
Rules can be disabled with a comment inside a source file with the following
+format:
+
+
// swiftlint:disable <rule1> [<rule2> <rule3>...]
+
+
The rules will be disabled until the end of the file or until the linter sees a
+matching enable comment:
+
+
// swiftlint:enable <rule1> [<rule2> <rule3>...]
+
+
For example:
+
// swiftlint:disable colon
+let noWarning : String = "" // No warning about colons immediately after variable names!
+// swiftlint:enable colon
+let hasWarning : String = "" // Warning generated about colons immediately after variable names
+
+
+
Including the all keyword will disable all rules until the linter sees a matching enable comment:
+
+
// swiftlint:disable all
+// swiftlint:enable all
+
+
For example:
+
// swiftlint:disable all
+let noWarning : String = "" // No warning about colons immediately after variable names!
+let i = "" // Also no warning about short identifier names
+// swiftlint:enable all
+let hasWarning : String = "" // Warning generated about colons immediately after variable names
+let y = "" // Warning generated about short identifier names
+
+
+
It’s also possible to modify a disable or enable command by appending
+:previous, :this or :next for only applying the command to the previous,
+this (current) or next line respectively.
+
+
For example:
+
// swiftlint:disable:next force_cast
+let noWarning = NSNumber () as! Int
+let hasWarning = NSNumber () as! Int
+let noWarning2 = NSNumber () as! Int // swiftlint:disable:this force_cast
+let noWarning3 = NSNumber () as! Int
+// swiftlint:disable:previous force_cast
+
+
+
Run swiftlint rules to print a list of all available rules and their
+identifiers.
+
Configuration
+
+
Configure SwiftLint by adding a .swiftlint.yml file from the directory you’ll
+run SwiftLint from. The following parameters can be configured:
+
+
Rule inclusion:
+
+
+disabled_rules: Disable rules from the default enabled set.
+opt_in_rules: Enable rules that are not part of the default set.
+only_rules: Only the rules specified in this list will be enabled.
+Cannot be specified alongside disabled_rules or opt_in_rules.
+analyzer_rules: This is an entirely separate list of rules that are only
+run by the analyze command. All analyzer rules are opt-in, so this is the
+only configurable rule list, there are no equivalents for disabled_rules
+only_rules.
+
+
# By default, SwiftLint uses a set of sensible default rules you can adjust:
+disabled_rules : # rule identifiers turned on by default to exclude from running
+ - colon
+ - comma
+ - control_statement
+opt_in_rules : # some rules are turned off by default, so you need to opt-in
+ - empty_count # Find all the available rules by running: `swiftlint rules`
+
+# Alternatively, specify all rules explicitly by uncommenting this option:
+# only_rules: # delete `disabled_rules` & `opt_in_rules` if using this
+# - empty_parameters
+# - vertical_whitespace
+
+included : # paths to include during linting. `--path` is ignored if present.
+ - Source
+excluded : # paths to ignore during linting. Takes precedence over `included`.
+ - Carthage
+ - Pods
+ - Source/ExcludedFolder
+ - Source/ExcludedFile.swift
+ - Source/*/ExcludedFile.swift # Exclude files with a wildcard
+analyzer_rules : # Rules run by `swiftlint analyze`
+ - explicit_self
+
+# configurable rules can be customized from this configuration file
+# binary rules can set their severity level
+force_cast : warning # implicitly
+force_try :
+ severity : warning # explicitly
+# rules that have both warning and error levels, can set just the warning level
+# implicitly
+line_length : 110
+# they can set both implicitly with an array
+type_body_length :
+ - 300 # warning
+ - 400 # error
+# or they can set both explicitly
+file_length :
+ warning : 500
+ error : 1200
+# naming rules can set warnings/errors for min_length and max_length
+# additionally they can set excluded names
+type_name :
+ min_length : 4 # only warning
+ max_length : # warning and error
+ warning : 40
+ error : 50
+ excluded : iPhone # excluded via string
+ allowed_symbols : [ " _" ] # these are allowed in type names
+identifier_name :
+ min_length : # only min_length
+ error : 4 # only error
+ excluded : # excluded via string array
+ - id
+ - URL
+ - GlobalAPIKey
+reporter : " xcode" # reporter type (xcode, json, csv, checkstyle, codeclimate, junit, html, emoji, sonarqube, markdown, github-actions-logging)
+
+
+
You can also use environment variables in your configuration file,
+by using ${SOME_VARIABLE} in a string.
+
Defining Custom Rules
+
+
You can define custom regex-based rules in your configuration file using the
+following syntax:
+
custom_rules :
+ pirates_beat_ninjas : # rule identifier
+ included :
+ - " .* \\ .swift" # regex that defines paths to include during linting. optional.
+ excluded :
+ - " .*Test \\ .swift" # regex that defines paths to exclude during linting. optional
+ name : " Pirates Beat Ninjas" # rule name. optional.
+ regex : " ([nN]inja)" # matching pattern
+ capture_group : 0 # number of regex capture group to highlight the rule violation at. optional.
+ match_kinds : # SyntaxKinds to match. optional.
+ - comment
+ - identifier
+ message : " Pirates are better than ninjas." # violation message. optional.
+ severity : error # violation severity. optional.
+ no_hiding_in_strings :
+ regex : " ([nN]inja)"
+ match_kinds : string
+
+
+
This is what the output would look like:
+
+
+
+
You can filter the matches by providing one or more match_kinds, which will
+reject matches that include syntax kinds that are not present in this list. Here
+are all the possible syntax kinds:
+
+
+argument
+attribute.builtin
+attribute.id
+buildconfig.id
+buildconfig.keyword
+comment
+comment.mark
+comment.url
+doccomment
+doccomment.field
+identifier
+keyword
+number
+objectliteral
+parameter
+placeholder
+string
+string_interpolation_anchor
+typeidentifier
+
+
+
All syntax kinds used in a snippet of Swift code can be extracted asking
+SourceKitten . For example,
+sourcekitten syntax --text "struct S {}" delivers
+
+
+source.lang.swift.syntaxtype.keyword for the struct keyword and
+source.lang.swift.syntaxtype.identifier for its name S
+
+
+
which match to keyword and identifier in the above list.
+
+
If using custom rules in combination with only_rules, make sure to add
+custom_rules as an item under only_rules.
+
Auto-correct
+
+
SwiftLint can automatically correct certain violations. Files on disk are
+overwritten with a corrected version.
+
+
Please make sure to have backups of these files before running
+swiftlint --fix, otherwise important data may be lost.
+
+
Standard linting is disabled while correcting because of the high likelihood of
+violations (or their offsets) being incorrect after modifying a file while
+applying corrections.
+
Analyze
+
+
The swiftlint analyze command can lint Swift files using the
+full type-checked AST. The compiler log path containing the clean swiftc build
+command invocation (incremental builds will fail) must be passed to analyze
+via the --compiler-log-path flag.
+e.g. --compiler-log-path /path/to/xcodebuild.log
+
+
This can be obtained by
+
+
+Cleaning DerivedData (incremental builds won’t work with analyze)
+Running xcodebuild -workspace {WORKSPACE}.xcworkspace -scheme {SCHEME} > xcodebuild.log
+Running swiftlint analyze --compiler-log-path xcodebuild.log
+
+
+
Analyzer rules tend to be considerably slower than lint rules.
+
Using Multiple Configuration Files
+
+
SwiftLint offers a variety of ways to include multiple configuration files.
+Multiple configuration files get merged into one single configuration that is then applied
+just as a single configuration file would get applied.
+
+
There are quite a lot of use cases where using multiple configuration files could be helpful:
+
+
For instance, one could use a team-wide shared SwiftLint configuration while allowing overrides
+in each project via a child configuration file.
+
+
Team-Wide Configuration:
+
disabled_rules :
+- force_cast
+
+
+
Project-Specific Configuration:
+
opt_in_rules :
+- force_cast
+
+
Child / Parent Configs (Locally)
+
+
You can specify a child_config and / or a parent_config reference within a configuration file.
+These references should be local paths relative to the folder of the configuration file they are specified in.
+This even works recursively, as long as there are no cycles and no ambiguities.
+
+
A child config is treated as a refinement and therefore has a higher priority ,
+while a parent config is considered a base with lower priority in case of conflicts.
+
+
Here’s an example, assuming you have the following file structure:
+
ProjectRoot
+ |_ .swiftlint.yml
+ |_ .swiftlint_refinement.yml
+ |_ Base
+ |_ .swiftlint_base.yml
+
+
+
To include both the refinement and the base file, your .swiftlint.yml should look like this:
+
child_config : .swiftlint_refinement.yml
+parent_config : Base/.swiftlint_base.yml
+
+
+
When merging parent and child configs, included and excluded configurations
+are processed carefully to account for differences in the directory location
+of the containing configuration files.
+
Child / Parent Configs (Remote)
+
+
Just as you can provide local child_config / parent_config references, instead of
+referencing local paths, you can just put urls that lead to configuration files.
+In order for SwiftLint to detect these remote references, they must start with http:// or https://.
+
+
The referenced remote configuration files may even recursively reference other
+remote configuration files, but aren’t allowed to include local references.
+
+
Using a remote reference, your .swiftlint.yml could look like this:
+
parent_config : https://myteamserver.com/our-base-swiftlint-config.yml
+
+
+
Every time you run SwiftLint and have an Internet connection, SwiftLint tries to get a new version of
+every remote configuration that is referenced. If this request times out, a cached version is
+used if available. If there is no cached version available, SwiftLint fails – but no worries, a cached version
+should be there once SwiftLint has run successfully at least once.
+
+
If needed, the timeouts for the remote configuration fetching can be specified manually via the
+configuration file(s) using the remote_timeout / remote_timeout_if_cached specifiers.
+These values default to 2 / 1 second(s).
+
Command Line
+
+
Instead of just providing one configuration file when running SwiftLint via the command line,
+you can also pass a hierarchy, where the first configuration is treated as a parent,
+while the last one is treated as the highest-priority child.
+
+
A simple example including just two configuration files looks like this:
+
+
swiftlint --config .swiftlint.yml --config .swiftlint_child.yml
+
Nested Configurations
+
+
In addition to a main configuration (the .swiftlint.yml file in the root folder),
+you can put other configuration files named .swiftlint.yml into the directory structure
+that then get merged as a child config, but only with an effect for those files
+that are within the same directory as the config or in a deeper directory where
+there isn’t another configuration file. In other words: Nested configurations don’t work
+recursively – there’s a maximum number of one nested configuration per file
+that may be applied in addition to the main configuration.
+
+
.swiftlint.yml files are only considered as a nested configuration if they have not been
+used to build the main configuration already (e. g. by having been referenced via something
+like child_config: Folder/.swiftlint.yml). Also, parent_config / child_config
+specifications of nested configurations are getting ignored because there’s no sense to that.
+
+
If one (or more) SwiftLint file(s) are explicitly specified via the --config parameter,
+that configuration will be treated as an override, no matter whether there exist
+other .swiftlint.yml files somewhere within the directory. So if you want to use
+ nested configurations, you can’t use the --config parameter.
+
License
+
+
MIT licensed.
+
About
+
+
+
+
SwiftLint is maintained and funded by Realm Inc. The names and logos for
+Realm are trademarks of Realm Inc.
+
+
We :heart: open source software!
+See our other open source projects ,
+read our blog , or say hi on twitter
+(@realm ).
+
+
+
+
Our thanks to MacStadium for providing a Mac Mini to run our performance
+tests.
+
+
+
+
+
+
+
+
+
+
diff --git a/inert_defer.html b/inert_defer.html
new file mode 100644
index 000000000..e54653360
--- /dev/null
+++ b/inert_defer.html
@@ -0,0 +1,373 @@
+
+
+
+
inert_defer Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SwiftLintFramework Reference
+
+ inert_defer Reference
+
+
+
+
+
+
+
+
+
+
+
+
Inert Defer
+
+
If defer is at the end of its parent scope, it will be executed right where it is anyway.
+
+
+Identifier: inert_defer
+Enabled by default: Yes
+Supports autocorrection: No
+Kind: lint
+Analyzer rule: No
+Minimum Swift compiler version: 5.0.0
+Default configuration: warning
+
+
Non Triggering Examples
+
func example3 () {
+ defer { /* deferred code */ }
+
+ print ( "other code" )
+}
+
+
func example4 () {
+ if condition {
+ defer { /* deferred code */ }
+ print ( "other code" )
+ }
+}
+
+
Triggering Examples
+
func example0 () {
+ ↓ defer { /* deferred code */ }
+}
+
+
func example1 () {
+ ↓ defer { /* deferred code */ }
+ // comment
+}
+
+
func example2 () {
+ if condition {
+ ↓ defer { /* deferred code */ }
+ // comment
+ }
+}
+
+
+
+
+
+
+
+
+
+
+
diff --git a/is_disjoint.html b/is_disjoint.html
new file mode 100644
index 000000000..8eb0b52a2
--- /dev/null
+++ b/is_disjoint.html
@@ -0,0 +1,356 @@
+
+
+
+
is_disjoint Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SwiftLintFramework Reference
+
+ is_disjoint Reference
+
+
+
+
+
+
+
+
+
+
+
+
Is Disjoint
+
+
Prefer using Set.isDisjoint(with:) over Set.intersection(_:).isEmpty.
+
+
+Identifier: is_disjoint
+Enabled by default: Yes
+Supports autocorrection: No
+Kind: idiomatic
+Analyzer rule: No
+Minimum Swift compiler version: 5.0.0
+Default configuration: warning
+
+
Non Triggering Examples
+
_ = Set ( syntaxKinds ) . isDisjoint ( with : commentAndStringKindsSet )
+
+
let isObjc = ! objcAttributes . isDisjoint ( with : dictionary . enclosedSwiftAttributes )
+
+
_ = Set ( syntaxKinds ) . intersection ( commentAndStringKindsSet )
+
+
_ = ! objcAttributes . intersection ( dictionary . enclosedSwiftAttributes )
+
+
Triggering Examples
+
_ = Set ( syntaxKinds ) . ↓ intersection ( commentAndStringKindsSet ) . isEmpty
+
+
let isObjc = ! objcAttributes . ↓ intersection ( dictionary . enclosedSwiftAttributes ) . isEmpty
+
+
+
+
+
+
+
+
+
+
+
diff --git a/joined_default_parameter.html b/joined_default_parameter.html
new file mode 100644
index 000000000..c966cd4bc
--- /dev/null
+++ b/joined_default_parameter.html
@@ -0,0 +1,359 @@
+
+
+
+
joined_default_parameter Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SwiftLintFramework Reference
+
+ joined_default_parameter Reference
+
+
+
+
+
+
+
+
+
+
+
+
Joined Default Parameter
+
+
Discouraged explicit usage of the default separator.
+
+
+Identifier: joined_default_parameter
+Enabled by default: No
+Supports autocorrection: Yes
+Kind: idiomatic
+Analyzer rule: No
+Minimum Swift compiler version: 5.0.0
+Default configuration: warning
+
+
Non Triggering Examples
+
let foo = bar . joined ()
+
+
let foo = bar . joined ( separator : "," )
+
+
let foo = bar . joined ( separator : toto )
+
+
Triggering Examples
+
let foo = bar . joined ( ↓ separator : "" )
+
+
let foo = bar . filter ( toto )
+ . joined ( ↓ separator : "" ),
+
+
func foo () -> String {
+ return [ "1" , "2" ] . joined ( ↓ separator : "" )
+}
+
+
+
+
+
+
+
+
+
+
+
diff --git a/js/jazzy.js b/js/jazzy.js
new file mode 100755
index 000000000..198441660
--- /dev/null
+++ b/js/jazzy.js
@@ -0,0 +1,74 @@
+// Jazzy - https://github.com/realm/jazzy
+// Copyright Realm Inc.
+// SPDX-License-Identifier: MIT
+
+window.jazzy = {'docset': false}
+if (typeof window.dash != 'undefined') {
+ document.documentElement.className += ' dash'
+ window.jazzy.docset = true
+}
+if (navigator.userAgent.match(/xcode/i)) {
+ document.documentElement.className += ' xcode'
+ window.jazzy.docset = true
+}
+
+function toggleItem($link, $content) {
+ var animationDuration = 300;
+ $link.toggleClass('token-open');
+ $content.slideToggle(animationDuration);
+}
+
+function itemLinkToContent($link) {
+ return $link.parent().parent().next();
+}
+
+// On doc load + hash-change, open any targetted item
+function openCurrentItemIfClosed() {
+ if (window.jazzy.docset) {
+ return;
+ }
+ var $link = $(`a[name="${location.hash.substring(1)}"]`).nextAll('.token');
+ $content = itemLinkToContent($link);
+ if ($content.is(':hidden')) {
+ toggleItem($link, $content);
+ }
+}
+
+$(openCurrentItemIfClosed);
+$(window).on('hashchange', openCurrentItemIfClosed);
+
+// On item link ('token') click, toggle its discussion
+$('.token').on('click', function(event) {
+ if (window.jazzy.docset) {
+ return;
+ }
+ var $link = $(this);
+ toggleItem($link, itemLinkToContent($link));
+
+ // Keeps the document from jumping to the hash.
+ var href = $link.attr('href');
+ if (history.pushState) {
+ history.pushState({}, '', href);
+ } else {
+ location.hash = href;
+ }
+ event.preventDefault();
+});
+
+// Clicks on links to the current, closed, item need to open the item
+$("a:not('.token')").on('click', function() {
+ if (location == this.href) {
+ openCurrentItemIfClosed();
+ }
+});
+
+// KaTeX rendering
+if ("katex" in window) {
+ $($('.math').each( (_, element) => {
+ katex.render(element.textContent, element, {
+ displayMode: $(element).hasClass('m-block'),
+ throwOnError: false,
+ trust: true
+ });
+ }))
+}
diff --git a/js/jazzy.search.js b/js/jazzy.search.js
new file mode 100644
index 000000000..359cdbb8b
--- /dev/null
+++ b/js/jazzy.search.js
@@ -0,0 +1,74 @@
+// Jazzy - https://github.com/realm/jazzy
+// Copyright Realm Inc.
+// SPDX-License-Identifier: MIT
+
+$(function(){
+ var $typeahead = $('[data-typeahead]');
+ var $form = $typeahead.parents('form');
+ var searchURL = $form.attr('action');
+
+ function displayTemplate(result) {
+ return result.name;
+ }
+
+ function suggestionTemplate(result) {
+ var t = '
';
+ t += '' + result.name + ' ';
+ if (result.parent_name) {
+ t += '' + result.parent_name + ' ';
+ }
+ t += '
';
+ return t;
+ }
+
+ $typeahead.one('focus', function() {
+ $form.addClass('loading');
+
+ $.getJSON(searchURL).then(function(searchData) {
+ const searchIndex = lunr(function() {
+ this.ref('url');
+ this.field('name');
+ this.field('abstract');
+ for (const [url, doc] of Object.entries(searchData)) {
+ this.add({url: url, name: doc.name, abstract: doc.abstract});
+ }
+ });
+
+ $typeahead.typeahead(
+ {
+ highlight: true,
+ minLength: 3,
+ autoselect: true
+ },
+ {
+ limit: 10,
+ display: displayTemplate,
+ templates: { suggestion: suggestionTemplate },
+ source: function(query, sync) {
+ const lcSearch = query.toLowerCase();
+ const results = searchIndex.query(function(q) {
+ q.term(lcSearch, { boost: 100 });
+ q.term(lcSearch, {
+ boost: 10,
+ wildcard: lunr.Query.wildcard.TRAILING
+ });
+ }).map(function(result) {
+ var doc = searchData[result.ref];
+ doc.url = result.ref;
+ return doc;
+ });
+ sync(results);
+ }
+ }
+ );
+ $form.removeClass('loading');
+ $typeahead.trigger('focus');
+ });
+ });
+
+ var baseURL = searchURL.slice(0, -"search.json".length);
+
+ $typeahead.on('typeahead:select', function(e, result) {
+ window.location = baseURL + result.url;
+ });
+});
diff --git a/js/jquery.min.js b/js/jquery.min.js
new file mode 100644
index 000000000..c4c6022f2
--- /dev/null
+++ b/js/jquery.min.js
@@ -0,0 +1,2 @@
+/*! jQuery v3.6.0 | (c) OpenJS Foundation and other contributors | jquery.org/license */
+!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(C,e){"use strict";var t=[],r=Object.getPrototypeOf,s=t.slice,g=t.flat?function(e){return t.flat.call(e)}:function(e){return t.concat.apply([],e)},u=t.push,i=t.indexOf,n={},o=n.toString,v=n.hasOwnProperty,a=v.toString,l=a.call(Object),y={},m=function(e){return"function"==typeof e&&"number"!=typeof e.nodeType&&"function"!=typeof e.item},x=function(e){return null!=e&&e===e.window},E=C.document,c={type:!0,src:!0,nonce:!0,noModule:!0};function b(e,t,n){var r,i,o=(n=n||E).createElement("script");if(o.text=e,t)for(r in c)(i=t[r]||t.getAttribute&&t.getAttribute(r))&&o.setAttribute(r,i);n.head.appendChild(o).parentNode.removeChild(o)}function w(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?n[o.call(e)]||"object":typeof e}var f="3.6.0",S=function(e,t){return new S.fn.init(e,t)};function p(e){var t=!!e&&"length"in e&&e.length,n=w(e);return!m(e)&&!x(e)&&("array"===n||0===t||"number"==typeof t&&0
+~]|"+M+")"+M+"*"),U=new RegExp(M+"|>"),X=new RegExp(F),V=new RegExp("^"+I+"$"),G={ID:new RegExp("^#("+I+")"),CLASS:new RegExp("^\\.("+I+")"),TAG:new RegExp("^("+I+"|[*])"),ATTR:new RegExp("^"+W),PSEUDO:new RegExp("^"+F),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+R+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},Y=/HTML$/i,Q=/^(?:input|select|textarea|button)$/i,J=/^h\d$/i,K=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ee=/[+~]/,te=new RegExp("\\\\[\\da-fA-F]{1,6}"+M+"?|\\\\([^\\r\\n\\f])","g"),ne=function(e,t){var n="0x"+e.slice(1)-65536;return t||(n<0?String.fromCharCode(n+65536):String.fromCharCode(n>>10|55296,1023&n|56320))},re=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ie=function(e,t){return t?"\0"===e?"\ufffd":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},oe=function(){T()},ae=be(function(e){return!0===e.disabled&&"fieldset"===e.nodeName.toLowerCase()},{dir:"parentNode",next:"legend"});try{H.apply(t=O.call(p.childNodes),p.childNodes),t[p.childNodes.length].nodeType}catch(e){H={apply:t.length?function(e,t){L.apply(e,O.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function se(t,e,n,r){var i,o,a,s,u,l,c,f=e&&e.ownerDocument,p=e?e.nodeType:9;if(n=n||[],"string"!=typeof t||!t||1!==p&&9!==p&&11!==p)return n;if(!r&&(T(e),e=e||C,E)){if(11!==p&&(u=Z.exec(t)))if(i=u[1]){if(9===p){if(!(a=e.getElementById(i)))return n;if(a.id===i)return n.push(a),n}else if(f&&(a=f.getElementById(i))&&y(e,a)&&a.id===i)return n.push(a),n}else{if(u[2])return H.apply(n,e.getElementsByTagName(t)),n;if((i=u[3])&&d.getElementsByClassName&&e.getElementsByClassName)return H.apply(n,e.getElementsByClassName(i)),n}if(d.qsa&&!N[t+" "]&&(!v||!v.test(t))&&(1!==p||"object"!==e.nodeName.toLowerCase())){if(c=t,f=e,1===p&&(U.test(t)||z.test(t))){(f=ee.test(t)&&ye(e.parentNode)||e)===e&&d.scope||((s=e.getAttribute("id"))?s=s.replace(re,ie):e.setAttribute("id",s=S)),o=(l=h(t)).length;while(o--)l[o]=(s?"#"+s:":scope")+" "+xe(l[o]);c=l.join(",")}try{return H.apply(n,f.querySelectorAll(c)),n}catch(e){N(t,!0)}finally{s===S&&e.removeAttribute("id")}}}return g(t.replace($,"$1"),e,n,r)}function ue(){var r=[];return function e(t,n){return r.push(t+" ")>b.cacheLength&&delete e[r.shift()],e[t+" "]=n}}function le(e){return e[S]=!0,e}function ce(e){var t=C.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function fe(e,t){var n=e.split("|"),r=n.length;while(r--)b.attrHandle[n[r]]=t}function pe(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function de(t){return function(e){return"input"===e.nodeName.toLowerCase()&&e.type===t}}function he(n){return function(e){var t=e.nodeName.toLowerCase();return("input"===t||"button"===t)&&e.type===n}}function ge(t){return function(e){return"form"in e?e.parentNode&&!1===e.disabled?"label"in e?"label"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&ae(e)===t:e.disabled===t:"label"in e&&e.disabled===t}}function ve(a){return le(function(o){return o=+o,le(function(e,t){var n,r=a([],e.length,o),i=r.length;while(i--)e[n=r[i]]&&(e[n]=!(t[n]=e[n]))})})}function ye(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}for(e in d=se.support={},i=se.isXML=function(e){var t=e&&e.namespaceURI,n=e&&(e.ownerDocument||e).documentElement;return!Y.test(t||n&&n.nodeName||"HTML")},T=se.setDocument=function(e){var t,n,r=e?e.ownerDocument||e:p;return r!=C&&9===r.nodeType&&r.documentElement&&(a=(C=r).documentElement,E=!i(C),p!=C&&(n=C.defaultView)&&n.top!==n&&(n.addEventListener?n.addEventListener("unload",oe,!1):n.attachEvent&&n.attachEvent("onunload",oe)),d.scope=ce(function(e){return a.appendChild(e).appendChild(C.createElement("div")),"undefined"!=typeof e.querySelectorAll&&!e.querySelectorAll(":scope fieldset div").length}),d.attributes=ce(function(e){return e.className="i",!e.getAttribute("className")}),d.getElementsByTagName=ce(function(e){return e.appendChild(C.createComment("")),!e.getElementsByTagName("*").length}),d.getElementsByClassName=K.test(C.getElementsByClassName),d.getById=ce(function(e){return a.appendChild(e).id=S,!C.getElementsByName||!C.getElementsByName(S).length}),d.getById?(b.filter.ID=function(e){var t=e.replace(te,ne);return function(e){return e.getAttribute("id")===t}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n=t.getElementById(e);return n?[n]:[]}}):(b.filter.ID=function(e){var n=e.replace(te,ne);return function(e){var t="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return t&&t.value===n}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),b.find.TAG=d.getElementsByTagName?function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):d.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},b.find.CLASS=d.getElementsByClassName&&function(e,t){if("undefined"!=typeof t.getElementsByClassName&&E)return t.getElementsByClassName(e)},s=[],v=[],(d.qsa=K.test(C.querySelectorAll))&&(ce(function(e){var t;a.appendChild(e).innerHTML=" ",e.querySelectorAll("[msallowcapture^='']").length&&v.push("[*^$]="+M+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||v.push("\\["+M+"*(?:value|"+R+")"),e.querySelectorAll("[id~="+S+"-]").length||v.push("~="),(t=C.createElement("input")).setAttribute("name",""),e.appendChild(t),e.querySelectorAll("[name='']").length||v.push("\\["+M+"*name"+M+"*="+M+"*(?:''|\"\")"),e.querySelectorAll(":checked").length||v.push(":checked"),e.querySelectorAll("a#"+S+"+*").length||v.push(".#.+[+~]"),e.querySelectorAll("\\\f"),v.push("[\\r\\n\\f]")}),ce(function(e){e.innerHTML=" ";var t=C.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&v.push("name"+M+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&v.push(":enabled",":disabled"),a.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&v.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),v.push(",.*:")})),(d.matchesSelector=K.test(c=a.matches||a.webkitMatchesSelector||a.mozMatchesSelector||a.oMatchesSelector||a.msMatchesSelector))&&ce(function(e){d.disconnectedMatch=c.call(e,"*"),c.call(e,"[s!='']:x"),s.push("!=",F)}),v=v.length&&new RegExp(v.join("|")),s=s.length&&new RegExp(s.join("|")),t=K.test(a.compareDocumentPosition),y=t||K.test(a.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},j=t?function(e,t){if(e===t)return l=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&(n=(e.ownerDocument||e)==(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!d.sortDetached&&t.compareDocumentPosition(e)===n?e==C||e.ownerDocument==p&&y(p,e)?-1:t==C||t.ownerDocument==p&&y(p,t)?1:u?P(u,e)-P(u,t):0:4&n?-1:1)}:function(e,t){if(e===t)return l=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,a=[e],s=[t];if(!i||!o)return e==C?-1:t==C?1:i?-1:o?1:u?P(u,e)-P(u,t):0;if(i===o)return pe(e,t);n=e;while(n=n.parentNode)a.unshift(n);n=t;while(n=n.parentNode)s.unshift(n);while(a[r]===s[r])r++;return r?pe(a[r],s[r]):a[r]==p?-1:s[r]==p?1:0}),C},se.matches=function(e,t){return se(e,null,null,t)},se.matchesSelector=function(e,t){if(T(e),d.matchesSelector&&E&&!N[t+" "]&&(!s||!s.test(t))&&(!v||!v.test(t)))try{var n=c.call(e,t);if(n||d.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(e){N(t,!0)}return 0":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(te,ne),e[3]=(e[3]||e[4]||e[5]||"").replace(te,ne),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||se.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&se.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return G.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&X.test(n)&&(t=h(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(te,ne).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=m[e+" "];return t||(t=new RegExp("(^|"+M+")"+e+"("+M+"|$)"))&&m(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(n,r,i){return function(e){var t=se.attr(e,n);return null==t?"!="===r:!r||(t+="","="===r?t===i:"!="===r?t!==i:"^="===r?i&&0===t.indexOf(i):"*="===r?i&&-1:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function j(e,n,r){return m(n)?S.grep(e,function(e,t){return!!n.call(e,t,e)!==r}):n.nodeType?S.grep(e,function(e){return e===n!==r}):"string"!=typeof n?S.grep(e,function(e){return-1)[^>]*|#([\w-]+))$/;(S.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||D,"string"==typeof e){if(!(r="<"===e[0]&&">"===e[e.length-1]&&3<=e.length?[null,e,null]:q.exec(e))||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof S?t[0]:t,S.merge(this,S.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:E,!0)),N.test(r[1])&&S.isPlainObject(t))for(r in t)m(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return(i=E.getElementById(r[2]))&&(this[0]=i,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):m(e)?void 0!==n.ready?n.ready(e):e(S):S.makeArray(e,this)}).prototype=S.fn,D=S(E);var L=/^(?:parents|prev(?:Until|All))/,H={children:!0,contents:!0,next:!0,prev:!0};function O(e,t){while((e=e[t])&&1!==e.nodeType);return e}S.fn.extend({has:function(e){var t=S(e,this),n=t.length;return this.filter(function(){for(var e=0;e\x20\t\r\n\f]*)/i,he=/^$|^module$|\/(?:java|ecma)script/i;ce=E.createDocumentFragment().appendChild(E.createElement("div")),(fe=E.createElement("input")).setAttribute("type","radio"),fe.setAttribute("checked","checked"),fe.setAttribute("name","t"),ce.appendChild(fe),y.checkClone=ce.cloneNode(!0).cloneNode(!0).lastChild.checked,ce.innerHTML="",y.noCloneChecked=!!ce.cloneNode(!0).lastChild.defaultValue,ce.innerHTML=" ",y.option=!!ce.lastChild;var ge={thead:[1,""],col:[2,""],tr:[2,""],td:[3,""],_default:[0,"",""]};function ve(e,t){var n;return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&A(e,t)?S.merge([e],n):n}function ye(e,t){for(var n=0,r=e.length;n",""]);var me=/<|?\w+;/;function xe(e,t,n,r,i){for(var o,a,s,u,l,c,f=t.createDocumentFragment(),p=[],d=0,h=e.length;d\s*$/g;function je(e,t){return A(e,"table")&&A(11!==t.nodeType?t:t.firstChild,"tr")&&S(e).children("tbody")[0]||e}function De(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function qe(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Le(e,t){var n,r,i,o,a,s;if(1===t.nodeType){if(Y.hasData(e)&&(s=Y.get(e).events))for(i in Y.remove(t,"handle events"),s)for(n=0,r=s[i].length;n").attr(n.scriptAttrs||{}).prop({charset:n.scriptCharset,src:n.url}).on("load error",i=function(e){r.remove(),i=null,e&&t("error"===e.type?404:200,e.type)}),E.head.appendChild(r[0])},abort:function(){i&&i()}}});var _t,zt=[],Ut=/(=)\?(?=&|$)|\?\?/;S.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=zt.pop()||S.expando+"_"+wt.guid++;return this[e]=!0,e}}),S.ajaxPrefilter("json jsonp",function(e,t,n){var r,i,o,a=!1!==e.jsonp&&(Ut.test(e.url)?"url":"string"==typeof e.data&&0===(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&Ut.test(e.data)&&"data");if(a||"jsonp"===e.dataTypes[0])return r=e.jsonpCallback=m(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,a?e[a]=e[a].replace(Ut,"$1"+r):!1!==e.jsonp&&(e.url+=(Tt.test(e.url)?"&":"?")+e.jsonp+"="+r),e.converters["script json"]=function(){return o||S.error(r+" was not called"),o[0]},e.dataTypes[0]="json",i=C[r],C[r]=function(){o=arguments},n.always(function(){void 0===i?S(C).removeProp(r):C[r]=i,e[r]&&(e.jsonpCallback=t.jsonpCallback,zt.push(r)),o&&m(i)&&i(o[0]),o=i=void 0}),"script"}),y.createHTMLDocument=((_t=E.implementation.createHTMLDocument("").body).innerHTML="",2===_t.childNodes.length),S.parseHTML=function(e,t,n){return"string"!=typeof e?[]:("boolean"==typeof t&&(n=t,t=!1),t||(y.createHTMLDocument?((r=(t=E.implementation.createHTMLDocument("")).createElement("base")).href=E.location.href,t.head.appendChild(r)):t=E),o=!n&&[],(i=N.exec(e))?[t.createElement(i[1])]:(i=xe([e],t,o),o&&o.length&&S(o).remove(),S.merge([],i.childNodes)));var r,i,o},S.fn.load=function(e,t,n){var r,i,o,a=this,s=e.indexOf(" ");return-1").append(S.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each(function(){n.apply(this,o||[e.responseText,t,e])})}),this},S.expr.pseudos.animated=function(t){return S.grep(S.timers,function(e){return t===e.elem}).length},S.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l=S.css(e,"position"),c=S(e),f={};"static"===l&&(e.style.position="relative"),s=c.offset(),o=S.css(e,"top"),u=S.css(e,"left"),("absolute"===l||"fixed"===l)&&-1<(o+u).indexOf("auto")?(a=(r=c.position()).top,i=r.left):(a=parseFloat(o)||0,i=parseFloat(u)||0),m(t)&&(t=t.call(e,n,S.extend({},s))),null!=t.top&&(f.top=t.top-s.top+a),null!=t.left&&(f.left=t.left-s.left+i),"using"in t?t.using.call(e,f):c.css(f)}},S.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){S.offset.setOffset(this,t,e)});var e,n,r=this[0];return r?r.getClientRects().length?(e=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:e.top+n.pageYOffset,left:e.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,n,r=this[0],i={top:0,left:0};if("fixed"===S.css(r,"position"))t=r.getBoundingClientRect();else{t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;while(e&&(e===n.body||e===n.documentElement)&&"static"===S.css(e,"position"))e=e.parentNode;e&&e!==r&&1===e.nodeType&&((i=S(e).offset()).top+=S.css(e,"borderTopWidth",!0),i.left+=S.css(e,"borderLeftWidth",!0))}return{top:t.top-i.top-S.css(r,"marginTop",!0),left:t.left-i.left-S.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent;while(e&&"static"===S.css(e,"position"))e=e.offsetParent;return e||re})}}),S.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,i){var o="pageYOffset"===i;S.fn[t]=function(e){return $(this,function(e,t,n){var r;if(x(e)?r=e:9===e.nodeType&&(r=e.defaultView),void 0===n)return r?r[i]:e[t];r?r.scrollTo(o?r.pageXOffset:n,o?n:r.pageYOffset):e[t]=n},t,e,arguments.length)}}),S.each(["top","left"],function(e,n){S.cssHooks[n]=Fe(y.pixelPosition,function(e,t){if(t)return t=We(e,n),Pe.test(t)?S(e).position()[n]+"px":t})}),S.each({Height:"height",Width:"width"},function(a,s){S.each({padding:"inner"+a,content:s,"":"outer"+a},function(r,o){S.fn[o]=function(e,t){var n=arguments.length&&(r||"boolean"!=typeof e),i=r||(!0===e||!0===t?"margin":"border");return $(this,function(e,t,n){var r;return x(e)?0===o.indexOf("outer")?e["inner"+a]:e.document.documentElement["client"+a]:9===e.nodeType?(r=e.documentElement,Math.max(e.body["scroll"+a],r["scroll"+a],e.body["offset"+a],r["offset"+a],r["client"+a])):void 0===n?S.css(e,t,i):S.style(e,t,n,i)},s,n?e:void 0,n)}})}),S.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){S.fn[t]=function(e){return this.on(t,e)}}),S.fn.extend({bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)},hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)}}),S.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,n){S.fn[n]=function(e,t){return 00){var c=e.utils.clone(r)||{};c.position=[a,l],c.index=s.length,s.push(new e.Token(i.slice(a,o),c))}a=o+1}}return s},e.tokenizer.separator=/[\s\-]+/,e.Pipeline=function(){this._stack=[]},e.Pipeline.registeredFunctions=Object.create(null),e.Pipeline.registerFunction=function(t,r){r in this.registeredFunctions&&e.utils.warn("Overwriting existing registered function: "+r),t.label=r,e.Pipeline.registeredFunctions[t.label]=t},e.Pipeline.warnIfFunctionNotRegistered=function(t){var r=t.label&&t.label in this.registeredFunctions;r||e.utils.warn("Function is not registered with pipeline. This may cause problems when serialising the index.\n",t)},e.Pipeline.load=function(t){var r=new e.Pipeline;return t.forEach(function(t){var i=e.Pipeline.registeredFunctions[t];if(!i)throw new Error("Cannot load unregistered function: "+t);r.add(i)}),r},e.Pipeline.prototype.add=function(){var t=Array.prototype.slice.call(arguments);t.forEach(function(t){e.Pipeline.warnIfFunctionNotRegistered(t),this._stack.push(t)},this)},e.Pipeline.prototype.after=function(t,r){e.Pipeline.warnIfFunctionNotRegistered(r);var i=this._stack.indexOf(t);if(i==-1)throw new Error("Cannot find existingFn");i+=1,this._stack.splice(i,0,r)},e.Pipeline.prototype.before=function(t,r){e.Pipeline.warnIfFunctionNotRegistered(r);var i=this._stack.indexOf(t);if(i==-1)throw new Error("Cannot find existingFn");this._stack.splice(i,0,r)},e.Pipeline.prototype.remove=function(e){var t=this._stack.indexOf(e);t!=-1&&this._stack.splice(t,1)},e.Pipeline.prototype.run=function(e){for(var t=this._stack.length,r=0;r1&&(se&&(r=n),s!=e);)i=r-t,n=t+Math.floor(i/2),s=this.elements[2*n];return s==e?2*n:s>e?2*n:sa?l+=2:o==a&&(t+=r[u+1]*i[l+1],u+=2,l+=2);return t},e.Vector.prototype.similarity=function(e){return this.dot(e)/this.magnitude()||0},e.Vector.prototype.toArray=function(){for(var e=new Array(this.elements.length/2),t=1,r=0;t0){var o,a=s.str.charAt(0);a in s.node.edges?o=s.node.edges[a]:(o=new e.TokenSet,s.node.edges[a]=o),1==s.str.length&&(o["final"]=!0),n.push({node:o,editsRemaining:s.editsRemaining,str:s.str.slice(1)})}if(0!=s.editsRemaining){if("*"in s.node.edges)var u=s.node.edges["*"];else{var u=new e.TokenSet;s.node.edges["*"]=u}if(0==s.str.length&&(u["final"]=!0),n.push({node:u,editsRemaining:s.editsRemaining-1,str:s.str}),s.str.length>1&&n.push({node:s.node,editsRemaining:s.editsRemaining-1,str:s.str.slice(1)}),1==s.str.length&&(s.node["final"]=!0),s.str.length>=1){if("*"in s.node.edges)var l=s.node.edges["*"];else{var l=new e.TokenSet;s.node.edges["*"]=l}1==s.str.length&&(l["final"]=!0),n.push({node:l,editsRemaining:s.editsRemaining-1,str:s.str.slice(1)})}if(s.str.length>1){var c,h=s.str.charAt(0),d=s.str.charAt(1);d in s.node.edges?c=s.node.edges[d]:(c=new e.TokenSet,s.node.edges[d]=c),1==s.str.length&&(c["final"]=!0),n.push({node:c,editsRemaining:s.editsRemaining-1,str:h+s.str.slice(2)})}}}return i},e.TokenSet.fromString=function(t){for(var r=new e.TokenSet,i=r,n=0,s=t.length;n=e;t--){var r=this.uncheckedNodes[t],i=r.child.toString();i in this.minimizedNodes?r.parent.edges[r["char"]]=this.minimizedNodes[i]:(r.child._str=i,this.minimizedNodes[i]=r.child),this.uncheckedNodes.pop()}},e.Index=function(e){this.invertedIndex=e.invertedIndex,this.fieldVectors=e.fieldVectors,this.tokenSet=e.tokenSet,this.fields=e.fields,this.pipeline=e.pipeline},e.Index.prototype.search=function(t){return this.query(function(r){var i=new e.QueryParser(t,r);i.parse()})},e.Index.prototype.query=function(t){for(var r=new e.Query(this.fields),i=Object.create(null),n=Object.create(null),s=Object.create(null),o=Object.create(null),a=Object.create(null),u=0;u1?this._b=1:this._b=e},e.Builder.prototype.k1=function(e){this._k1=e},e.Builder.prototype.add=function(t,r){var i=t[this._ref],n=Object.keys(this._fields);this._documents[i]=r||{},this.documentCount+=1;for(var s=0;s=this.length)return e.QueryLexer.EOS;var t=this.str.charAt(this.pos);return this.pos+=1,t},e.QueryLexer.prototype.width=function(){return this.pos-this.start},e.QueryLexer.prototype.ignore=function(){this.start==this.pos&&(this.pos+=1),this.start=this.pos},e.QueryLexer.prototype.backup=function(){this.pos-=1},e.QueryLexer.prototype.acceptDigitRun=function(){var t,r;do t=this.next(),r=t.charCodeAt(0);while(r>47&&r<58);t!=e.QueryLexer.EOS&&this.backup()},e.QueryLexer.prototype.more=function(){return this.pos1&&(t.backup(),t.emit(e.QueryLexer.TERM)),t.ignore(),t.more())return e.QueryLexer.lexText},e.QueryLexer.lexEditDistance=function(t){return t.ignore(),t.acceptDigitRun(),t.emit(e.QueryLexer.EDIT_DISTANCE),e.QueryLexer.lexText},e.QueryLexer.lexBoost=function(t){return t.ignore(),t.acceptDigitRun(),t.emit(e.QueryLexer.BOOST),e.QueryLexer.lexText},e.QueryLexer.lexEOS=function(t){t.width()>0&&t.emit(e.QueryLexer.TERM)},e.QueryLexer.termSeparator=e.tokenizer.separator,e.QueryLexer.lexText=function(t){for(;;){var r=t.next();if(r==e.QueryLexer.EOS)return e.QueryLexer.lexEOS;if(92!=r.charCodeAt(0)){if(":"==r)return e.QueryLexer.lexField;if("~"==r)return t.backup(),t.width()>0&&t.emit(e.QueryLexer.TERM),e.QueryLexer.lexEditDistance;if("^"==r)return t.backup(),t.width()>0&&t.emit(e.QueryLexer.TERM),e.QueryLexer.lexBoost;if("+"==r&&1===t.width())return t.emit(e.QueryLexer.PRESENCE),e.QueryLexer.lexText;if("-"==r&&1===t.width())return t.emit(e.QueryLexer.PRESENCE),e.QueryLexer.lexText;if(r.match(e.QueryLexer.termSeparator))return e.QueryLexer.lexTerm}else t.escapeCharacter()}},e.QueryParser=function(t,r){this.lexer=new e.QueryLexer(t),this.query=r,this.currentClause={},this.lexemeIdx=0},e.QueryParser.prototype.parse=function(){this.lexer.run(),this.lexemes=this.lexer.lexemes;for(var t=e.QueryParser.parseClause;t;)t=t(this);return this.query},e.QueryParser.prototype.peekLexeme=function(){return this.lexemes[this.lexemeIdx]},e.QueryParser.prototype.consumeLexeme=function(){var e=this.peekLexeme();return this.lexemeIdx+=1,e},e.QueryParser.prototype.nextClause=function(){var e=this.currentClause;this.query.clause(e),this.currentClause={}},e.QueryParser.parseClause=function(t){var r=t.peekLexeme();if(void 0!=r)switch(r.type){case e.QueryLexer.PRESENCE:return e.QueryParser.parsePresence;case e.QueryLexer.FIELD:return e.QueryParser.parseField;case e.QueryLexer.TERM:return e.QueryParser.parseTerm;default:var i="expected either a field or a term, found "+r.type;throw r.str.length>=1&&(i+=" with value '"+r.str+"'"),new e.QueryParseError(i,r.start,r.end)}},e.QueryParser.parsePresence=function(t){var r=t.consumeLexeme();if(void 0!=r){switch(r.str){case"-":t.currentClause.presence=e.Query.presence.PROHIBITED;break;case"+":t.currentClause.presence=e.Query.presence.REQUIRED;break;default:var i="unrecognised presence operator'"+r.str+"'";throw new e.QueryParseError(i,r.start,r.end)}var n=t.peekLexeme();if(void 0==n){var i="expecting term or field, found nothing";throw new e.QueryParseError(i,r.start,r.end)}switch(n.type){case e.QueryLexer.FIELD:return e.QueryParser.parseField;case e.QueryLexer.TERM:return e.QueryParser.parseTerm;default:var i="expecting term or field, found '"+n.type+"'";throw new e.QueryParseError(i,n.start,n.end)}}},e.QueryParser.parseField=function(t){var r=t.consumeLexeme();if(void 0!=r){if(t.query.allFields.indexOf(r.str)==-1){var i=t.query.allFields.map(function(e){return"'"+e+"'"}).join(", "),n="unrecognised field '"+r.str+"', possible fields: "+i;throw new e.QueryParseError(n,r.start,r.end)}t.currentClause.fields=[r.str];var s=t.peekLexeme();if(void 0==s){var n="expecting term, found nothing";throw new e.QueryParseError(n,r.start,r.end)}switch(s.type){case e.QueryLexer.TERM:return e.QueryParser.parseTerm;default:var n="expecting term, found '"+s.type+"'";throw new e.QueryParseError(n,s.start,s.end)}}},e.QueryParser.parseTerm=function(t){var r=t.consumeLexeme();if(void 0!=r){t.currentClause.term=r.str.toLowerCase(),r.str.indexOf("*")!=-1&&(t.currentClause.usePipeline=!1);var i=t.peekLexeme();if(void 0==i)return void t.nextClause();switch(i.type){case e.QueryLexer.TERM:return t.nextClause(),e.QueryParser.parseTerm;case e.QueryLexer.FIELD:return t.nextClause(),e.QueryParser.parseField;case e.QueryLexer.EDIT_DISTANCE:return e.QueryParser.parseEditDistance;case e.QueryLexer.BOOST:return e.QueryParser.parseBoost;case e.QueryLexer.PRESENCE:return t.nextClause(),e.QueryParser.parsePresence;default:var n="Unexpected lexeme type '"+i.type+"'";throw new e.QueryParseError(n,i.start,i.end)}}},e.QueryParser.parseEditDistance=function(t){var r=t.consumeLexeme();if(void 0!=r){var i=parseInt(r.str,10);if(isNaN(i)){var n="edit distance must be numeric";throw new e.QueryParseError(n,r.start,r.end)}t.currentClause.editDistance=i;var s=t.peekLexeme();if(void 0==s)return void t.nextClause();switch(s.type){case e.QueryLexer.TERM:return t.nextClause(),e.QueryParser.parseTerm;case e.QueryLexer.FIELD:return t.nextClause(),e.QueryParser.parseField;case e.QueryLexer.EDIT_DISTANCE:return e.QueryParser.parseEditDistance;case e.QueryLexer.BOOST:return e.QueryParser.parseBoost;case e.QueryLexer.PRESENCE:return t.nextClause(),e.QueryParser.parsePresence;default:var n="Unexpected lexeme type '"+s.type+"'";throw new e.QueryParseError(n,s.start,s.end)}}},e.QueryParser.parseBoost=function(t){var r=t.consumeLexeme();if(void 0!=r){var i=parseInt(r.str,10);if(isNaN(i)){var n="boost must be numeric";throw new e.QueryParseError(n,r.start,r.end)}t.currentClause.boost=i;var s=t.peekLexeme();if(void 0==s)return void t.nextClause();switch(s.type){case e.QueryLexer.TERM:return t.nextClause(),e.QueryParser.parseTerm;case e.QueryLexer.FIELD:return t.nextClause(),e.QueryParser.parseField;case e.QueryLexer.EDIT_DISTANCE:return e.QueryParser.parseEditDistance;case e.QueryLexer.BOOST:return e.QueryParser.parseBoost;case e.QueryLexer.PRESENCE:return t.nextClause(),e.QueryParser.parsePresence;default:var n="Unexpected lexeme type '"+s.type+"'";throw new e.QueryParseError(n,s.start,s.end)}}},function(e,t){"function"==typeof define&&define.amd?define(t):"object"==typeof exports?module.exports=t():e.lunr=t()}(this,function(){return e})}();
diff --git a/js/typeahead.jquery.js b/js/typeahead.jquery.js
new file mode 100644
index 000000000..3a2d2ab03
--- /dev/null
+++ b/js/typeahead.jquery.js
@@ -0,0 +1,1694 @@
+/*!
+ * typeahead.js 1.3.1
+ * https://github.com/corejavascript/typeahead.js
+ * Copyright 2013-2020 Twitter, Inc. and other contributors; Licensed MIT
+ */
+
+
+(function(root, factory) {
+ if (typeof define === "function" && define.amd) {
+ define([ "jquery" ], function(a0) {
+ return factory(a0);
+ });
+ } else if (typeof module === "object" && module.exports) {
+ module.exports = factory(require("jquery"));
+ } else {
+ factory(root["jQuery"]);
+ }
+})(this, function($) {
+ var _ = function() {
+ "use strict";
+ return {
+ isMsie: function() {
+ return /(msie|trident)/i.test(navigator.userAgent) ? navigator.userAgent.match(/(msie |rv:)(\d+(.\d+)?)/i)[2] : false;
+ },
+ isBlankString: function(str) {
+ return !str || /^\s*$/.test(str);
+ },
+ escapeRegExChars: function(str) {
+ return str.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g, "\\$&");
+ },
+ isString: function(obj) {
+ return typeof obj === "string";
+ },
+ isNumber: function(obj) {
+ return typeof obj === "number";
+ },
+ isArray: $.isArray,
+ isFunction: $.isFunction,
+ isObject: $.isPlainObject,
+ isUndefined: function(obj) {
+ return typeof obj === "undefined";
+ },
+ isElement: function(obj) {
+ return !!(obj && obj.nodeType === 1);
+ },
+ isJQuery: function(obj) {
+ return obj instanceof $;
+ },
+ toStr: function toStr(s) {
+ return _.isUndefined(s) || s === null ? "" : s + "";
+ },
+ bind: $.proxy,
+ each: function(collection, cb) {
+ $.each(collection, reverseArgs);
+ function reverseArgs(index, value) {
+ return cb(value, index);
+ }
+ },
+ map: $.map,
+ filter: $.grep,
+ every: function(obj, test) {
+ var result = true;
+ if (!obj) {
+ return result;
+ }
+ $.each(obj, function(key, val) {
+ if (!(result = test.call(null, val, key, obj))) {
+ return false;
+ }
+ });
+ return !!result;
+ },
+ some: function(obj, test) {
+ var result = false;
+ if (!obj) {
+ return result;
+ }
+ $.each(obj, function(key, val) {
+ if (result = test.call(null, val, key, obj)) {
+ return false;
+ }
+ });
+ return !!result;
+ },
+ mixin: $.extend,
+ identity: function(x) {
+ return x;
+ },
+ clone: function(obj) {
+ return $.extend(true, {}, obj);
+ },
+ getIdGenerator: function() {
+ var counter = 0;
+ return function() {
+ return counter++;
+ };
+ },
+ templatify: function templatify(obj) {
+ return $.isFunction(obj) ? obj : template;
+ function template() {
+ return String(obj);
+ }
+ },
+ defer: function(fn) {
+ setTimeout(fn, 0);
+ },
+ debounce: function(func, wait, immediate) {
+ var timeout, result;
+ return function() {
+ var context = this, args = arguments, later, callNow;
+ later = function() {
+ timeout = null;
+ if (!immediate) {
+ result = func.apply(context, args);
+ }
+ };
+ callNow = immediate && !timeout;
+ clearTimeout(timeout);
+ timeout = setTimeout(later, wait);
+ if (callNow) {
+ result = func.apply(context, args);
+ }
+ return result;
+ };
+ },
+ throttle: function(func, wait) {
+ var context, args, timeout, result, previous, later;
+ previous = 0;
+ later = function() {
+ previous = new Date();
+ timeout = null;
+ result = func.apply(context, args);
+ };
+ return function() {
+ var now = new Date(), remaining = wait - (now - previous);
+ context = this;
+ args = arguments;
+ if (remaining <= 0) {
+ clearTimeout(timeout);
+ timeout = null;
+ previous = now;
+ result = func.apply(context, args);
+ } else if (!timeout) {
+ timeout = setTimeout(later, remaining);
+ }
+ return result;
+ };
+ },
+ stringify: function(val) {
+ return _.isString(val) ? val : JSON.stringify(val);
+ },
+ guid: function() {
+ function _p8(s) {
+ var p = (Math.random().toString(16) + "000000000").substr(2, 8);
+ return s ? "-" + p.substr(0, 4) + "-" + p.substr(4, 4) : p;
+ }
+ return "tt-" + _p8() + _p8(true) + _p8(true) + _p8();
+ },
+ noop: function() {}
+ };
+ }();
+ var WWW = function() {
+ "use strict";
+ var defaultClassNames = {
+ wrapper: "twitter-typeahead",
+ input: "tt-input",
+ hint: "tt-hint",
+ menu: "tt-menu",
+ dataset: "tt-dataset",
+ suggestion: "tt-suggestion",
+ selectable: "tt-selectable",
+ empty: "tt-empty",
+ open: "tt-open",
+ cursor: "tt-cursor",
+ highlight: "tt-highlight"
+ };
+ return build;
+ function build(o) {
+ var www, classes;
+ classes = _.mixin({}, defaultClassNames, o);
+ www = {
+ css: buildCss(),
+ classes: classes,
+ html: buildHtml(classes),
+ selectors: buildSelectors(classes)
+ };
+ return {
+ css: www.css,
+ html: www.html,
+ classes: www.classes,
+ selectors: www.selectors,
+ mixin: function(o) {
+ _.mixin(o, www);
+ }
+ };
+ }
+ function buildHtml(c) {
+ return {
+ wrapper: ' ',
+ menu: ''
+ };
+ }
+ function buildSelectors(classes) {
+ var selectors = {};
+ _.each(classes, function(v, k) {
+ selectors[k] = "." + v;
+ });
+ return selectors;
+ }
+ function buildCss() {
+ var css = {
+ wrapper: {
+ position: "relative",
+ display: "inline-block"
+ },
+ hint: {
+ position: "absolute",
+ top: "0",
+ left: "0",
+ borderColor: "transparent",
+ boxShadow: "none",
+ opacity: "1"
+ },
+ input: {
+ position: "relative",
+ verticalAlign: "top",
+ backgroundColor: "transparent"
+ },
+ inputWithNoHint: {
+ position: "relative",
+ verticalAlign: "top"
+ },
+ menu: {
+ position: "absolute",
+ top: "100%",
+ left: "0",
+ zIndex: "100",
+ display: "none"
+ },
+ ltr: {
+ left: "0",
+ right: "auto"
+ },
+ rtl: {
+ left: "auto",
+ right: " 0"
+ }
+ };
+ if (_.isMsie()) {
+ _.mixin(css.input, {
+ backgroundImage: "url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)"
+ });
+ }
+ return css;
+ }
+ }();
+ var EventBus = function() {
+ "use strict";
+ var namespace, deprecationMap;
+ namespace = "typeahead:";
+ deprecationMap = {
+ render: "rendered",
+ cursorchange: "cursorchanged",
+ select: "selected",
+ autocomplete: "autocompleted"
+ };
+ function EventBus(o) {
+ if (!o || !o.el) {
+ $.error("EventBus initialized without el");
+ }
+ this.$el = $(o.el);
+ }
+ _.mixin(EventBus.prototype, {
+ _trigger: function(type, args) {
+ var $e = $.Event(namespace + type);
+ this.$el.trigger.call(this.$el, $e, args || []);
+ return $e;
+ },
+ before: function(type) {
+ var args, $e;
+ args = [].slice.call(arguments, 1);
+ $e = this._trigger("before" + type, args);
+ return $e.isDefaultPrevented();
+ },
+ trigger: function(type) {
+ var deprecatedType;
+ this._trigger(type, [].slice.call(arguments, 1));
+ if (deprecatedType = deprecationMap[type]) {
+ this._trigger(deprecatedType, [].slice.call(arguments, 1));
+ }
+ }
+ });
+ return EventBus;
+ }();
+ var EventEmitter = function() {
+ "use strict";
+ var splitter = /\s+/, nextTick = getNextTick();
+ return {
+ onSync: onSync,
+ onAsync: onAsync,
+ off: off,
+ trigger: trigger
+ };
+ function on(method, types, cb, context) {
+ var type;
+ if (!cb) {
+ return this;
+ }
+ types = types.split(splitter);
+ cb = context ? bindContext(cb, context) : cb;
+ this._callbacks = this._callbacks || {};
+ while (type = types.shift()) {
+ this._callbacks[type] = this._callbacks[type] || {
+ sync: [],
+ async: []
+ };
+ this._callbacks[type][method].push(cb);
+ }
+ return this;
+ }
+ function onAsync(types, cb, context) {
+ return on.call(this, "async", types, cb, context);
+ }
+ function onSync(types, cb, context) {
+ return on.call(this, "sync", types, cb, context);
+ }
+ function off(types) {
+ var type;
+ if (!this._callbacks) {
+ return this;
+ }
+ types = types.split(splitter);
+ while (type = types.shift()) {
+ delete this._callbacks[type];
+ }
+ return this;
+ }
+ function trigger(types) {
+ var type, callbacks, args, syncFlush, asyncFlush;
+ if (!this._callbacks) {
+ return this;
+ }
+ types = types.split(splitter);
+ args = [].slice.call(arguments, 1);
+ while ((type = types.shift()) && (callbacks = this._callbacks[type])) {
+ syncFlush = getFlush(callbacks.sync, this, [ type ].concat(args));
+ asyncFlush = getFlush(callbacks.async, this, [ type ].concat(args));
+ syncFlush() && nextTick(asyncFlush);
+ }
+ return this;
+ }
+ function getFlush(callbacks, context, args) {
+ return flush;
+ function flush() {
+ var cancelled;
+ for (var i = 0, len = callbacks.length; !cancelled && i < len; i += 1) {
+ cancelled = callbacks[i].apply(context, args) === false;
+ }
+ return !cancelled;
+ }
+ }
+ function getNextTick() {
+ var nextTickFn;
+ if (window.setImmediate) {
+ nextTickFn = function nextTickSetImmediate(fn) {
+ setImmediate(function() {
+ fn();
+ });
+ };
+ } else {
+ nextTickFn = function nextTickSetTimeout(fn) {
+ setTimeout(function() {
+ fn();
+ }, 0);
+ };
+ }
+ return nextTickFn;
+ }
+ function bindContext(fn, context) {
+ return fn.bind ? fn.bind(context) : function() {
+ fn.apply(context, [].slice.call(arguments, 0));
+ };
+ }
+ }();
+ var highlight = function(doc) {
+ "use strict";
+ var defaults = {
+ node: null,
+ pattern: null,
+ tagName: "strong",
+ className: null,
+ wordsOnly: false,
+ caseSensitive: false,
+ diacriticInsensitive: false
+ };
+ var accented = {
+ A: "[AaªÀ-Åà-åĀ-ąǍǎȀ-ȃȦȧᴬᵃḀḁẚẠ-ảₐ℀℁℻⒜Ⓐⓐ㍱-㍴㎀-㎄㎈㎉㎩-㎯㏂㏊㏟㏿Aa]",
+ B: "[BbᴮᵇḂ-ḇℬ⒝Ⓑⓑ㍴㎅-㎇㏃㏈㏔㏝Bb]",
+ C: "[CcÇçĆ-čᶜ℀ℂ℃℅℆ℭⅭⅽ⒞Ⓒⓒ㍶㎈㎉㎝㎠㎤㏄-㏇Cc]",
+ D: "[DdĎďDŽ-džDZ-dzᴰᵈḊ-ḓⅅⅆⅮⅾ⒟Ⓓⓓ㋏㍲㍷-㍹㎗㎭-㎯㏅㏈Dd]",
+ E: "[EeÈ-Ëè-ëĒ-ěȄ-ȇȨȩᴱᵉḘ-ḛẸ-ẽₑ℡ℯℰⅇ⒠Ⓔⓔ㉐㋍㋎Ee]",
+ F: "[FfᶠḞḟ℉ℱ℻⒡Ⓕⓕ㎊-㎌㎙ff-fflFf]",
+ G: "[GgĜ-ģǦǧǴǵᴳᵍḠḡℊ⒢Ⓖⓖ㋌㋍㎇㎍-㎏㎓㎬㏆㏉㏒㏿Gg]",
+ H: "[HhĤĥȞȟʰᴴḢ-ḫẖℋ-ℎ⒣Ⓗⓗ㋌㍱㎐-㎔㏊㏋㏗Hh]",
+ I: "[IiÌ-Ïì-ïĨ-İIJijǏǐȈ-ȋᴵᵢḬḭỈ-ịⁱℐℑℹⅈⅠ-ⅣⅥ-ⅨⅪⅫⅰ-ⅳⅵ-ⅸⅺⅻ⒤Ⓘⓘ㍺㏌㏕fiffiIi]",
+ J: "[JjIJ-ĵLJ-njǰʲᴶⅉ⒥ⒿⓙⱼJj]",
+ K: "[KkĶķǨǩᴷᵏḰ-ḵK⒦Ⓚⓚ㎄㎅㎉㎏㎑㎘㎞㎢㎦㎪㎸㎾㏀㏆㏍-㏏Kk]",
+ L: "[LlĹ-ŀLJ-ljˡᴸḶḷḺ-ḽℒℓ℡Ⅼⅼ⒧Ⓛⓛ㋏㎈㎉㏐-㏓㏕㏖㏿flfflLl]",
+ M: "[MmᴹᵐḾ-ṃ℠™ℳⅯⅿ⒨Ⓜⓜ㍷-㍹㎃㎆㎎㎒㎖㎙-㎨㎫㎳㎷㎹㎽㎿㏁㏂㏎㏐㏔-㏖㏘㏙㏞㏟Mm]",
+ N: "[NnÑñŃ-ʼnNJ-njǸǹᴺṄ-ṋⁿℕ№⒩Ⓝⓝ㎁㎋㎚㎱㎵㎻㏌㏑Nn]",
+ O: "[OoºÒ-Öò-öŌ-őƠơǑǒǪǫȌ-ȏȮȯᴼᵒỌ-ỏₒ℅№ℴ⒪Ⓞⓞ㍵㏇㏒㏖Oo]",
+ P: "[PpᴾᵖṔ-ṗℙ⒫Ⓟⓟ㉐㍱㍶㎀㎊㎩-㎬㎰㎴㎺㏋㏗-㏚Pp]",
+ Q: "[Qqℚ⒬Ⓠⓠ㏃Qq]",
+ R: "[RrŔ-řȐ-ȓʳᴿᵣṘ-ṛṞṟ₨ℛ-ℝ⒭Ⓡⓡ㋍㍴㎭-㎯㏚㏛Rr]",
+ S: "[SsŚ-šſȘșˢṠ-ṣ₨℁℠⒮Ⓢⓢ㎧㎨㎮-㎳㏛㏜stSs]",
+ T: "[TtŢ-ťȚțᵀᵗṪ-ṱẗ℡™⒯Ⓣⓣ㉐㋏㎔㏏ſtstTt]",
+ U: "[UuÙ-Üù-üŨ-ųƯưǓǔȔ-ȗᵁᵘᵤṲ-ṷỤ-ủ℆⒰Ⓤⓤ㍳㍺Uu]",
+ V: "[VvᵛᵥṼ-ṿⅣ-Ⅷⅳ-ⅷ⒱Ⓥⓥⱽ㋎㍵㎴-㎹㏜㏞Vv]",
+ W: "[WwŴŵʷᵂẀ-ẉẘ⒲Ⓦⓦ㎺-㎿㏝Ww]",
+ X: "[XxˣẊ-ẍₓ℻Ⅸ-Ⅻⅸ-ⅻ⒳Ⓧⓧ㏓Xx]",
+ Y: "[YyÝýÿŶ-ŸȲȳʸẎẏẙỲ-ỹ⒴Ⓨⓨ㏉Yy]",
+ Z: "[ZzŹ-žDZ-dzᶻẐ-ẕℤℨ⒵Ⓩⓩ㎐-㎔Zz]"
+ };
+ return function hightlight(o) {
+ var regex;
+ o = _.mixin({}, defaults, o);
+ if (!o.node || !o.pattern) {
+ return;
+ }
+ o.pattern = _.isArray(o.pattern) ? o.pattern : [ o.pattern ];
+ regex = getRegex(o.pattern, o.caseSensitive, o.wordsOnly, o.diacriticInsensitive);
+ traverse(o.node, hightlightTextNode);
+ function hightlightTextNode(textNode) {
+ var match, patternNode, wrapperNode;
+ if (match = regex.exec(textNode.data)) {
+ wrapperNode = doc.createElement(o.tagName);
+ o.className && (wrapperNode.className = o.className);
+ patternNode = textNode.splitText(match.index);
+ patternNode.splitText(match[0].length);
+ wrapperNode.appendChild(patternNode.cloneNode(true));
+ textNode.parentNode.replaceChild(wrapperNode, patternNode);
+ }
+ return !!match;
+ }
+ function traverse(el, hightlightTextNode) {
+ var childNode, TEXT_NODE_TYPE = 3;
+ for (var i = 0; i < el.childNodes.length; i++) {
+ childNode = el.childNodes[i];
+ if (childNode.nodeType === TEXT_NODE_TYPE) {
+ i += hightlightTextNode(childNode) ? 1 : 0;
+ } else {
+ traverse(childNode, hightlightTextNode);
+ }
+ }
+ }
+ };
+ function accent_replacer(chr) {
+ return accented[chr.toUpperCase()] || chr;
+ }
+ function getRegex(patterns, caseSensitive, wordsOnly, diacriticInsensitive) {
+ var escapedPatterns = [], regexStr;
+ for (var i = 0, len = patterns.length; i < len; i++) {
+ var escapedWord = _.escapeRegExChars(patterns[i]);
+ if (diacriticInsensitive) {
+ escapedWord = escapedWord.replace(/\S/g, accent_replacer);
+ }
+ escapedPatterns.push(escapedWord);
+ }
+ regexStr = wordsOnly ? "\\b(" + escapedPatterns.join("|") + ")\\b" : "(" + escapedPatterns.join("|") + ")";
+ return caseSensitive ? new RegExp(regexStr) : new RegExp(regexStr, "i");
+ }
+ }(window.document);
+ var Input = function() {
+ "use strict";
+ var specialKeyCodeMap;
+ specialKeyCodeMap = {
+ 9: "tab",
+ 27: "esc",
+ 37: "left",
+ 39: "right",
+ 13: "enter",
+ 38: "up",
+ 40: "down"
+ };
+ function Input(o, www) {
+ var id;
+ o = o || {};
+ if (!o.input) {
+ $.error("input is missing");
+ }
+ www.mixin(this);
+ this.$hint = $(o.hint);
+ this.$input = $(o.input);
+ this.$menu = $(o.menu);
+ id = this.$input.attr("id") || _.guid();
+ this.$menu.attr("id", id + "_listbox");
+ this.$hint.attr({
+ "aria-hidden": true
+ });
+ this.$input.attr({
+ "aria-owns": id + "_listbox",
+ role: "combobox",
+ "aria-autocomplete": "list",
+ "aria-expanded": false
+ });
+ this.query = this.$input.val();
+ this.queryWhenFocused = this.hasFocus() ? this.query : null;
+ this.$overflowHelper = buildOverflowHelper(this.$input);
+ this._checkLanguageDirection();
+ if (this.$hint.length === 0) {
+ this.setHint = this.getHint = this.clearHint = this.clearHintIfInvalid = _.noop;
+ }
+ this.onSync("cursorchange", this._updateDescendent);
+ }
+ Input.normalizeQuery = function(str) {
+ return _.toStr(str).replace(/^\s*/g, "").replace(/\s{2,}/g, " ");
+ };
+ _.mixin(Input.prototype, EventEmitter, {
+ _onBlur: function onBlur() {
+ this.resetInputValue();
+ this.trigger("blurred");
+ },
+ _onFocus: function onFocus() {
+ this.queryWhenFocused = this.query;
+ this.trigger("focused");
+ },
+ _onKeydown: function onKeydown($e) {
+ var keyName = specialKeyCodeMap[$e.which || $e.keyCode];
+ this._managePreventDefault(keyName, $e);
+ if (keyName && this._shouldTrigger(keyName, $e)) {
+ this.trigger(keyName + "Keyed", $e);
+ }
+ },
+ _onInput: function onInput() {
+ this._setQuery(this.getInputValue());
+ this.clearHintIfInvalid();
+ this._checkLanguageDirection();
+ },
+ _managePreventDefault: function managePreventDefault(keyName, $e) {
+ var preventDefault;
+ switch (keyName) {
+ case "up":
+ case "down":
+ preventDefault = !withModifier($e);
+ break;
+
+ default:
+ preventDefault = false;
+ }
+ preventDefault && $e.preventDefault();
+ },
+ _shouldTrigger: function shouldTrigger(keyName, $e) {
+ var trigger;
+ switch (keyName) {
+ case "tab":
+ trigger = !withModifier($e);
+ break;
+
+ default:
+ trigger = true;
+ }
+ return trigger;
+ },
+ _checkLanguageDirection: function checkLanguageDirection() {
+ var dir = (this.$input.css("direction") || "ltr").toLowerCase();
+ if (this.dir !== dir) {
+ this.dir = dir;
+ this.$hint.attr("dir", dir);
+ this.trigger("langDirChanged", dir);
+ }
+ },
+ _setQuery: function setQuery(val, silent) {
+ var areEquivalent, hasDifferentWhitespace;
+ areEquivalent = areQueriesEquivalent(val, this.query);
+ hasDifferentWhitespace = areEquivalent ? this.query.length !== val.length : false;
+ this.query = val;
+ if (!silent && !areEquivalent) {
+ this.trigger("queryChanged", this.query);
+ } else if (!silent && hasDifferentWhitespace) {
+ this.trigger("whitespaceChanged", this.query);
+ }
+ },
+ _updateDescendent: function updateDescendent(event, id) {
+ this.$input.attr("aria-activedescendant", id);
+ },
+ bind: function() {
+ var that = this, onBlur, onFocus, onKeydown, onInput;
+ onBlur = _.bind(this._onBlur, this);
+ onFocus = _.bind(this._onFocus, this);
+ onKeydown = _.bind(this._onKeydown, this);
+ onInput = _.bind(this._onInput, this);
+ this.$input.on("blur.tt", onBlur).on("focus.tt", onFocus).on("keydown.tt", onKeydown);
+ if (!_.isMsie() || _.isMsie() > 9) {
+ this.$input.on("input.tt", onInput);
+ } else {
+ this.$input.on("keydown.tt keypress.tt cut.tt paste.tt", function($e) {
+ if (specialKeyCodeMap[$e.which || $e.keyCode]) {
+ return;
+ }
+ _.defer(_.bind(that._onInput, that, $e));
+ });
+ }
+ return this;
+ },
+ focus: function focus() {
+ this.$input.focus();
+ },
+ blur: function blur() {
+ this.$input.blur();
+ },
+ getLangDir: function getLangDir() {
+ return this.dir;
+ },
+ getQuery: function getQuery() {
+ return this.query || "";
+ },
+ setQuery: function setQuery(val, silent) {
+ this.setInputValue(val);
+ this._setQuery(val, silent);
+ },
+ hasQueryChangedSinceLastFocus: function hasQueryChangedSinceLastFocus() {
+ return this.query !== this.queryWhenFocused;
+ },
+ getInputValue: function getInputValue() {
+ return this.$input.val();
+ },
+ setInputValue: function setInputValue(value) {
+ this.$input.val(value);
+ this.clearHintIfInvalid();
+ this._checkLanguageDirection();
+ },
+ resetInputValue: function resetInputValue() {
+ this.setInputValue(this.query);
+ },
+ getHint: function getHint() {
+ return this.$hint.val();
+ },
+ setHint: function setHint(value) {
+ this.$hint.val(value);
+ },
+ clearHint: function clearHint() {
+ this.setHint("");
+ },
+ clearHintIfInvalid: function clearHintIfInvalid() {
+ var val, hint, valIsPrefixOfHint, isValid;
+ val = this.getInputValue();
+ hint = this.getHint();
+ valIsPrefixOfHint = val !== hint && hint.indexOf(val) === 0;
+ isValid = val !== "" && valIsPrefixOfHint && !this.hasOverflow();
+ !isValid && this.clearHint();
+ },
+ hasFocus: function hasFocus() {
+ return this.$input.is(":focus");
+ },
+ hasOverflow: function hasOverflow() {
+ var constraint = this.$input.width() - 2;
+ this.$overflowHelper.text(this.getInputValue());
+ return this.$overflowHelper.width() >= constraint;
+ },
+ isCursorAtEnd: function() {
+ var valueLength, selectionStart, range;
+ valueLength = this.$input.val().length;
+ selectionStart = this.$input[0].selectionStart;
+ if (_.isNumber(selectionStart)) {
+ return selectionStart === valueLength;
+ } else if (document.selection) {
+ range = document.selection.createRange();
+ range.moveStart("character", -valueLength);
+ return valueLength === range.text.length;
+ }
+ return true;
+ },
+ destroy: function destroy() {
+ this.$hint.off(".tt");
+ this.$input.off(".tt");
+ this.$overflowHelper.remove();
+ this.$hint = this.$input = this.$overflowHelper = $("");
+ },
+ setAriaExpanded: function setAriaExpanded(value) {
+ this.$input.attr("aria-expanded", value);
+ }
+ });
+ return Input;
+ function buildOverflowHelper($input) {
+ return $('
').css({
+ position: "absolute",
+ visibility: "hidden",
+ whiteSpace: "pre",
+ fontFamily: $input.css("font-family"),
+ fontSize: $input.css("font-size"),
+ fontStyle: $input.css("font-style"),
+ fontVariant: $input.css("font-variant"),
+ fontWeight: $input.css("font-weight"),
+ wordSpacing: $input.css("word-spacing"),
+ letterSpacing: $input.css("letter-spacing"),
+ textIndent: $input.css("text-indent"),
+ textRendering: $input.css("text-rendering"),
+ textTransform: $input.css("text-transform")
+ }).insertAfter($input);
+ }
+ function areQueriesEquivalent(a, b) {
+ return Input.normalizeQuery(a) === Input.normalizeQuery(b);
+ }
+ function withModifier($e) {
+ return $e.altKey || $e.ctrlKey || $e.metaKey || $e.shiftKey;
+ }
+ }();
+ var Dataset = function() {
+ "use strict";
+ var keys, nameGenerator;
+ keys = {
+ dataset: "tt-selectable-dataset",
+ val: "tt-selectable-display",
+ obj: "tt-selectable-object"
+ };
+ nameGenerator = _.getIdGenerator();
+ function Dataset(o, www) {
+ o = o || {};
+ o.templates = o.templates || {};
+ o.templates.notFound = o.templates.notFound || o.templates.empty;
+ if (!o.source) {
+ $.error("missing source");
+ }
+ if (!o.node) {
+ $.error("missing node");
+ }
+ if (o.name && !isValidName(o.name)) {
+ $.error("invalid dataset name: " + o.name);
+ }
+ www.mixin(this);
+ this.highlight = !!o.highlight;
+ this.name = _.toStr(o.name || nameGenerator());
+ this.limit = o.limit || 5;
+ this.displayFn = getDisplayFn(o.display || o.displayKey);
+ this.templates = getTemplates(o.templates, this.displayFn);
+ this.source = o.source.__ttAdapter ? o.source.__ttAdapter() : o.source;
+ this.async = _.isUndefined(o.async) ? this.source.length > 2 : !!o.async;
+ this._resetLastSuggestion();
+ this.$el = $(o.node).attr("role", "presentation").addClass(this.classes.dataset).addClass(this.classes.dataset + "-" + this.name);
+ }
+ Dataset.extractData = function extractData(el) {
+ var $el = $(el);
+ if ($el.data(keys.obj)) {
+ return {
+ dataset: $el.data(keys.dataset) || "",
+ val: $el.data(keys.val) || "",
+ obj: $el.data(keys.obj) || null
+ };
+ }
+ return null;
+ };
+ _.mixin(Dataset.prototype, EventEmitter, {
+ _overwrite: function overwrite(query, suggestions) {
+ suggestions = suggestions || [];
+ if (suggestions.length) {
+ this._renderSuggestions(query, suggestions);
+ } else if (this.async && this.templates.pending) {
+ this._renderPending(query);
+ } else if (!this.async && this.templates.notFound) {
+ this._renderNotFound(query);
+ } else {
+ this._empty();
+ }
+ this.trigger("rendered", suggestions, false, this.name);
+ },
+ _append: function append(query, suggestions) {
+ suggestions = suggestions || [];
+ if (suggestions.length && this.$lastSuggestion.length) {
+ this._appendSuggestions(query, suggestions);
+ } else if (suggestions.length) {
+ this._renderSuggestions(query, suggestions);
+ } else if (!this.$lastSuggestion.length && this.templates.notFound) {
+ this._renderNotFound(query);
+ }
+ this.trigger("rendered", suggestions, true, this.name);
+ },
+ _renderSuggestions: function renderSuggestions(query, suggestions) {
+ var $fragment;
+ $fragment = this._getSuggestionsFragment(query, suggestions);
+ this.$lastSuggestion = $fragment.children().last();
+ this.$el.html($fragment).prepend(this._getHeader(query, suggestions)).append(this._getFooter(query, suggestions));
+ },
+ _appendSuggestions: function appendSuggestions(query, suggestions) {
+ var $fragment, $lastSuggestion;
+ $fragment = this._getSuggestionsFragment(query, suggestions);
+ $lastSuggestion = $fragment.children().last();
+ this.$lastSuggestion.after($fragment);
+ this.$lastSuggestion = $lastSuggestion;
+ },
+ _renderPending: function renderPending(query) {
+ var template = this.templates.pending;
+ this._resetLastSuggestion();
+ template && this.$el.html(template({
+ query: query,
+ dataset: this.name
+ }));
+ },
+ _renderNotFound: function renderNotFound(query) {
+ var template = this.templates.notFound;
+ this._resetLastSuggestion();
+ template && this.$el.html(template({
+ query: query,
+ dataset: this.name
+ }));
+ },
+ _empty: function empty() {
+ this.$el.empty();
+ this._resetLastSuggestion();
+ },
+ _getSuggestionsFragment: function getSuggestionsFragment(query, suggestions) {
+ var that = this, fragment;
+ fragment = document.createDocumentFragment();
+ _.each(suggestions, function getSuggestionNode(suggestion) {
+ var $el, context;
+ context = that._injectQuery(query, suggestion);
+ $el = $(that.templates.suggestion(context)).data(keys.dataset, that.name).data(keys.obj, suggestion).data(keys.val, that.displayFn(suggestion)).addClass(that.classes.suggestion + " " + that.classes.selectable);
+ fragment.appendChild($el[0]);
+ });
+ this.highlight && highlight({
+ className: this.classes.highlight,
+ node: fragment,
+ pattern: query
+ });
+ return $(fragment);
+ },
+ _getFooter: function getFooter(query, suggestions) {
+ return this.templates.footer ? this.templates.footer({
+ query: query,
+ suggestions: suggestions,
+ dataset: this.name
+ }) : null;
+ },
+ _getHeader: function getHeader(query, suggestions) {
+ return this.templates.header ? this.templates.header({
+ query: query,
+ suggestions: suggestions,
+ dataset: this.name
+ }) : null;
+ },
+ _resetLastSuggestion: function resetLastSuggestion() {
+ this.$lastSuggestion = $();
+ },
+ _injectQuery: function injectQuery(query, obj) {
+ return _.isObject(obj) ? _.mixin({
+ _query: query
+ }, obj) : obj;
+ },
+ update: function update(query) {
+ var that = this, canceled = false, syncCalled = false, rendered = 0;
+ this.cancel();
+ this.cancel = function cancel() {
+ canceled = true;
+ that.cancel = $.noop;
+ that.async && that.trigger("asyncCanceled", query, that.name);
+ };
+ this.source(query, sync, async);
+ !syncCalled && sync([]);
+ function sync(suggestions) {
+ if (syncCalled) {
+ return;
+ }
+ syncCalled = true;
+ suggestions = (suggestions || []).slice(0, that.limit);
+ rendered = suggestions.length;
+ that._overwrite(query, suggestions);
+ if (rendered < that.limit && that.async) {
+ that.trigger("asyncRequested", query, that.name);
+ }
+ }
+ function async(suggestions) {
+ suggestions = suggestions || [];
+ if (!canceled && rendered < that.limit) {
+ that.cancel = $.noop;
+ var idx = Math.abs(rendered - that.limit);
+ rendered += idx;
+ that._append(query, suggestions.slice(0, idx));
+ that.async && that.trigger("asyncReceived", query, that.name);
+ }
+ }
+ },
+ cancel: $.noop,
+ clear: function clear() {
+ this._empty();
+ this.cancel();
+ this.trigger("cleared");
+ },
+ isEmpty: function isEmpty() {
+ return this.$el.is(":empty");
+ },
+ destroy: function destroy() {
+ this.$el = $("
");
+ }
+ });
+ return Dataset;
+ function getDisplayFn(display) {
+ display = display || _.stringify;
+ return _.isFunction(display) ? display : displayFn;
+ function displayFn(obj) {
+ return obj[display];
+ }
+ }
+ function getTemplates(templates, displayFn) {
+ return {
+ notFound: templates.notFound && _.templatify(templates.notFound),
+ pending: templates.pending && _.templatify(templates.pending),
+ header: templates.header && _.templatify(templates.header),
+ footer: templates.footer && _.templatify(templates.footer),
+ suggestion: templates.suggestion ? userSuggestionTemplate : suggestionTemplate
+ };
+ function userSuggestionTemplate(context) {
+ var template = templates.suggestion;
+ return $(template(context)).attr("id", _.guid());
+ }
+ function suggestionTemplate(context) {
+ return $('
').attr("id", _.guid()).text(displayFn(context));
+ }
+ }
+ function isValidName(str) {
+ return /^[_a-zA-Z0-9-]+$/.test(str);
+ }
+ }();
+ var Menu = function() {
+ "use strict";
+ function Menu(o, www) {
+ var that = this;
+ o = o || {};
+ if (!o.node) {
+ $.error("node is required");
+ }
+ www.mixin(this);
+ this.$node = $(o.node);
+ this.query = null;
+ this.datasets = _.map(o.datasets, initializeDataset);
+ function initializeDataset(oDataset) {
+ var node = that.$node.find(oDataset.node).first();
+ oDataset.node = node.length ? node : $("
").appendTo(that.$node);
+ return new Dataset(oDataset, www);
+ }
+ }
+ _.mixin(Menu.prototype, EventEmitter, {
+ _onSelectableClick: function onSelectableClick($e) {
+ this.trigger("selectableClicked", $($e.currentTarget));
+ },
+ _onRendered: function onRendered(type, dataset, suggestions, async) {
+ this.$node.toggleClass(this.classes.empty, this._allDatasetsEmpty());
+ this.trigger("datasetRendered", dataset, suggestions, async);
+ },
+ _onCleared: function onCleared() {
+ this.$node.toggleClass(this.classes.empty, this._allDatasetsEmpty());
+ this.trigger("datasetCleared");
+ },
+ _propagate: function propagate() {
+ this.trigger.apply(this, arguments);
+ },
+ _allDatasetsEmpty: function allDatasetsEmpty() {
+ return _.every(this.datasets, _.bind(function isDatasetEmpty(dataset) {
+ var isEmpty = dataset.isEmpty();
+ this.$node.attr("aria-expanded", !isEmpty);
+ return isEmpty;
+ }, this));
+ },
+ _getSelectables: function getSelectables() {
+ return this.$node.find(this.selectors.selectable);
+ },
+ _removeCursor: function _removeCursor() {
+ var $selectable = this.getActiveSelectable();
+ $selectable && $selectable.removeClass(this.classes.cursor);
+ },
+ _ensureVisible: function ensureVisible($el) {
+ var elTop, elBottom, nodeScrollTop, nodeHeight;
+ elTop = $el.position().top;
+ elBottom = elTop + $el.outerHeight(true);
+ nodeScrollTop = this.$node.scrollTop();
+ nodeHeight = this.$node.height() + parseInt(this.$node.css("paddingTop"), 10) + parseInt(this.$node.css("paddingBottom"), 10);
+ if (elTop < 0) {
+ this.$node.scrollTop(nodeScrollTop + elTop);
+ } else if (nodeHeight < elBottom) {
+ this.$node.scrollTop(nodeScrollTop + (elBottom - nodeHeight));
+ }
+ },
+ bind: function() {
+ var that = this, onSelectableClick;
+ onSelectableClick = _.bind(this._onSelectableClick, this);
+ this.$node.on("click.tt", this.selectors.selectable, onSelectableClick);
+ this.$node.on("mouseover", this.selectors.selectable, function() {
+ that.setCursor($(this));
+ });
+ this.$node.on("mouseleave", function() {
+ that._removeCursor();
+ });
+ _.each(this.datasets, function(dataset) {
+ dataset.onSync("asyncRequested", that._propagate, that).onSync("asyncCanceled", that._propagate, that).onSync("asyncReceived", that._propagate, that).onSync("rendered", that._onRendered, that).onSync("cleared", that._onCleared, that);
+ });
+ return this;
+ },
+ isOpen: function isOpen() {
+ return this.$node.hasClass(this.classes.open);
+ },
+ open: function open() {
+ this.$node.scrollTop(0);
+ this.$node.addClass(this.classes.open);
+ },
+ close: function close() {
+ this.$node.attr("aria-expanded", false);
+ this.$node.removeClass(this.classes.open);
+ this._removeCursor();
+ },
+ setLanguageDirection: function setLanguageDirection(dir) {
+ this.$node.attr("dir", dir);
+ },
+ selectableRelativeToCursor: function selectableRelativeToCursor(delta) {
+ var $selectables, $oldCursor, oldIndex, newIndex;
+ $oldCursor = this.getActiveSelectable();
+ $selectables = this._getSelectables();
+ oldIndex = $oldCursor ? $selectables.index($oldCursor) : -1;
+ newIndex = oldIndex + delta;
+ newIndex = (newIndex + 1) % ($selectables.length + 1) - 1;
+ newIndex = newIndex < -1 ? $selectables.length - 1 : newIndex;
+ return newIndex === -1 ? null : $selectables.eq(newIndex);
+ },
+ setCursor: function setCursor($selectable) {
+ this._removeCursor();
+ if ($selectable = $selectable && $selectable.first()) {
+ $selectable.addClass(this.classes.cursor);
+ this._ensureVisible($selectable);
+ }
+ },
+ getSelectableData: function getSelectableData($el) {
+ return $el && $el.length ? Dataset.extractData($el) : null;
+ },
+ getActiveSelectable: function getActiveSelectable() {
+ var $selectable = this._getSelectables().filter(this.selectors.cursor).first();
+ return $selectable.length ? $selectable : null;
+ },
+ getTopSelectable: function getTopSelectable() {
+ var $selectable = this._getSelectables().first();
+ return $selectable.length ? $selectable : null;
+ },
+ update: function update(query) {
+ var isValidUpdate = query !== this.query;
+ if (isValidUpdate) {
+ this.query = query;
+ _.each(this.datasets, updateDataset);
+ }
+ return isValidUpdate;
+ function updateDataset(dataset) {
+ dataset.update(query);
+ }
+ },
+ empty: function empty() {
+ _.each(this.datasets, clearDataset);
+ this.query = null;
+ this.$node.addClass(this.classes.empty);
+ function clearDataset(dataset) {
+ dataset.clear();
+ }
+ },
+ destroy: function destroy() {
+ this.$node.off(".tt");
+ this.$node = $("
");
+ _.each(this.datasets, destroyDataset);
+ function destroyDataset(dataset) {
+ dataset.destroy();
+ }
+ }
+ });
+ return Menu;
+ }();
+ var Status = function() {
+ "use strict";
+ function Status(options) {
+ this.$el = $("
", {
+ role: "status",
+ "aria-live": "polite"
+ }).css({
+ position: "absolute",
+ padding: "0",
+ border: "0",
+ height: "1px",
+ width: "1px",
+ "margin-bottom": "-1px",
+ "margin-right": "-1px",
+ overflow: "hidden",
+ clip: "rect(0 0 0 0)",
+ "white-space": "nowrap"
+ });
+ options.$input.after(this.$el);
+ _.each(options.menu.datasets, _.bind(function(dataset) {
+ if (dataset.onSync) {
+ dataset.onSync("rendered", _.bind(this.update, this));
+ dataset.onSync("cleared", _.bind(this.cleared, this));
+ }
+ }, this));
+ }
+ _.mixin(Status.prototype, {
+ update: function update(event, suggestions) {
+ var length = suggestions.length;
+ var words;
+ if (length === 1) {
+ words = {
+ result: "result",
+ is: "is"
+ };
+ } else {
+ words = {
+ result: "results",
+ is: "are"
+ };
+ }
+ this.$el.text(length + " " + words.result + " " + words.is + " available, use up and down arrow keys to navigate.");
+ },
+ cleared: function() {
+ this.$el.text("");
+ }
+ });
+ return Status;
+ }();
+ var DefaultMenu = function() {
+ "use strict";
+ var s = Menu.prototype;
+ function DefaultMenu() {
+ Menu.apply(this, [].slice.call(arguments, 0));
+ }
+ _.mixin(DefaultMenu.prototype, Menu.prototype, {
+ open: function open() {
+ !this._allDatasetsEmpty() && this._show();
+ return s.open.apply(this, [].slice.call(arguments, 0));
+ },
+ close: function close() {
+ this._hide();
+ return s.close.apply(this, [].slice.call(arguments, 0));
+ },
+ _onRendered: function onRendered() {
+ if (this._allDatasetsEmpty()) {
+ this._hide();
+ } else {
+ this.isOpen() && this._show();
+ }
+ return s._onRendered.apply(this, [].slice.call(arguments, 0));
+ },
+ _onCleared: function onCleared() {
+ if (this._allDatasetsEmpty()) {
+ this._hide();
+ } else {
+ this.isOpen() && this._show();
+ }
+ return s._onCleared.apply(this, [].slice.call(arguments, 0));
+ },
+ setLanguageDirection: function setLanguageDirection(dir) {
+ this.$node.css(dir === "ltr" ? this.css.ltr : this.css.rtl);
+ return s.setLanguageDirection.apply(this, [].slice.call(arguments, 0));
+ },
+ _hide: function hide() {
+ this.$node.hide();
+ },
+ _show: function show() {
+ this.$node.css("display", "block");
+ }
+ });
+ return DefaultMenu;
+ }();
+ var Typeahead = function() {
+ "use strict";
+ function Typeahead(o, www) {
+ var onFocused, onBlurred, onEnterKeyed, onTabKeyed, onEscKeyed, onUpKeyed, onDownKeyed, onLeftKeyed, onRightKeyed, onQueryChanged, onWhitespaceChanged;
+ o = o || {};
+ if (!o.input) {
+ $.error("missing input");
+ }
+ if (!o.menu) {
+ $.error("missing menu");
+ }
+ if (!o.eventBus) {
+ $.error("missing event bus");
+ }
+ www.mixin(this);
+ this.eventBus = o.eventBus;
+ this.minLength = _.isNumber(o.minLength) ? o.minLength : 1;
+ this.input = o.input;
+ this.menu = o.menu;
+ this.enabled = true;
+ this.autoselect = !!o.autoselect;
+ this.active = false;
+ this.input.hasFocus() && this.activate();
+ this.dir = this.input.getLangDir();
+ this._hacks();
+ this.menu.bind().onSync("selectableClicked", this._onSelectableClicked, this).onSync("asyncRequested", this._onAsyncRequested, this).onSync("asyncCanceled", this._onAsyncCanceled, this).onSync("asyncReceived", this._onAsyncReceived, this).onSync("datasetRendered", this._onDatasetRendered, this).onSync("datasetCleared", this._onDatasetCleared, this);
+ onFocused = c(this, "activate", "open", "_onFocused");
+ onBlurred = c(this, "deactivate", "_onBlurred");
+ onEnterKeyed = c(this, "isActive", "isOpen", "_onEnterKeyed");
+ onTabKeyed = c(this, "isActive", "isOpen", "_onTabKeyed");
+ onEscKeyed = c(this, "isActive", "_onEscKeyed");
+ onUpKeyed = c(this, "isActive", "open", "_onUpKeyed");
+ onDownKeyed = c(this, "isActive", "open", "_onDownKeyed");
+ onLeftKeyed = c(this, "isActive", "isOpen", "_onLeftKeyed");
+ onRightKeyed = c(this, "isActive", "isOpen", "_onRightKeyed");
+ onQueryChanged = c(this, "_openIfActive", "_onQueryChanged");
+ onWhitespaceChanged = c(this, "_openIfActive", "_onWhitespaceChanged");
+ this.input.bind().onSync("focused", onFocused, this).onSync("blurred", onBlurred, this).onSync("enterKeyed", onEnterKeyed, this).onSync("tabKeyed", onTabKeyed, this).onSync("escKeyed", onEscKeyed, this).onSync("upKeyed", onUpKeyed, this).onSync("downKeyed", onDownKeyed, this).onSync("leftKeyed", onLeftKeyed, this).onSync("rightKeyed", onRightKeyed, this).onSync("queryChanged", onQueryChanged, this).onSync("whitespaceChanged", onWhitespaceChanged, this).onSync("langDirChanged", this._onLangDirChanged, this);
+ }
+ _.mixin(Typeahead.prototype, {
+ _hacks: function hacks() {
+ var $input, $menu;
+ $input = this.input.$input || $("
");
+ $menu = this.menu.$node || $("
");
+ $input.on("blur.tt", function($e) {
+ var active, isActive, hasActive;
+ active = document.activeElement;
+ isActive = $menu.is(active);
+ hasActive = $menu.has(active).length > 0;
+ if (_.isMsie() && (isActive || hasActive)) {
+ $e.preventDefault();
+ $e.stopImmediatePropagation();
+ _.defer(function() {
+ $input.focus();
+ });
+ }
+ });
+ $menu.on("mousedown.tt", function($e) {
+ $e.preventDefault();
+ });
+ },
+ _onSelectableClicked: function onSelectableClicked(type, $el) {
+ this.select($el);
+ },
+ _onDatasetCleared: function onDatasetCleared() {
+ this._updateHint();
+ },
+ _onDatasetRendered: function onDatasetRendered(type, suggestions, async, dataset) {
+ this._updateHint();
+ if (this.autoselect) {
+ var cursorClass = this.selectors.cursor.substr(1);
+ this.menu.$node.find(this.selectors.suggestion).first().addClass(cursorClass);
+ }
+ this.eventBus.trigger("render", suggestions, async, dataset);
+ },
+ _onAsyncRequested: function onAsyncRequested(type, dataset, query) {
+ this.eventBus.trigger("asyncrequest", query, dataset);
+ },
+ _onAsyncCanceled: function onAsyncCanceled(type, dataset, query) {
+ this.eventBus.trigger("asynccancel", query, dataset);
+ },
+ _onAsyncReceived: function onAsyncReceived(type, dataset, query) {
+ this.eventBus.trigger("asyncreceive", query, dataset);
+ },
+ _onFocused: function onFocused() {
+ this._minLengthMet() && this.menu.update(this.input.getQuery());
+ },
+ _onBlurred: function onBlurred() {
+ if (this.input.hasQueryChangedSinceLastFocus()) {
+ this.eventBus.trigger("change", this.input.getQuery());
+ }
+ },
+ _onEnterKeyed: function onEnterKeyed(type, $e) {
+ var $selectable;
+ if ($selectable = this.menu.getActiveSelectable()) {
+ if (this.select($selectable)) {
+ $e.preventDefault();
+ $e.stopPropagation();
+ }
+ } else if (this.autoselect) {
+ if (this.select(this.menu.getTopSelectable())) {
+ $e.preventDefault();
+ $e.stopPropagation();
+ }
+ }
+ },
+ _onTabKeyed: function onTabKeyed(type, $e) {
+ var $selectable;
+ if ($selectable = this.menu.getActiveSelectable()) {
+ this.select($selectable) && $e.preventDefault();
+ } else if (this.autoselect) {
+ if ($selectable = this.menu.getTopSelectable()) {
+ this.autocomplete($selectable) && $e.preventDefault();
+ }
+ }
+ },
+ _onEscKeyed: function onEscKeyed() {
+ this.close();
+ },
+ _onUpKeyed: function onUpKeyed() {
+ this.moveCursor(-1);
+ },
+ _onDownKeyed: function onDownKeyed() {
+ this.moveCursor(+1);
+ },
+ _onLeftKeyed: function onLeftKeyed() {
+ if (this.dir === "rtl" && this.input.isCursorAtEnd()) {
+ this.autocomplete(this.menu.getActiveSelectable() || this.menu.getTopSelectable());
+ }
+ },
+ _onRightKeyed: function onRightKeyed() {
+ if (this.dir === "ltr" && this.input.isCursorAtEnd()) {
+ this.autocomplete(this.menu.getActiveSelectable() || this.menu.getTopSelectable());
+ }
+ },
+ _onQueryChanged: function onQueryChanged(e, query) {
+ this._minLengthMet(query) ? this.menu.update(query) : this.menu.empty();
+ },
+ _onWhitespaceChanged: function onWhitespaceChanged() {
+ this._updateHint();
+ },
+ _onLangDirChanged: function onLangDirChanged(e, dir) {
+ if (this.dir !== dir) {
+ this.dir = dir;
+ this.menu.setLanguageDirection(dir);
+ }
+ },
+ _openIfActive: function openIfActive() {
+ this.isActive() && this.open();
+ },
+ _minLengthMet: function minLengthMet(query) {
+ query = _.isString(query) ? query : this.input.getQuery() || "";
+ return query.length >= this.minLength;
+ },
+ _updateHint: function updateHint() {
+ var $selectable, data, val, query, escapedQuery, frontMatchRegEx, match;
+ $selectable = this.menu.getTopSelectable();
+ data = this.menu.getSelectableData($selectable);
+ val = this.input.getInputValue();
+ if (data && !_.isBlankString(val) && !this.input.hasOverflow()) {
+ query = Input.normalizeQuery(val);
+ escapedQuery = _.escapeRegExChars(query);
+ frontMatchRegEx = new RegExp("^(?:" + escapedQuery + ")(.+$)", "i");
+ match = frontMatchRegEx.exec(data.val);
+ match && this.input.setHint(val + match[1]);
+ } else {
+ this.input.clearHint();
+ }
+ },
+ isEnabled: function isEnabled() {
+ return this.enabled;
+ },
+ enable: function enable() {
+ this.enabled = true;
+ },
+ disable: function disable() {
+ this.enabled = false;
+ },
+ isActive: function isActive() {
+ return this.active;
+ },
+ activate: function activate() {
+ if (this.isActive()) {
+ return true;
+ } else if (!this.isEnabled() || this.eventBus.before("active")) {
+ return false;
+ } else {
+ this.active = true;
+ this.eventBus.trigger("active");
+ return true;
+ }
+ },
+ deactivate: function deactivate() {
+ if (!this.isActive()) {
+ return true;
+ } else if (this.eventBus.before("idle")) {
+ return false;
+ } else {
+ this.active = false;
+ this.close();
+ this.eventBus.trigger("idle");
+ return true;
+ }
+ },
+ isOpen: function isOpen() {
+ return this.menu.isOpen();
+ },
+ open: function open() {
+ if (!this.isOpen() && !this.eventBus.before("open")) {
+ this.input.setAriaExpanded(true);
+ this.menu.open();
+ this._updateHint();
+ this.eventBus.trigger("open");
+ }
+ return this.isOpen();
+ },
+ close: function close() {
+ if (this.isOpen() && !this.eventBus.before("close")) {
+ this.input.setAriaExpanded(false);
+ this.menu.close();
+ this.input.clearHint();
+ this.input.resetInputValue();
+ this.eventBus.trigger("close");
+ }
+ return !this.isOpen();
+ },
+ setVal: function setVal(val) {
+ this.input.setQuery(_.toStr(val));
+ },
+ getVal: function getVal() {
+ return this.input.getQuery();
+ },
+ select: function select($selectable) {
+ var data = this.menu.getSelectableData($selectable);
+ if (data && !this.eventBus.before("select", data.obj, data.dataset)) {
+ this.input.setQuery(data.val, true);
+ this.eventBus.trigger("select", data.obj, data.dataset);
+ this.close();
+ return true;
+ }
+ return false;
+ },
+ autocomplete: function autocomplete($selectable) {
+ var query, data, isValid;
+ query = this.input.getQuery();
+ data = this.menu.getSelectableData($selectable);
+ isValid = data && query !== data.val;
+ if (isValid && !this.eventBus.before("autocomplete", data.obj, data.dataset)) {
+ this.input.setQuery(data.val);
+ this.eventBus.trigger("autocomplete", data.obj, data.dataset);
+ return true;
+ }
+ return false;
+ },
+ moveCursor: function moveCursor(delta) {
+ var query, $candidate, data, suggestion, datasetName, cancelMove, id;
+ query = this.input.getQuery();
+ $candidate = this.menu.selectableRelativeToCursor(delta);
+ data = this.menu.getSelectableData($candidate);
+ suggestion = data ? data.obj : null;
+ datasetName = data ? data.dataset : null;
+ id = $candidate ? $candidate.attr("id") : null;
+ this.input.trigger("cursorchange", id);
+ cancelMove = this._minLengthMet() && this.menu.update(query);
+ if (!cancelMove && !this.eventBus.before("cursorchange", suggestion, datasetName)) {
+ this.menu.setCursor($candidate);
+ if (data) {
+ if (typeof data.val === "string") {
+ this.input.setInputValue(data.val);
+ }
+ } else {
+ this.input.resetInputValue();
+ this._updateHint();
+ }
+ this.eventBus.trigger("cursorchange", suggestion, datasetName);
+ return true;
+ }
+ return false;
+ },
+ destroy: function destroy() {
+ this.input.destroy();
+ this.menu.destroy();
+ }
+ });
+ return Typeahead;
+ function c(ctx) {
+ var methods = [].slice.call(arguments, 1);
+ return function() {
+ var args = [].slice.call(arguments);
+ _.each(methods, function(method) {
+ return ctx[method].apply(ctx, args);
+ });
+ };
+ }
+ }();
+ (function() {
+ "use strict";
+ var old, keys, methods;
+ old = $.fn.typeahead;
+ keys = {
+ www: "tt-www",
+ attrs: "tt-attrs",
+ typeahead: "tt-typeahead"
+ };
+ methods = {
+ initialize: function initialize(o, datasets) {
+ var www;
+ datasets = _.isArray(datasets) ? datasets : [].slice.call(arguments, 1);
+ o = o || {};
+ www = WWW(o.classNames);
+ return this.each(attach);
+ function attach() {
+ var $input, $wrapper, $hint, $menu, defaultHint, defaultMenu, eventBus, input, menu, status, typeahead, MenuConstructor;
+ _.each(datasets, function(d) {
+ d.highlight = !!o.highlight;
+ });
+ $input = $(this);
+ $wrapper = $(www.html.wrapper);
+ $hint = $elOrNull(o.hint);
+ $menu = $elOrNull(o.menu);
+ defaultHint = o.hint !== false && !$hint;
+ defaultMenu = o.menu !== false && !$menu;
+ defaultHint && ($hint = buildHintFromInput($input, www));
+ defaultMenu && ($menu = $(www.html.menu).css(www.css.menu));
+ $hint && $hint.val("");
+ $input = prepInput($input, www);
+ if (defaultHint || defaultMenu) {
+ $wrapper.css(www.css.wrapper);
+ $input.css(defaultHint ? www.css.input : www.css.inputWithNoHint);
+ $input.wrap($wrapper).parent().prepend(defaultHint ? $hint : null).append(defaultMenu ? $menu : null);
+ }
+ MenuConstructor = defaultMenu ? DefaultMenu : Menu;
+ eventBus = new EventBus({
+ el: $input
+ });
+ input = new Input({
+ hint: $hint,
+ input: $input,
+ menu: $menu
+ }, www);
+ menu = new MenuConstructor({
+ node: $menu,
+ datasets: datasets
+ }, www);
+ status = new Status({
+ $input: $input,
+ menu: menu
+ });
+ typeahead = new Typeahead({
+ input: input,
+ menu: menu,
+ eventBus: eventBus,
+ minLength: o.minLength,
+ autoselect: o.autoselect
+ }, www);
+ $input.data(keys.www, www);
+ $input.data(keys.typeahead, typeahead);
+ }
+ },
+ isEnabled: function isEnabled() {
+ var enabled;
+ ttEach(this.first(), function(t) {
+ enabled = t.isEnabled();
+ });
+ return enabled;
+ },
+ enable: function enable() {
+ ttEach(this, function(t) {
+ t.enable();
+ });
+ return this;
+ },
+ disable: function disable() {
+ ttEach(this, function(t) {
+ t.disable();
+ });
+ return this;
+ },
+ isActive: function isActive() {
+ var active;
+ ttEach(this.first(), function(t) {
+ active = t.isActive();
+ });
+ return active;
+ },
+ activate: function activate() {
+ ttEach(this, function(t) {
+ t.activate();
+ });
+ return this;
+ },
+ deactivate: function deactivate() {
+ ttEach(this, function(t) {
+ t.deactivate();
+ });
+ return this;
+ },
+ isOpen: function isOpen() {
+ var open;
+ ttEach(this.first(), function(t) {
+ open = t.isOpen();
+ });
+ return open;
+ },
+ open: function open() {
+ ttEach(this, function(t) {
+ t.open();
+ });
+ return this;
+ },
+ close: function close() {
+ ttEach(this, function(t) {
+ t.close();
+ });
+ return this;
+ },
+ select: function select(el) {
+ var success = false, $el = $(el);
+ ttEach(this.first(), function(t) {
+ success = t.select($el);
+ });
+ return success;
+ },
+ autocomplete: function autocomplete(el) {
+ var success = false, $el = $(el);
+ ttEach(this.first(), function(t) {
+ success = t.autocomplete($el);
+ });
+ return success;
+ },
+ moveCursor: function moveCursoe(delta) {
+ var success = false;
+ ttEach(this.first(), function(t) {
+ success = t.moveCursor(delta);
+ });
+ return success;
+ },
+ val: function val(newVal) {
+ var query;
+ if (!arguments.length) {
+ ttEach(this.first(), function(t) {
+ query = t.getVal();
+ });
+ return query;
+ } else {
+ ttEach(this, function(t) {
+ t.setVal(_.toStr(newVal));
+ });
+ return this;
+ }
+ },
+ destroy: function destroy() {
+ ttEach(this, function(typeahead, $input) {
+ revert($input);
+ typeahead.destroy();
+ });
+ return this;
+ }
+ };
+ $.fn.typeahead = function(method) {
+ if (methods[method]) {
+ return methods[method].apply(this, [].slice.call(arguments, 1));
+ } else {
+ return methods.initialize.apply(this, arguments);
+ }
+ };
+ $.fn.typeahead.noConflict = function noConflict() {
+ $.fn.typeahead = old;
+ return this;
+ };
+ function ttEach($els, fn) {
+ $els.each(function() {
+ var $input = $(this), typeahead;
+ (typeahead = $input.data(keys.typeahead)) && fn(typeahead, $input);
+ });
+ }
+ function buildHintFromInput($input, www) {
+ return $input.clone().addClass(www.classes.hint).removeData().css(www.css.hint).css(getBackgroundStyles($input)).prop({
+ readonly: true,
+ required: false
+ }).removeAttr("id name placeholder").removeClass("required").attr({
+ spellcheck: "false",
+ tabindex: -1
+ });
+ }
+ function prepInput($input, www) {
+ $input.data(keys.attrs, {
+ dir: $input.attr("dir"),
+ autocomplete: $input.attr("autocomplete"),
+ spellcheck: $input.attr("spellcheck"),
+ style: $input.attr("style")
+ });
+ $input.addClass(www.classes.input).attr({
+ spellcheck: false
+ });
+ try {
+ !$input.attr("dir") && $input.attr("dir", "auto");
+ } catch (e) {}
+ return $input;
+ }
+ function getBackgroundStyles($el) {
+ return {
+ backgroundAttachment: $el.css("background-attachment"),
+ backgroundClip: $el.css("background-clip"),
+ backgroundColor: $el.css("background-color"),
+ backgroundImage: $el.css("background-image"),
+ backgroundOrigin: $el.css("background-origin"),
+ backgroundPosition: $el.css("background-position"),
+ backgroundRepeat: $el.css("background-repeat"),
+ backgroundSize: $el.css("background-size")
+ };
+ }
+ function revert($input) {
+ var www, $wrapper;
+ www = $input.data(keys.www);
+ $wrapper = $input.parent().filter(www.selectors.wrapper);
+ _.each($input.data(keys.attrs), function(val, key) {
+ _.isUndefined(val) ? $input.removeAttr(key) : $input.attr(key, val);
+ });
+ $input.removeData(keys.typeahead).removeData(keys.www).removeData(keys.attr).removeClass(www.classes.input);
+ if ($wrapper.length) {
+ $input.detach().insertAfter($wrapper);
+ $wrapper.remove();
+ }
+ }
+ function $elOrNull(obj) {
+ var isValid, $el;
+ isValid = _.isJQuery(obj) || _.isElement(obj);
+ $el = isValid ? $(obj).first() : [];
+ return $el.length ? $el : null;
+ }
+ })();
+});
\ No newline at end of file
diff --git a/large_tuple.html b/large_tuple.html
new file mode 100644
index 000000000..ae2cce249
--- /dev/null
+++ b/large_tuple.html
@@ -0,0 +1,491 @@
+
+
+
+
large_tuple Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SwiftLintFramework Reference
+
+ large_tuple Reference
+
+
+
+
+
+
+
+
+
+
+
+
Large Tuple
+
+
Tuples shouldn’t have too many members. Create a custom type instead.
+
+
+Identifier: large_tuple
+Enabled by default: Yes
+Supports autocorrection: No
+Kind: metrics
+Analyzer rule: No
+Minimum Swift compiler version: 5.0.0
+Default configuration: warning: 2, error: 3
+
+
Non Triggering Examples
+
let foo : ( Int , Int )
+
+
+
let foo : ( start : Int , end : Int )
+
+
+
let foo : ( Int , ( Int , String ))
+
+
+
func foo () -> ( Int , Int )
+
+
+
func foo () -> ( Int , Int ) {}
+
+
+
func foo ( bar : String ) -> ( Int , Int )
+
+
+
func foo ( bar : String ) -> ( Int , Int ) {}
+
+
+
func foo () throws -> ( Int , Int )
+
+
+
func foo () throws -> ( Int , Int ) {}
+
+
+
let foo : ( Int , Int , Int ) -> Void
+
+
+
let foo : ( Int , Int , Int ) throws -> Void
+
+
+
func foo ( bar : ( Int , String , Float ) -> Void )
+
+
+
func foo ( bar : ( Int , String , Float ) throws -> Void )
+
+
+
var completionHandler : (( _ data : Data ?, _ resp : URLResponse ?, _ e : NSError ?) -> Void ) !
+
+
+
func getDictionaryAndInt () -> ( Dictionary < Int , String > , Int )?
+
+
+
func getGenericTypeAndInt () -> ( Type < Int , String , Float > , Int )?
+
+
+
func foo () async -> ( Int , Int )
+
+
+
func foo () async -> ( Int , Int ) {}
+
+
+
func foo ( bar : String ) async -> ( Int , Int )
+
+
+
func foo ( bar : String ) async -> ( Int , Int ) {}
+
+
+
func foo () async throws -> ( Int , Int )
+
+
+
func foo () async throws -> ( Int , Int ) {}
+
+
+
let foo : ( Int , Int , Int ) async -> Void
+
+
+
let foo : ( Int , Int , Int ) async throws -> Void
+
+
+
func foo ( bar : ( Int , String , Float ) async -> Void )
+
+
+
func foo ( bar : ( Int , String , Float ) async throws -> Void )
+
+
+
func getDictionaryAndInt () async -> ( Dictionary < Int , String > , Int )?
+
+
+
func getGenericTypeAndInt () async -> ( Type < Int , String , Float > , Int )?
+
+
+
Triggering Examples
+
let foo : ↓ ( Int , Int , Int )
+
+
+
let foo : ↓ ( start : Int , end : Int , value : String )
+
+
+
let foo : ( Int , ↓ ( Int , Int , Int ))
+
+
+
func foo ( bar : ↓ ( Int , Int , Int ))
+
+
+
func foo () -> ↓ ( Int , Int , Int )
+
+
+
func foo () -> ↓ ( Int , Int , Int ) {}
+
+
+
func foo ( bar : String ) -> ↓ ( Int , Int , Int )
+
+
+
func foo ( bar : String ) -> ↓ ( Int , Int , Int ) {}
+
+
+
func foo () throws -> ↓ ( Int , Int , Int )
+
+
+
func foo () throws -> ↓ ( Int , Int , Int ) {}
+
+
+
func foo () throws -> ↓ ( Int , ↓ ( String , String , String ), Int ) {}
+
+
+
func getDictionaryAndInt () -> ( Dictionary < Int , ↓ ( String , String , String ) > , Int )?
+
+
+
func foo ( bar : ↓ ( Int , Int , Int )) async
+
+
+
func foo () async -> ↓ ( Int , Int , Int )
+
+
+
func foo () async -> ↓ ( Int , Int , Int ) {}
+
+
+
func foo ( bar : String ) async -> ↓ ( Int , Int , Int )
+
+
+
func foo ( bar : String ) async -> ↓ ( Int , Int , Int ) {}
+
+
+
func foo () async throws -> ↓ ( Int , Int , Int )
+
+
+
func foo () async throws -> ↓ ( Int , Int , Int ) {}
+
+
+
func foo () async throws -> ↓ ( Int , ↓ ( String , String , String ), Int ) {}
+
+
+
func getDictionaryAndInt () async -> ( Dictionary < Int , ↓ ( String , String , String ) > , Int )?
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/last_where.html b/last_where.html
new file mode 100644
index 000000000..fe553ec7c
--- /dev/null
+++ b/last_where.html
@@ -0,0 +1,380 @@
+
+
+
+
last_where Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SwiftLintFramework Reference
+
+ last_where Reference
+
+
+
+
+
+
+
+
+
+
+
+
Last Where
+
+
Prefer using .last(where:) over .filter { }.last in collections.
+
+
+Identifier: last_where
+Enabled by default: No
+Supports autocorrection: No
+Kind: performance
+Analyzer rule: No
+Minimum Swift compiler version: 5.0.0
+Default configuration: warning
+
+
Non Triggering Examples
+
kinds . filter ( excludingKinds . contains ) . isEmpty && kinds . last == . identifier
+
+
+
myList . last ( where : { $0 % 2 == 0 })
+
+
+
match ( pattern : pattern ) . filter { $0 . last == . identifier }
+
+
+
( myList . filter { $0 == 1 } . suffix ( 2 )) . last
+
+
+
collection . filter ( "stringCol = '3'" ) . last
+
+
Triggering Examples
+
↓ myList . filter { $0 % 2 == 0 } . last
+
+
+
↓ myList . filter ({ $0 % 2 == 0 }) . last
+
+
+
↓ myList . map { $0 + 1 } . filter ({ $0 % 2 == 0 }) . last
+
+
+
↓ myList . map { $0 + 1 } . filter ({ $0 % 2 == 0 }) . last ? . something ()
+
+
+
↓ myList . filter ( someFunction ) . last
+
+
+
↓ myList . filter ({ $0 % 2 == 0 })
+. last
+
+
+
( ↓ myList . filter { $0 == 1 }) . last
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/leading_whitespace.html b/leading_whitespace.html
new file mode 100644
index 000000000..37605fb3f
--- /dev/null
+++ b/leading_whitespace.html
@@ -0,0 +1,354 @@
+
+
+
+
leading_whitespace Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SwiftLintFramework Reference
+
+ leading_whitespace Reference
+
+
+
+
+
+
+
+
+
+
+
+
Leading Whitespace
+
+
Files should not contain leading whitespace.
+
+
+Identifier: leading_whitespace
+Enabled by default: Yes
+Supports autocorrection: Yes
+Kind: style
+Analyzer rule: No
+Minimum Swift compiler version: 5.0.0
+Default configuration: warning
+
+
Non Triggering Examples
+
//
+
+
+
Triggering Examples
+
+//
+
+
+
//
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/legacy_cggeometry_functions.html b/legacy_cggeometry_functions.html
new file mode 100644
index 000000000..ba5058b7a
--- /dev/null
+++ b/legacy_cggeometry_functions.html
@@ -0,0 +1,424 @@
+
+
+
+
legacy_cggeometry_functions Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SwiftLintFramework Reference
+
+ legacy_cggeometry_functions Reference
+
+
+
+
+
+
+
+
+
+
+
+
Legacy CGGeometry Functions
+
+
Struct extension properties and methods are preferred over legacy functions
+
+
+Identifier: legacy_cggeometry_functions
+Enabled by default: Yes
+Supports autocorrection: Yes
+Kind: idiomatic
+Analyzer rule: No
+Minimum Swift compiler version: 5.0.0
+Default configuration: warning
+
+
Non Triggering Examples
+
rect . width
+
+
rect . height
+
+
rect . minX
+
+
rect . midX
+
+
rect . maxX
+
+
rect . minY
+
+
rect . midY
+
+
rect . maxY
+
+
rect . isNull
+
+
rect . isEmpty
+
+
rect . isInfinite
+
+
rect . standardized
+
+
rect . integral
+
+
rect . insetBy ( dx : 5.0 , dy : - 7.0 )
+
+
rect . offsetBy ( dx : 5.0 , dy : - 7.0 )
+
+
rect1 . union ( rect2 )
+
+
rect1 . intersect ( rect2 )
+
+
rect1 . contains ( rect2 )
+
+
rect . contains ( point )
+
+
rect1 . intersects ( rect2 )
+
+
Triggering Examples
+
↓ CGRectGetWidth ( rect )
+
+
↓ CGRectGetHeight ( rect )
+
+
↓ CGRectGetMinX ( rect )
+
+
↓ CGRectGetMidX ( rect )
+
+
↓ CGRectGetMaxX ( rect )
+
+
↓ CGRectGetMinY ( rect )
+
+
↓ CGRectGetMidY ( rect )
+
+
↓ CGRectGetMaxY ( rect )
+
+
↓ CGRectIsNull ( rect )
+
+
↓ CGRectIsEmpty ( rect )
+
+
↓ CGRectIsInfinite ( rect )
+
+
↓ CGRectStandardize ( rect )
+
+
↓ CGRectIntegral ( rect )
+
+
↓ CGRectInset ( rect , 10 , 5 )
+
+
↓ CGRectOffset ( rect , - 2 , 8.3 )
+
+
↓ CGRectUnion ( rect1 , rect2 )
+
+
↓ CGRectIntersection ( rect1 , rect2 )
+
+
↓ CGRectContainsRect ( rect1 , rect2 )
+
+
↓ CGRectContainsPoint ( rect , point )
+
+
↓ CGRectIntersectsRect ( rect1 , rect2 )
+
+
+
+
+
+
+
+
+
+
+
diff --git a/legacy_constant.html b/legacy_constant.html
new file mode 100644
index 000000000..2c26f355b
--- /dev/null
+++ b/legacy_constant.html
@@ -0,0 +1,384 @@
+
+
+
+
legacy_constant Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SwiftLintFramework Reference
+
+ legacy_constant Reference
+
+
+
+
+
+
+
+
+
+
+
+
Legacy Constant
+
+
Struct-scoped constants are preferred over legacy global constants.
+
+
+Identifier: legacy_constant
+Enabled by default: Yes
+Supports autocorrection: Yes
+Kind: idiomatic
+Analyzer rule: No
+Minimum Swift compiler version: 5.0.0
+Default configuration: warning
+
+
Non Triggering Examples
+
CGRect . infinite
+
+
CGPoint . zero
+
+
CGRect . zero
+
+
CGSize . zero
+
+
NSPoint . zero
+
+
NSRect . zero
+
+
NSSize . zero
+
+
CGRect . null
+
+
CGFloat . pi
+
+
Float . pi
+
+
Triggering Examples
+
↓ CGRectInfinite
+
+
↓ CGPointZero
+
+
↓ CGRectZero
+
+
↓ CGSizeZero
+
+
↓ NSZeroPoint
+
+
↓ NSZeroRect
+
+
↓ NSZeroSize
+
+
↓ CGRectNull
+
+
↓ CGFloat ( M_PI )
+
+
↓ Float ( M_PI )
+
+
+
+
+
+
+
+
+
+
+
diff --git a/legacy_constructor.html b/legacy_constructor.html
new file mode 100644
index 000000000..97323339b
--- /dev/null
+++ b/legacy_constructor.html
@@ -0,0 +1,438 @@
+
+
+
+
legacy_constructor Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SwiftLintFramework Reference
+
+ legacy_constructor Reference
+
+
+
+
+
+
+
+
+
+
+
+
Legacy Constructor
+
+
Swift constructors are preferred over legacy convenience functions.
+
+
+Identifier: legacy_constructor
+Enabled by default: Yes
+Supports autocorrection: Yes
+Kind: idiomatic
+Analyzer rule: No
+Minimum Swift compiler version: 5.0.0
+Default configuration: warning
+
+
Non Triggering Examples
+
CGPoint ( x : 10 , y : 10 )
+
+
CGPoint ( x : xValue , y : yValue )
+
+
CGSize ( width : 10 , height : 10 )
+
+
CGSize ( width : aWidth , height : aHeight )
+
+
CGRect ( x : 0 , y : 0 , width : 10 , height : 10 )
+
+
CGRect ( x : xVal , y : yVal , width : aWidth , height : aHeight )
+
+
CGVector ( dx : 10 , dy : 10 )
+
+
CGVector ( dx : deltaX , dy : deltaY )
+
+
NSPoint ( x : 10 , y : 10 )
+
+
NSPoint ( x : xValue , y : yValue )
+
+
NSSize ( width : 10 , height : 10 )
+
+
NSSize ( width : aWidth , height : aHeight )
+
+
NSRect ( x : 0 , y : 0 , width : 10 , height : 10 )
+
+
NSRect ( x : xVal , y : yVal , width : aWidth , height : aHeight )
+
+
NSRange ( location : 10 , length : 1 )
+
+
NSRange ( location : loc , length : len )
+
+
UIEdgeInsets ( top : 0 , left : 0 , bottom : 10 , right : 10 )
+
+
UIEdgeInsets ( top : aTop , left : aLeft , bottom : aBottom , right : aRight )
+
+
NSEdgeInsets ( top : 0 , left : 0 , bottom : 10 , right : 10 )
+
+
NSEdgeInsets ( top : aTop , left : aLeft , bottom : aBottom , right : aRight )
+
+
UIOffset ( horizontal : 0 , vertical : 10 )
+
+
UIOffset ( horizontal : horizontal , vertical : vertical )
+
+
Triggering Examples
+
↓ CGPointMake ( 10 , 10 )
+
+
↓ CGPointMake ( xVal , yVal )
+
+
↓ CGPointMake ( calculateX (), 10 )
+
+
+
↓ CGSizeMake ( 10 , 10 )
+
+
↓ CGSizeMake ( aWidth , aHeight )
+
+
↓ CGRectMake ( 0 , 0 , 10 , 10 )
+
+
↓ CGRectMake ( xVal , yVal , width , height )
+
+
↓ CGVectorMake ( 10 , 10 )
+
+
↓ CGVectorMake ( deltaX , deltaY )
+
+
↓ NSMakePoint ( 10 , 10 )
+
+
↓ NSMakePoint ( xVal , yVal )
+
+
↓ NSMakeSize ( 10 , 10 )
+
+
↓ NSMakeSize ( aWidth , aHeight )
+
+
↓ NSMakeRect ( 0 , 0 , 10 , 10 )
+
+
↓ NSMakeRect ( xVal , yVal , width , height )
+
+
↓ NSMakeRange ( 10 , 1 )
+
+
↓ NSMakeRange ( loc , len )
+
+
↓ UIEdgeInsetsMake ( 0 , 0 , 10 , 10 )
+
+
↓ UIEdgeInsetsMake ( top , left , bottom , right )
+
+
↓ NSEdgeInsetsMake ( 0 , 0 , 10 , 10 )
+
+
↓ NSEdgeInsetsMake ( top , left , bottom , right )
+
+
↓ CGVectorMake ( 10 , 10 )
+↓ NSMakeRange ( 10 , 1 )
+
+
↓ UIOffsetMake ( 0 , 10 )
+
+
↓ UIOffsetMake ( horizontal , vertical )
+
+
+
+
+
+
+
+
+
+
+
diff --git a/legacy_hashing.html b/legacy_hashing.html
new file mode 100644
index 000000000..8b56b11e5
--- /dev/null
+++ b/legacy_hashing.html
@@ -0,0 +1,397 @@
+
+
+
+
legacy_hashing Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SwiftLintFramework Reference
+
+ legacy_hashing Reference
+
+
+
+
+
+
+
+
+
+
+
+
Legacy Hashing
+
+
Prefer using the hash(into:) function instead of overriding hashValue
+
+
+Identifier: legacy_hashing
+Enabled by default: Yes
+Supports autocorrection: No
+Kind: idiomatic
+Analyzer rule: No
+Minimum Swift compiler version: 5.0.0
+Default configuration: warning
+
+
Non Triggering Examples
+
struct Foo : Hashable {
+ let bar : Int = 10
+
+ func hash ( into hasher : inout Hasher ) {
+ hasher . combine ( bar )
+ }
+}
+
+
class Foo : Hashable {
+ let bar : Int = 10
+
+ func hash ( into hasher : inout Hasher ) {
+ hasher . combine ( bar )
+ }
+}
+
+
var hashValue : Int { return 1 }
+class Foo : Hashable {
+ }
+
+
class Foo : Hashable {
+ let bar : String = "Foo"
+
+ public var hashValue : String {
+ return bar
+ }
+}
+
+
class Foo : Hashable {
+ let bar : String = "Foo"
+
+ public var hashValue : String {
+ get { return bar }
+ set { bar = newValue }
+ }
+}
+
+
Triggering Examples
+
struct Foo : Hashable {
+ let bar : Int = 10
+
+ public ↓ var hashValue : Int {
+ return bar
+ }
+}
+
+
class Foo : Hashable {
+ let bar : Int = 10
+
+ public ↓ var hashValue : Int {
+ return bar
+ }
+}
+
+
+
+
+
+
+
+
+
+
+
diff --git a/legacy_multiple.html b/legacy_multiple.html
new file mode 100644
index 000000000..5f5d7a029
--- /dev/null
+++ b/legacy_multiple.html
@@ -0,0 +1,375 @@
+
+
+
+
legacy_multiple Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SwiftLintFramework Reference
+
+ legacy_multiple Reference
+
+
+
+
+
+
+
+
+
+
+
+
Legacy Multiple
+
+
Prefer using the isMultiple(of:) function instead of using the remainder operator (%).
+
+
+Identifier: legacy_multiple
+Enabled by default: No
+Supports autocorrection: No
+Kind: idiomatic
+Analyzer rule: No
+Minimum Swift compiler version: 5.0.0
+Default configuration: warning
+
+
Non Triggering Examples
+
cell . contentView . backgroundColor = indexPath . row . isMultiple ( of : 2 ) ? . gray : . white
+
+
guard count . isMultiple ( of : 2 ) else { throw DecodingError . dataCorrupted ( ... ) }
+
+
sanityCheck ( bytes > 0 && bytes . isMultiple ( of : 4 ), "capacity must be multiple of 4 bytes" )
+
+
guard let i = reversedNumbers . firstIndex ( where : { $0 . isMultiple ( of : 2 ) }) else { return }
+
+
let constant = 56
+let isMultiple = value . isMultiple ( of : constant )
+
+
let constant = 56
+let secret = value % constant == 5
+
+
let secretValue = ( value % 3 ) + 2
+
+
Triggering Examples
+
cell . contentView . backgroundColor = indexPath . row ↓ % 2 == 0 ? . gray : . white
+
+
cell . contentView . backgroundColor = 0 == indexPath . row ↓ % 2 ? . gray : . white
+
+
cell . contentView . backgroundColor = indexPath . row ↓ % 2 != 0 ? . gray : . white
+
+
guard count ↓ % 2 == 0 else { throw DecodingError . dataCorrupted ( ... ) }
+
+
sanityCheck ( bytes > 0 && bytes ↓ % 4 == 0 , "capacity must be multiple of 4 bytes" )
+
+
guard let i = reversedNumbers . firstIndex ( where : { $0 ↓ % 2 == 0 }) else { return }
+
+
let constant = 56
+let isMultiple = value ↓ % constant == 0
+
+
+
+
+
+
+
+
+
+
+
diff --git a/legacy_nsgeometry_functions.html b/legacy_nsgeometry_functions.html
new file mode 100644
index 000000000..d9533356e
--- /dev/null
+++ b/legacy_nsgeometry_functions.html
@@ -0,0 +1,420 @@
+
+
+
+
legacy_nsgeometry_functions Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SwiftLintFramework Reference
+
+ legacy_nsgeometry_functions Reference
+
+
+
+
+
+
+
+
+
+
+
+
Legacy NSGeometry Functions
+
+
Struct extension properties and methods are preferred over legacy functions
+
+
+Identifier: legacy_nsgeometry_functions
+Enabled by default: Yes
+Supports autocorrection: Yes
+Kind: idiomatic
+Analyzer rule: No
+Minimum Swift compiler version: 5.0.0
+Default configuration: warning
+
+
Non Triggering Examples
+
rect . width
+
+
rect . height
+
+
rect . minX
+
+
rect . midX
+
+
rect . maxX
+
+
rect . minY
+
+
rect . midY
+
+
rect . maxY
+
+
rect . isEmpty
+
+
rect . integral
+
+
rect . insetBy ( dx : 5.0 , dy : - 7.0 )
+
+
rect . offsetBy ( dx : 5.0 , dy : - 7.0 )
+
+
rect1 . union ( rect2 )
+
+
rect1 . intersection ( rect2 )
+
+
rect1 . contains ( rect2 )
+
+
rect . contains ( point )
+
+
rect1 . intersects ( rect2 )
+
+
Triggering Examples
+
↓ NSWidth ( rect )
+
+
↓ NSHeight ( rect )
+
+
↓ NSMinX ( rect )
+
+
↓ NSMidX ( rect )
+
+
↓ NSMaxX ( rect )
+
+
↓ NSMinY ( rect )
+
+
↓ NSMidY ( rect )
+
+
↓ NSMaxY ( rect )
+
+
↓ NSEqualRects ( rect1 , rect2 )
+
+
↓ NSEqualSizes ( size1 , size2 )
+
+
↓ NSEqualPoints ( point1 , point2 )
+
+
↓ NSEdgeInsetsEqual ( insets2 , insets2 )
+
+
↓ NSIsEmptyRect ( rect )
+
+
↓ NSIntegralRect ( rect )
+
+
↓ NSInsetRect ( rect , 10 , 5 )
+
+
↓ NSOffsetRect ( rect , - 2 , 8.3 )
+
+
↓ NSUnionRect ( rect1 , rect2 )
+
+
↓ NSIntersectionRect ( rect1 , rect2 )
+
+
↓ NSContainsRect ( rect1 , rect2 )
+
+
↓ NSPointInRect ( rect , point )
+
+
↓ NSIntersectsRect ( rect1 , rect2 )
+
+
+
+
+
+
+
+
+
+
+
diff --git a/legacy_objc_type.html b/legacy_objc_type.html
new file mode 100644
index 000000000..434968d14
--- /dev/null
+++ b/legacy_objc_type.html
@@ -0,0 +1,377 @@
+
+
+
+
legacy_objc_type Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SwiftLintFramework Reference
+
+ legacy_objc_type Reference
+
+
+
+
+
+
+
+
+
+
+
+
Legacy Objective-C Reference Type
+
+
Prefer Swift value types to bridged Objective-C reference types
+
+
+Identifier: legacy_objc_type
+Enabled by default: No
+Supports autocorrection: No
+Kind: idiomatic
+Analyzer rule: No
+Minimum Swift compiler version: 5.0.0
+Default configuration: warning
+
+
Non Triggering Examples
+
var array = Array < Int > ()
+
+
+
var calendar : Calendar ? = nil
+
+
var formatter : NSDataDetector
+
+
var className : String = NSStringFromClass ( MyClass . self )
+
+
_ = URLRequest . CachePolicy . reloadIgnoringLocalCacheData
+
+
_ = Notification . Name ( "com.apple.Music.playerInfo" )
+
+
Triggering Examples
+
var array = ↓ NSArray ()
+
+
var calendar : ↓ NSCalendar ? = nil
+
+
_ = ↓ NSURLRequest . CachePolicy . reloadIgnoringLocalCacheData
+
+
_ = ↓ NSNotification . Name ( "com.apple.Music.playerInfo" )
+
+
let keyValuePair : ( Int ) -> ( ↓ NSString , ↓ NSString ) = {
+ let n = " \( $0 ) " as ↓ NSString ; return ( n , n )
+}
+dictionary = [ ↓ NSString : ↓ NSString ]( uniqueKeysWithValues :
+ ( 1 ... 10_000 ) . lazy . map ( keyValuePair ))
+
+
extension Foundation . Notification . Name {
+ static var reachabilityChanged : Foundation . ↓ NSNotification . Name {
+ return Foundation . Notification . Name ( "org.wordpress.reachability.changed" )
+ }
+}
+
+
+
+
+
+
+
+
+
+
+
diff --git a/legacy_random.html b/legacy_random.html
new file mode 100644
index 000000000..98a8e92e3
--- /dev/null
+++ b/legacy_random.html
@@ -0,0 +1,362 @@
+
+
+
+
legacy_random Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SwiftLintFramework Reference
+
+ legacy_random Reference
+
+
+
+
+
+
+
+
+
+
+
+
Legacy Random
+
+
Prefer using type.random(in:) over legacy functions.
+
+
+Identifier: legacy_random
+Enabled by default: Yes
+Supports autocorrection: No
+Kind: idiomatic
+Analyzer rule: No
+Minimum Swift compiler version: 5.0.0
+Default configuration: warning
+
+
Non Triggering Examples
+
Int . random ( in : 0 ..< 10 )
+
+
+
Double . random ( in : 8.6 ... 111.34 )
+
+
+
Float . random ( in : 0 ..< 1 )
+
+
+
Triggering Examples
+
↓ arc4random ( 10 )
+
+
+
↓ arc4random_uniform ( 83 )
+
+
+
↓ drand48 ( 52 )
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/let_var_whitespace.html b/let_var_whitespace.html
new file mode 100644
index 000000000..ae1e8cab7
--- /dev/null
+++ b/let_var_whitespace.html
@@ -0,0 +1,472 @@
+
+
+
+
let_var_whitespace Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SwiftLintFramework Reference
+
+ let_var_whitespace Reference
+
+
+
+
+
+
+
+
+
+
+
+
Variable Declaration Whitespace
+
+
Let and var should be separated from other statements by a blank line.
+
+
+Identifier: let_var_whitespace
+Enabled by default: No
+Supports autocorrection: No
+Kind: style
+Analyzer rule: No
+Minimum Swift compiler version: 5.0.0
+Default configuration: warning
+
+
Non Triggering Examples
+
let a = 0
+var x = 1
+
+x = 2
+
+
+
a = 5
+
+var x = 1
+
+
+
struct X {
+ var a = 0
+}
+
+
+
let a = 1 +
+ 2
+let b = 5
+
+
+
var x : Int {
+ return 0
+}
+
+
+
var x : Int {
+ let a = 0
+
+ return a
+}
+
+
+
#if os(macOS)
+let a = 0
+#endif
+
+
+
#warning("TODO: remove it")
+let a = 0
+
+
+
#error("TODO: remove it")
+let a = 0
+
+
+
@available ( swift 4 )
+let a = 0
+
+
+
class C {
+ @objc
+ var s : String = ""
+}
+
+
class C {
+ @objc
+ func a () {}
+}
+
+
class C {
+ var x = 0
+ lazy
+ var y = 0
+}
+
+
+
@available ( OSX , introduced : 10.6 )
+@available ( * , deprecated )
+var x = 0
+
+
+
// swiftlint:disable superfluous_disable_command
+// swiftlint:disable force_cast
+
+let x = bar as! Bar
+
+
@available ( swift 4 )
+ @UserDefault ( "param" , defaultValue : true )
+ var isEnabled = true
+
+ @Attribute
+ func f () {}
+
+
var x : Int {
+ let a = 0
+ return a
+}
+
+
+
Triggering Examples
+
var x = 1
+↓ x = 2
+
+
+
+a = 5
+↓ var x = 1
+
+
+
struct X {
+ let a
+ ↓ func x () {}
+}
+
+
+
var x = 0
+↓ @objc func f () {}
+
+
+
var x = 0
+↓ @objc
+ func f () {}
+
+
+
@objc func f () {
+}
+↓ var x = 0
+
+
+
struct S {
+ func f () {}
+ ↓ @Wapper
+ let isNumber = false
+ @Wapper
+ var isEnabled = true
+ ↓ func g () {}
+ }
+
+
+
+
+
+
+
+
+
+
+
diff --git a/line_length.html b/line_length.html
new file mode 100644
index 000000000..b359bf394
--- /dev/null
+++ b/line_length.html
@@ -0,0 +1,362 @@
+
+
+
+
line_length Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SwiftLintFramework Reference
+
+ line_length Reference
+
+
+
+
+
+
+
+
+
+
+
+
Line Length
+
+
Lines should not span too many characters.
+
+
+Identifier: line_length
+Enabled by default: Yes
+Supports autocorrection: No
+Kind: metrics
+Analyzer rule: No
+Minimum Swift compiler version: 5.0.0
+Default configuration: warning: 120, error: 200, ignores urls: false, ignores function declarations: false, ignores comments: false, ignores interpolated strings: false
+
+
Non Triggering Examples
+
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+
+
#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)
+
+
+
#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")
+
+
+
Triggering Examples
+
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+
+
#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)
+
+
+
#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/literal_expression_end_indentation.html b/literal_expression_end_indentation.html
new file mode 100644
index 000000000..730272b2f
--- /dev/null
+++ b/literal_expression_end_indentation.html
@@ -0,0 +1,389 @@
+
+
+
+
literal_expression_end_indentation Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SwiftLintFramework Reference
+
+ literal_expression_end_indentation Reference
+
+
+
+
+
+
+
+
+
+
+
+
Literal Expression End Indentation
+
+
Array and dictionary literal end should have the same indentation as the line that started it.
+
+
+Identifier: literal_expression_end_indentation
+Enabled by default: No
+Supports autocorrection: Yes
+Kind: style
+Analyzer rule: No
+Minimum Swift compiler version: 5.0.0
+Default configuration: warning
+
+
Non Triggering Examples
+
[ 1 , 2 , 3 ]
+
+
[ 1 ,
+ 2
+]
+
+
[
+ 1 ,
+ 2
+]
+
+
[
+ 1 ,
+ 2 ]
+
+
let x = [
+ 1 ,
+ 2
+ ]
+
+
[ key : 2 , key2 : 3 ]
+
+
[ key : 1 ,
+ key2 : 2
+]
+
+
[
+ key : 0 ,
+ key2 : 20
+]
+
+
Triggering Examples
+
let x = [
+ 1 ,
+ 2
+ ↓ ]
+
+
let x = [
+ 1 ,
+ 2
+↓ ]
+
+
let x = [
+ key : value
+ ↓ ]
+
+
+
+
+
+
+
+
+
+
+
diff --git a/local_doc_comment.html b/local_doc_comment.html
new file mode 100644
index 000000000..2edde5755
--- /dev/null
+++ b/local_doc_comment.html
@@ -0,0 +1,364 @@
+
+
+
+
local_doc_comment Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SwiftLintFramework Reference
+
+ local_doc_comment Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Doc comments shouldn’t be used in local scopes. Use regular comments.
+
+
+Identifier: local_doc_comment
+Enabled by default: No
+Supports autocorrection: No
+Kind: lint
+Analyzer rule: No
+Minimum Swift compiler version: 5.0.0
+Default configuration: warning
+
+
Non Triggering Examples
+
func foo () {
+ // Local scope documentation should use normal comments.
+ print ( "foo" )
+}
+
+
/// My great property
+var myGreatProperty : String !
+
+
/// Look here for more info: https://github.com.
+var myGreatProperty : String !
+
+
/// Look here for more info:
+/// https://github.com.
+var myGreatProperty : String !
+
+
Triggering Examples
+
func foo () {
+ ↓ /// Docstring inside a function declaration
+ print ( "foo" )
+}
+
+
+
+
+
+
+
+
+
+
+
diff --git a/lower_acl_than_parent.html b/lower_acl_than_parent.html
new file mode 100644
index 000000000..c1a6e0a60
--- /dev/null
+++ b/lower_acl_than_parent.html
@@ -0,0 +1,416 @@
+
+
+
+
lower_acl_than_parent Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SwiftLintFramework Reference
+
+ lower_acl_than_parent Reference
+
+
+
+
+
+
+
+
+
+
+
+
Lower ACL than parent
+
+
Ensure declarations have a lower access control level than their enclosing parent
+
+
+Identifier: lower_acl_than_parent
+Enabled by default: No
+Supports autocorrection: Yes
+Kind: lint
+Analyzer rule: No
+Minimum Swift compiler version: 5.0.0
+Default configuration: warning
+
+
Non Triggering Examples
+
public struct Foo { public func bar () {} }
+
+
internal struct Foo { func bar () {} }
+
+
struct Foo { func bar () {} }
+
+
struct Foo { internal func bar () {} }
+
+
open class Foo { public func bar () {} }
+
+
open class Foo { open func bar () {} }
+
+
fileprivate struct Foo { private func bar () {} }
+
+
private struct Foo { private func bar ( id : String ) }
+
+
extension Foo { public func bar () {} }
+
+
private struct Foo { fileprivate func bar () {} }
+
+
private func foo ( id : String ) {}
+
+
private class Foo { func bar () {} }
+
+
public extension Foo { struct Bar { public func baz () {} }}
+
+
public extension Foo { struct Bar { internal func baz () {} }}
+
+
internal extension Foo { struct Bar { internal func baz () {} }}
+
+
extension Foo { struct Bar { internal func baz () {} }}
+
+
Triggering Examples
+
struct Foo { ↓ public func bar () {} }
+
+
enum Foo { ↓ public func bar () {} }
+
+
public class Foo { ↓ open func bar () }
+
+
class Foo { ↓ public private(set) var bar : String ? }
+
+
private struct Foo { ↓ public func bar () {} }
+
+
private class Foo { ↓ public func bar () {} }
+
+
private actor Foo { ↓ public func bar () {} }
+
+
fileprivate struct Foo { ↓ public func bar () {} }
+
+
class Foo { ↓ public func bar () {} }
+
+
actor Foo { ↓ public func bar () {} }
+
+
private struct Foo { ↓ internal func bar () {} }
+
+
fileprivate struct Foo { ↓ internal func bar () {} }
+
+
extension Foo { struct Bar { ↓ public func baz () {} }}
+
+
internal extension Foo { struct Bar { ↓ public func baz () {} }}
+
+
private extension Foo { struct Bar { ↓ public func baz () {} }}
+
+
fileprivate extension Foo { struct Bar { ↓ public func baz () {} }}
+
+
private extension Foo { struct Bar { ↓ internal func baz () {} }}
+
+
fileprivate extension Foo { struct Bar { ↓ internal func baz () {} }}
+
+
public extension Foo { struct Bar { struct Baz { ↓ public func qux () {} }}}
+
+
final class Foo { ↓ public func bar () {} }
+
+
+
+
+
+
+
+
+
+
+
diff --git a/mark.html b/mark.html
new file mode 100644
index 000000000..ef972bf8c
--- /dev/null
+++ b/mark.html
@@ -0,0 +1,419 @@
+
+
+
+
mark Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SwiftLintFramework Reference
+
+ mark Reference
+
+
+
+
+
+
+
+
+
+
+
+
Mark
+
+
MARK comment should be in valid format. e.g. ‘// MARK: …’ or ‘// MARK: - …’
+
+
+Identifier: mark
+Enabled by default: Yes
+Supports autocorrection: Yes
+Kind: lint
+Analyzer rule: No
+Minimum Swift compiler version: 5.0.0
+Default configuration: warning
+
+
Non Triggering Examples
+
// MARK: good
+
+
+
// MARK: - good
+
+
+
// MARK: -
+
+
+
// BOOKMARK
+
+
//BOOKMARK
+
+
// BOOKMARKS
+
+
/*
+func test1() {
+}
+//MARK: mark
+func test2() {
+}
+*/
+
+
Triggering Examples
+
↓ //MARK: bad
+
+
↓ // MARK:bad
+
+
↓ //MARK:bad
+
+
↓ // MARK: bad
+
+
↓ // MARK: bad
+
+
↓ // MARK: -bad
+
+
↓ // MARK:- bad
+
+
↓ // MARK:-bad
+
+
↓ //MARK: - bad
+
+
↓ //MARK:- bad
+
+
↓ //MARK: -bad
+
+
↓ //MARK:-bad
+
+
↓ //Mark: bad
+
+
↓ // Mark: bad
+
+
↓ // MARK bad
+
+
↓ //MARK bad
+
+
↓ // MARK - bad
+
+
↓ //MARK : bad
+
+
↓ // MARKL:
+
+
↓ // MARKR
+
+
↓ // MARKK -
+
+
↓ /// MARK:
+
+
↓ /// MARK bad
+
+
↓ //MARK:- Top-Level bad mark
+↓ //MARK:- Another bad mark
+struct MarkTest {}
+↓ // MARK:- Bad mark
+extension MarkTest {}
+
+
+
+
+
+
+
+
+
+
+
diff --git a/missing_docs.html b/missing_docs.html
new file mode 100644
index 000000000..dc393a872
--- /dev/null
+++ b/missing_docs.html
@@ -0,0 +1,396 @@
+
+
+
+
missing_docs Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SwiftLintFramework Reference
+
+ missing_docs Reference
+
+
+
+
+
+
+
+
+
+
+
+
Missing Docs
+
+
Declarations should be documented.
+
+
+Identifier: missing_docs
+Enabled by default: No
+Supports autocorrection: No
+Kind: lint
+Analyzer rule: No
+Minimum Swift compiler version: 5.0.0
+Default configuration: warning: open, public, excludes_extensions: true, excludes_inherited_types: true, excludes_trivial_init: false
+
+
Non Triggering Examples
+
/// docs
+public class A {
+/// docs
+public func b () {}
+}
+// no docs
+public class B : A { override public func b () {} }
+
+
import Foundation
+// no docs
+public class B : NSObject {
+// no docs
+override public var description : String { fatalError () } }
+
+
/// docs
+public class A {
+ deinit {}
+}
+
+
public extension A {}
+
+
/// docs
+public class A {
+ public init () {}
+}
+
+
Triggering Examples
+
public func a () {}
+
+
+
// regular comment
+public func a () {}
+
+
+
/* regular comment */
+public func a () {}
+
+
+
/// docs
+public protocol A {
+// no docs
+var b : Int { get } }
+/// docs
+public struct C : A {
+
+public let b : Int
+}
+
+
/// docs
+public class A {
+ public init ( argument : String ) {}
+}
+
+
+
+
+
+
+
+
+
+
+
diff --git a/modifier_order.html b/modifier_order.html
new file mode 100644
index 000000000..6bb2d5d57
--- /dev/null
+++ b/modifier_order.html
@@ -0,0 +1,531 @@
+
+
+
+
modifier_order Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SwiftLintFramework Reference
+
+ modifier_order Reference
+
+
+
+
+
+
+
+
+
+
+
+
Modifier Order
+
+
Modifier order should be consistent.
+
+
+Identifier: modifier_order
+Enabled by default: No
+Supports autocorrection: Yes
+Kind: style
+Analyzer rule: No
+Minimum Swift compiler version: 5.0.0
+Default configuration: warning, preferred_modifier_order: [override, acl, setterACL, dynamic, mutators, lazy, final, required, convenience, typeMethods, owned]
+
+
Non Triggering Examples
+
public class Foo {
+ public required convenience init () {}
+}
+
+
public class Foo {
+ public static let bar = 42
+}
+
+
public class Foo {
+ public static var bar : Int {
+ return
+ }
+}
+
+
public class Foo {
+ public class var bar : Int {
+ return 42
+ }
+}
+
+
public class Bar {
+ public class var foo : String {
+ return "foo"
+ }
+}
+public class Foo : Bar {
+ override public final class var foo : String {
+ return "bar"
+ }
+}
+
+
open class Bar {
+ public var foo : Int ? {
+ return 42
+ }
+}
+open class Foo : Bar {
+ override public var foo : Int ? {
+ return 43
+ }
+}
+
+
open class Bar {
+ open class func foo () -> Int {
+ return 42
+ }
+}
+class Foo : Bar {
+ override open class func foo () -> Int {
+ return 43
+ }
+}
+
+
protocol Foo : class {}
+class Bar {
+ public private(set) weak var foo : Foo ?
+}
+
+
@objc
+public final class Foo : NSObject {}
+
+
@objcMembers
+public final class Foo : NSObject {}
+
+
@objc
+override public private(set) weak var foo : Bar ?
+
+
@objc
+public final class Foo : NSObject {}
+
+
@objc
+open final class Foo : NSObject {
+ open weak var weakBar : NSString ? = nil
+}
+
+
public final class Foo {}
+
+
class Bar {
+ func bar () {}
+}
+
+
internal class Foo : Bar {
+ override internal func bar () {}
+}
+
+
public struct Foo {
+ internal weak var weakBar : NSObject ? = nil
+}
+
+
class Foo {
+ internal lazy var bar : String = "foo"
+}
+
+
Triggering Examples
+
class Foo {
+ convenience required public init () {}
+}
+
+
public class Foo {
+ static public let bar = 42
+}
+
+
public class Foo {
+ static public var bar : Int {
+ return 42
+ }
+}
+
+
public class Foo {
+ class public var bar : Int {
+ return 42
+ }
+}
+
+
public class RootFoo {
+ class public var foo : String {
+ return "foo"
+ }
+}
+public class Foo : RootFoo {
+ override final class public var foo : String
+ return "bar"
+ }
+}
+
+
open class Bar {
+ public var foo : Int ? {
+ return 42
+ }
+}
+open class Foo : Bar {
+ public override var foo : Int ? {
+ return 43
+ }
+}
+
+
protocol Foo : class {}
+ class Bar {
+ private(set) public weak var foo : Foo ?
+}
+
+
open class Bar {
+ open class func foo () -> Int {
+ return 42
+ }
+}
+class Foo : Bar {
+ class open override func foo () -> Int {
+ return 43
+ }
+}
+
+
open class Bar {
+ open class func foo () -> Int {
+ return 42
+ }
+}
+class Foo : Bar {
+ open override class func foo () -> Int {
+ return 43
+ }
+}
+
+
@objc
+final public class Foo : NSObject {}
+
+
@objcMembers
+final public class Foo : NSObject {}
+
+
@objc
+final open class Foo : NSObject {
+ weak open var weakBar : NSString ? = nil
+}
+
+
final public class Foo {}
+
+
internal class Foo : Bar {
+ internal override func bar () {}
+}
+
+
public struct Foo {
+ weak internal var weakBar : NSObjetc ? = nil
+}
+
+
class Foo {
+ lazy internal var bar : String = "foo"
+}
+
+
+
+
+
+
+
+
+
+
+
diff --git a/multiline_arguments.html b/multiline_arguments.html
new file mode 100644
index 000000000..bcd5571de
--- /dev/null
+++ b/multiline_arguments.html
@@ -0,0 +1,405 @@
+
+
+
+
multiline_arguments Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SwiftLintFramework Reference
+
+ multiline_arguments Reference
+
+
+
+
+
+
+
+
+
+
+
+
Multiline Arguments
+
+
Arguments should be either on the same line, or one per line.
+
+
+Identifier: multiline_arguments
+Enabled by default: No
+Supports autocorrection: No
+Kind: style
+Analyzer rule: No
+Minimum Swift compiler version: 5.0.0
+Default configuration: warning, first_argument_location: any_line, only_enforce_after_first_closure_on_first_line: false
+
+
Non Triggering Examples
+
foo ()
+
+
foo (
+)
+
+
foo { }
+
+
foo {
+
+}
+
+
foo ( 0 )
+
+
foo ( 0 , 1 )
+
+
foo ( 0 , 1 ) { }
+
+
foo ( 0 , param1 : 1 )
+
+
foo ( 0 , param1 : 1 ) { }
+
+
foo ( param1 : 1 )
+
+
foo ( param1 : 1 ) { }
+
+
foo ( param1 : 1 , param2 : true ) { }
+
+
foo ( param1 : 1 , param2 : true , param3 : [ 3 ]) { }
+
+
foo ( param1 : 1 , param2 : true , param3 : [ 3 ]) {
+ bar ()
+}
+
+
foo ( param1 : 1 ,
+ param2 : true ,
+ param3 : [ 3 ])
+
+
foo (
+ param1 : 1 , param2 : true , param3 : [ 3 ]
+)
+
+
foo (
+ param1 : 1 ,
+ param2 : true ,
+ param3 : [ 3 ]
+)
+
+
Triggering Examples
+
foo ( 0 ,
+ param1 : 1 , ↓ param2 : true , ↓ param3 : [ 3 ])
+
+
foo ( 0 , ↓ param1 : 1 ,
+ param2 : true , ↓ param3 : [ 3 ])
+
+
foo ( 0 , ↓ param1 : 1 , ↓ param2 : true ,
+ param3 : [ 3 ])
+
+
foo (
+ 0 , ↓ param1 : 1 ,
+ param2 : true , ↓ param3 : [ 3 ]
+)
+
+
+
+
+
+
+
+
+
+
+
diff --git a/multiline_arguments_brackets.html b/multiline_arguments_brackets.html
new file mode 100644
index 000000000..e526f1369
--- /dev/null
+++ b/multiline_arguments_brackets.html
@@ -0,0 +1,452 @@
+
+
+
+
multiline_arguments_brackets Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SwiftLintFramework Reference
+
+ multiline_arguments_brackets Reference
+
+
+
+
+
+
+
+
+
+
+
+
Multiline Arguments Brackets
+
+
Multiline arguments should have their surrounding brackets in a new line.
+
+
+Identifier: multiline_arguments_brackets
+Enabled by default: No
+Supports autocorrection: No
+Kind: style
+Analyzer rule: No
+Minimum Swift compiler version: 5.0.0
+Default configuration: warning
+
+
Non Triggering Examples
+
foo ( param1 : "Param1" , param2 : "Param2" , param3 : "Param3" )
+
+
foo (
+ param1 : "Param1" , param2 : "Param2" , param3 : "Param3"
+)
+
+
func foo (
+ param1 : "Param1" ,
+ param2 : "Param2" ,
+ param3 : "Param3"
+)
+
+
foo { param1 , param2 in
+ print ( "hello world" )
+}
+
+
foo (
+ bar (
+ x : 5 ,
+ y : 7
+ )
+)
+
+
AlertViewModel . AlertAction ( title : "some title" , style : . default ) {
+ AlertManager . shared . presentNextDebugAlert ()
+}
+
+
public final class Logger {
+ public static let shared = Logger ( outputs : [
+ OSLoggerOutput (),
+ ErrorLoggerOutput ()
+ ])
+}
+
+
let errors = try self . download ([
+ ( description : description , priority : priority ),
+])
+
+
return SignalProducer ({ observer , _ in
+ observer . sendCompleted ()
+}) . onMainQueue ()
+
+
SomeType ( a : [
+ 1 , 2 , 3
+], b : [ 1 , 2 ])
+
+
SomeType (
+ a : 1
+) { print ( "completion" ) }
+
+
SomeType (
+ a : 1
+) {
+ print ( "completion" )
+}
+
+
SomeType (
+ a : . init () { print ( "completion" ) }
+)
+
+
SomeType (
+ a : . init () {
+ print ( "completion" )
+ }
+)
+
+
SomeType (
+ a : 1
+) {} onError : {}
+
+
Triggering Examples
+
foo ( ↓ param1 : "Param1" , param2 : "Param2" ,
+ param3 : "Param3"
+)
+
+
foo (
+ param1 : "Param1" ,
+ param2 : "Param2" ,
+ param3 : "Param3" ↓ )
+
+
foo ( ↓ param1 : "Param1" ,
+ param2 : "Param2" ,
+ param3 : "Param3" ↓ )
+
+
foo ( ↓ bar (
+ x : 5 ,
+ y : 7
+)
+)
+
+
foo (
+ bar (
+ x : 5 ,
+ y : 7
+) ↓ )
+
+
SomeOtherType ( ↓ a : [
+ 1 , 2 , 3
+ ],
+ b : "two" ↓ )
+
+
SomeOtherType (
+ a : 1 ↓ ) {}
+
+
SomeOtherType (
+ a : 1 ↓ ) {
+ print ( "completion" )
+}
+
+
+
+
+
+
+
+
+
+
+
diff --git a/multiline_function_chains.html b/multiline_function_chains.html
new file mode 100644
index 000000000..0dec68d4b
--- /dev/null
+++ b/multiline_function_chains.html
@@ -0,0 +1,411 @@
+
+
+
+
multiline_function_chains Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SwiftLintFramework Reference
+
+ multiline_function_chains Reference
+
+
+
+
+
+
+
+
+
+
+
+
Multiline Function Chains
+
+
Chained function calls should be either on the same line, or one per line.
+
+
+Identifier: multiline_function_chains
+Enabled by default: No
+Supports autocorrection: No
+Kind: style
+Analyzer rule: No
+Minimum Swift compiler version: 5.0.0
+Default configuration: warning
+
+
Non Triggering Examples
+
let evenSquaresSum = [ 20 , 17 , 35 , 4 ] . filter { $0 % 2 == 0 } . map { $0 * $0 } . reduce ( 0 , + )
+
+
let evenSquaresSum = [ 20 , 17 , 35 , 4 ]
+ . filter { $0 % 2 == 0 } . map { $0 * $0 } . reduce ( 0 , + ) ",
+
+
let chain = a
+ . b ( 1 , 2 , 3 )
+ . c { blah in
+ print ( blah )
+ }
+ . d ()
+
+
let chain = a . b ( 1 , 2 , 3 )
+ . c { blah in
+ print ( blah )
+ }
+ . d ()
+
+
let chain = a . b ( 1 , 2 , 3 )
+ . c { blah in print ( blah ) }
+ . d ()
+
+
let chain = a . b ( 1 , 2 , 3 )
+ . c ( . init (
+ a : 1 ,
+ b , 2 ,
+ c , 3 ))
+ . d ()
+
+
self . viewModel . outputs . postContextualNotification
+ . observeForUI ()
+ . observeValues {
+ NotificationCenter . default . post (
+ Notification (
+ name : . ksr_showNotificationsDialog ,
+ userInfo : [ UserInfoKeys . context : PushNotificationDialog . Context . pledge ,
+ UserInfoKeys . viewController : self ]
+ )
+ )
+ }
+
+
let remainingIDs = Array ( Set ( self . currentIDs ) . subtracting ( Set ( response . ids )))
+
+
self . happeningNewsletterOn = self . updateCurrentUser
+ . map { $0 . newsletters . happening } . skipNil () . skipRepeats ()
+
+
Triggering Examples
+
let evenSquaresSum = [ 20 , 17 , 35 , 4 ]
+ . filter { $0 % 2 == 0 } ↓ . map { $0 * $0 }
+ . reduce ( 0 , + )
+
+
let evenSquaresSum = a . b ( 1 , 2 , 3 )
+ . c { blah in
+ print ( blah )
+ } ↓ . d ()
+
+
let evenSquaresSum = a . b ( 1 , 2 , 3 )
+ . c ( 2 , 3 , 4 ) ↓ . d ()
+
+
let evenSquaresSum = a . b ( 1 , 2 , 3 ) ↓ . c { blah in
+ print ( blah )
+ }
+ . d ()
+
+
a . b {
+// ““
+} ↓ . e ()
+
+
+
+
+
+
+
+
+
+
+
diff --git a/multiline_literal_brackets.html b/multiline_literal_brackets.html
new file mode 100644
index 000000000..76a6c9f44
--- /dev/null
+++ b/multiline_literal_brackets.html
@@ -0,0 +1,418 @@
+
+
+
+
multiline_literal_brackets Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SwiftLintFramework Reference
+
+ multiline_literal_brackets Reference
+
+
+
+
+
+
+
+
+
+
+
+
Multiline Literal Brackets
+
+
Multiline literals should have their surrounding brackets in a new line.
+
+
+Identifier: multiline_literal_brackets
+Enabled by default: No
+Supports autocorrection: No
+Kind: style
+Analyzer rule: No
+Minimum Swift compiler version: 5.0.0
+Default configuration: warning
+
+
Non Triggering Examples
+
let trio = [ "harry" , "ronald" , "hermione" ]
+let houseCup = [ "gryffindor" : 460 , "hufflepuff" : 370 , "ravenclaw" : 410 , "slytherin" : 450 ]
+
+
let trio = [
+ "harry" ,
+ "ronald" ,
+ "hermione"
+]
+let houseCup = [
+ "gryffindor" : 460 ,
+ "hufflepuff" : 370 ,
+ "ravenclaw" : 410 ,
+ "slytherin" : 450
+]
+
+
let trio = [
+ "harry" , "ronald" , "hermione"
+]
+let houseCup = [
+ "gryffindor" : 460 , "hufflepuff" : 370 ,
+ "ravenclaw" : 410 , "slytherin" : 450
+]
+
+
_ = [
+ 1 ,
+ 2 ,
+ 3 ,
+ 4 ,
+ 5 , 6 ,
+ 7 , 8 , 9
+ ]
+
+
Triggering Examples
+
let trio = [ ↓ "harry" ,
+ "ronald" ,
+ "hermione"
+]
+
+
let houseCup = [ ↓ "gryffindor" : 460 , "hufflepuff" : 370 ,
+ "ravenclaw" : 410 , "slytherin" : 450
+]
+
+
let houseCup = [ ↓ "gryffindor" : 460 ,
+ "hufflepuff" : 370 ,
+ "ravenclaw" : 410 ,
+ "slytherin" : 450 ↓ ]
+
+
let trio = [
+ "harry" ,
+ "ronald" ,
+ "hermione" ↓ ]
+
+
let houseCup = [
+ "gryffindor" : 460 , "hufflepuff" : 370 ,
+ "ravenclaw" : 410 , "slytherin" : 450 ↓ ]
+
+
class Hogwarts {
+ let houseCup = [
+ "gryffindor" : 460 , "hufflepuff" : 370 ,
+ "ravenclaw" : 410 , "slytherin" : 450 ↓ ]
+}
+
+
_ = [
+ 1 ,
+ 2 ,
+ 3 ,
+ 4 ,
+ 5 , 6 ,
+ 7 , 8 , 9 ↓ ]
+
+
_ = [ ↓ 1 , 2 , 3 ,
+ 4 , 5 , 6 ,
+ 7 , 8 , 9
+ ]
+
+
+
+
+
+
+
+
+
+
+
diff --git a/multiline_parameters.html b/multiline_parameters.html
new file mode 100644
index 000000000..4fe2d1e02
--- /dev/null
+++ b/multiline_parameters.html
@@ -0,0 +1,702 @@
+
+
+
+
multiline_parameters Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SwiftLintFramework Reference
+
+ multiline_parameters Reference
+
+
+
+
+
+
+
+
+
+
+
+
Multiline Parameters
+
+
Functions and methods parameters should be either on the same line, or one per line.
+
+
+Identifier: multiline_parameters
+Enabled by default: No
+Supports autocorrection: No
+Kind: style
+Analyzer rule: No
+Minimum Swift compiler version: 5.0.0
+Default configuration: warning, allowsSingleLine: true
+
+
Non Triggering Examples
+
func foo () { }
+
+
func foo ( param1 : Int ) { }
+
+
func foo ( param1 : Int , param2 : Bool ) { }
+
+
func foo ( param1 : Int , param2 : Bool , param3 : [ String ]) { }
+
+
func foo ( param1 : Int ,
+ param2 : Bool ,
+ param3 : [ String ]) { }
+
+
func foo ( _ param1 : Int , param2 : Int , param3 : Int ) -> ( Int ) -> Int {
+ return { x in x + param1 + param2 + param3 }
+}
+
+
static func foo () { }
+
+
static func foo ( param1 : Int ) { }
+
+
static func foo ( param1 : Int , param2 : Bool ) { }
+
+
static func foo ( param1 : Int , param2 : Bool , param3 : [ String ]) { }
+
+
static func foo ( param1 : Int ,
+ param2 : Bool ,
+ param3 : [ String ]) { }
+
+
protocol Foo {
+ func foo () { }
+}
+
+
protocol Foo {
+ func foo ( param1 : Int ) { }
+}
+
+
protocol Foo {
+ func foo ( param1 : Int , param2 : Bool ) { }
+}
+
+
protocol Foo {
+ func foo ( param1 : Int , param2 : Bool , param3 : [ String ]) { }
+}
+
+
protocol Foo {
+ func foo ( param1 : Int ,
+ param2 : Bool ,
+ param3 : [ String ]) { }
+}
+
+
protocol Foo {
+ static func foo ( param1 : Int , param2 : Bool , param3 : [ String ]) { }
+}
+
+
protocol Foo {
+ static func foo ( param1 : Int ,
+ param2 : Bool ,
+ param3 : [ String ]) { }
+}
+
+
protocol Foo {
+ class func foo ( param1 : Int , param2 : Bool , param3 : [ String ]) { }
+}
+
+
protocol Foo {
+ class func foo ( param1 : Int ,
+ param2 : Bool ,
+ param3 : [ String ]) { }
+}
+
+
enum Foo {
+ func foo () { }
+}
+
+
enum Foo {
+ func foo ( param1 : Int ) { }
+}
+
+
enum Foo {
+ func foo ( param1 : Int , param2 : Bool ) { }
+}
+
+
enum Foo {
+ func foo ( param1 : Int , param2 : Bool , param3 : [ String ]) { }
+}
+
+
enum Foo {
+ func foo ( param1 : Int ,
+ param2 : Bool ,
+ param3 : [ String ]) { }
+}
+
+
enum Foo {
+ static func foo ( param1 : Int , param2 : Bool , param3 : [ String ]) { }
+}
+
+
enum Foo {
+ static func foo ( param1 : Int ,
+ param2 : Bool ,
+ param3 : [ String ]) { }
+}
+
+
struct Foo {
+ func foo () { }
+}
+
+
struct Foo {
+ func foo ( param1 : Int ) { }
+}
+
+
struct Foo {
+ func foo ( param1 : Int , param2 : Bool ) { }
+}
+
+
struct Foo {
+ func foo ( param1 : Int , param2 : Bool , param3 : [ String ]) { }
+}
+
+
struct Foo {
+ func foo ( param1 : Int ,
+ param2 : Bool ,
+ param3 : [ String ]) { }
+}
+
+
struct Foo {
+ static func foo ( param1 : Int , param2 : Bool , param3 : [ String ]) { }
+}
+
+
struct Foo {
+ static func foo ( param1 : Int ,
+ param2 : Bool ,
+ param3 : [ String ]) { }
+}
+
+
class Foo {
+ func foo () { }
+}
+
+
class Foo {
+ func foo ( param1 : Int ) { }
+}
+
+
class Foo {
+ func foo ( param1 : Int , param2 : Bool ) { }
+}
+
+
class Foo {
+ func foo ( param1 : Int , param2 : Bool , param3 : [ String ]) { }
+ }
+
+
class Foo {
+ func foo ( param1 : Int ,
+ param2 : Bool ,
+ param3 : [ String ]) { }
+}
+
+
class Foo {
+ class func foo ( param1 : Int , param2 : Bool , param3 : [ String ]) { }
+}
+
+
class Foo {
+ class func foo ( param1 : Int ,
+ param2 : Bool ,
+ param3 : [ String ]) { }
+}
+
+
class Foo {
+ class func foo ( param1 : Int ,
+ param2 : Bool ,
+ param3 : @escaping ( Int , Int ) -> Void = { _ , _ in }) { }
+}
+
+
class Foo {
+ class func foo ( param1 : Int ,
+ param2 : Bool ,
+ param3 : @escaping ( Int ) -> Void = { _ in }) { }
+}
+
+
class Foo {
+ class func foo ( param1 : Int ,
+ param2 : Bool ,
+ param3 : @escaping (( Int ) -> Void )? = nil ) { }
+}
+
+
class Foo {
+ class func foo ( param1 : Int ,
+ param2 : Bool ,
+ param3 : @escaping (( Int ) -> Void )? = { _ in }) { }
+}
+
+
class Foo {
+ class func foo ( param1 : Int ,
+ param2 : @escaping (( Int ) -> Void )? = { _ in },
+ param3 : Bool ) { }
+}
+
+
class Foo {
+ class func foo ( param1 : Int ,
+ param2 : @escaping (( Int ) -> Void )? = { _ in },
+ param3 : @escaping ( Int , Int ) -> Void = { _ , _ in }) { }
+}
+
+
class Foo {
+ class func foo ( param1 : Int ,
+ param2 : Bool ,
+ param3 : @escaping ( Int ) -> Void = { ( x : Int ) in }) { }
+}
+
+
class Foo {
+ class func foo ( param1 : Int ,
+ param2 : Bool ,
+ param3 : @escaping ( Int , ( Int ) -> Void ) -> Void = { ( x : Int , f : ( Int ) -> Void ) in }) { }
+}
+
+
class Foo {
+ init ( param1 : Int ,
+ param2 : Bool ,
+ param3 : @escaping (( Int ) -> Void )? = { _ in }) { }
+}
+
+
func foo () { }
+
+
func foo ( param1 : Int ) { }
+
+
protocol Foo {
+ func foo ( param1 : Int ,
+ param2 : Bool ,
+ param3 : [ String ]) { }
+}
+
+
protocol Foo {
+ func foo (
+ param1 : Int
+ ) { }
+}
+
+
protocol Foo {
+ func foo (
+ param1 : Int ,
+ param2 : Bool ,
+ param3 : [ String ]
+ ) { }
+}
+
+
Triggering Examples
+
func ↓ foo ( _ param1 : Int ,
+ param2 : Int , param3 : Int ) -> ( Int ) -> Int {
+ return { x in x + param1 + param2 + param3 }
+}
+
+
protocol Foo {
+ func ↓ foo ( param1 : Int ,
+ param2 : Bool , param3 : [ String ]) { }
+}
+
+
protocol Foo {
+ func ↓ foo ( param1 : Int , param2 : Bool ,
+ param3 : [ String ]) { }
+}
+
+
protocol Foo {
+ static func ↓ foo ( param1 : Int ,
+ param2 : Bool , param3 : [ String ]) { }
+}
+
+
protocol Foo {
+ static func ↓ foo ( param1 : Int , param2 : Bool ,
+ param3 : [ String ]) { }
+}
+
+
protocol Foo {
+ class func ↓ foo ( param1 : Int ,
+ param2 : Bool , param3 : [ String ]) { }
+}
+
+
protocol Foo {
+ class func ↓ foo ( param1 : Int , param2 : Bool ,
+ param3 : [ String ]) { }
+}
+
+
enum Foo {
+ func ↓ foo ( param1 : Int ,
+ param2 : Bool , param3 : [ String ]) { }
+}
+
+
enum Foo {
+ func ↓ foo ( param1 : Int , param2 : Bool ,
+ param3 : [ String ]) { }
+}
+
+
enum Foo {
+ static func ↓ foo ( param1 : Int ,
+ param2 : Bool , param3 : [ String ]) { }
+}
+
+
enum Foo {
+ static func ↓ foo ( param1 : Int , param2 : Bool ,
+ param3 : [ String ]) { }
+}
+
+
struct Foo {
+ func ↓ foo ( param1 : Int ,
+ param2 : Bool , param3 : [ String ]) { }
+}
+
+
struct Foo {
+ func ↓ foo ( param1 : Int , param2 : Bool ,
+ param3 : [ String ]) { }
+}
+
+
struct Foo {
+ static func ↓ foo ( param1 : Int ,
+ param2 : Bool , param3 : [ String ]) { }
+}
+
+
struct Foo {
+ static func ↓ foo ( param1 : Int , param2 : Bool ,
+ param3 : [ String ]) { }
+}
+
+
class Foo {
+ func ↓ foo ( param1 : Int ,
+ param2 : Bool , param3 : [ String ]) { }
+}
+
+
class Foo {
+ func ↓ foo ( param1 : Int , param2 : Bool ,
+ param3 : [ String ]) { }
+}
+
+
class Foo {
+ class func ↓ foo ( param1 : Int ,
+ param2 : Bool , param3 : [ String ]) { }
+}
+
+
class Foo {
+ class func ↓ foo ( param1 : Int , param2 : Bool ,
+ param3 : [ String ]) { }
+}
+
+
class Foo {
+ class func ↓ foo ( param1 : Int ,
+ param2 : Bool , param3 : @escaping ( Int , Int ) -> Void = { _ , _ in }) { }
+}
+
+
class Foo {
+ class func ↓ foo ( param1 : Int ,
+ param2 : Bool , param3 : @escaping ( Int ) -> Void = { ( x : Int ) in }) { }
+}
+
+
class Foo {
+ ↓ init ( param1 : Int , param2 : Bool ,
+ param3 : @escaping (( Int ) -> Void )? = { _ in }) { }
+}
+
+
func ↓ foo ( param1 : Int , param2 : Bool ) { }
+
+
func ↓ foo ( param1 : Int , param2 : Bool , param3 : [ String ]) { }
+
+
+
+
+
+
+
+
+
+
+
diff --git a/multiline_parameters_brackets.html b/multiline_parameters_brackets.html
new file mode 100644
index 000000000..a57dfcfec
--- /dev/null
+++ b/multiline_parameters_brackets.html
@@ -0,0 +1,406 @@
+
+
+
+
multiline_parameters_brackets Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SwiftLintFramework Reference
+
+ multiline_parameters_brackets Reference
+
+
+
+
+
+
+
+
+
+
+
+
Multiline Parameters Brackets
+
+
Multiline parameters should have their surrounding brackets in a new line.
+
+
+Identifier: multiline_parameters_brackets
+Enabled by default: No
+Supports autocorrection: No
+Kind: style
+Analyzer rule: No
+Minimum Swift compiler version: 5.0.0
+Default configuration: warning
+
+
Non Triggering Examples
+
func foo ( param1 : String , param2 : String , param3 : String )
+
+
func foo (
+ param1 : String , param2 : String , param3 : String
+)
+
+
func foo (
+ param1 : String ,
+ param2 : String ,
+ param3 : String
+)
+
+
class SomeType {
+ func foo ( param1 : String , param2 : String , param3 : String )
+}
+
+
class SomeType {
+ func foo (
+ param1 : String , param2 : String , param3 : String
+ )
+}
+
+
class SomeType {
+ func foo (
+ param1 : String ,
+ param2 : String ,
+ param3 : String
+ )
+}
+
+
func foo < T > ( param1 : T , param2 : String , param3 : String ) -> T { /* some code */ }
+
+
func foo ( a : [ Int ] = [
+ 1
+ ])
+
+
Triggering Examples
+
func foo ( ↓ param1 : String , param2 : String ,
+ param3 : String
+)
+
+
func foo (
+ param1 : String ,
+ param2 : String ,
+ param3 : String ↓ )
+
+
class SomeType {
+ func foo ( ↓ param1 : String , param2 : String ,
+ param3 : String
+ )
+}
+
+
class SomeType {
+ func foo (
+ param1 : String ,
+ param2 : String ,
+ param3 : String ↓ )
+}
+
+
func foo < T > ( ↓ param1 : T , param2 : String ,
+ param3 : String
+) -> T
+
+
+
+
+
+
+
+
+
+
+
diff --git a/multiple_closures_with_trailing_closure.html b/multiple_closures_with_trailing_closure.html
new file mode 100644
index 000000000..2a4006682
--- /dev/null
+++ b/multiple_closures_with_trailing_closure.html
@@ -0,0 +1,378 @@
+
+
+
+
multiple_closures_with_trailing_closure Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SwiftLintFramework Reference
+
+ multiple_closures_with_trailing_closure Reference
+
+
+
+
+
+
+
+
+
+
+
+
Multiple Closures with Trailing Closure
+
+
Trailing closure syntax should not be used when passing more than one closure argument.
+
+
+Identifier: multiple_closures_with_trailing_closure
+Enabled by default: Yes
+Supports autocorrection: No
+Kind: style
+Analyzer rule: No
+Minimum Swift compiler version: 5.0.0
+Default configuration: warning
+
+
Non Triggering Examples
+
foo . map { $0 + 1 }
+
+
+
foo . reduce ( 0 ) { $0 + $1 }
+
+
+
if let foo = bar . map ({ $0 + 1 }) {
+
+}
+
+
+
foo . something ( param1 : { $0 }, param2 : { $0 + 1 })
+
+
+
UIView . animate ( withDuration : 1.0 ) {
+ someView . alpha = 0.0
+}
+
+
foo . method { print ( 0 ) } arg2 : { print ( 1 ) }
+
+
foo . methodWithParenArgs (( 0 , 1 ), arg2 : ( 0 , 1 , 2 )) { $0 } arg4 : { $0 }
+
+
Triggering Examples
+
foo . something ( param1 : { $0 }) ↓ { $0 + 1 }
+
+
UIView . animate ( withDuration : 1.0 , animations : {
+ someView . alpha = 0.0
+}) ↓ { _ in
+ someView . removeFromSuperview ()
+}
+
+
foo . multipleTrailing ( arg1 : { $0 }) { $0 } arg3 : { $0 }
+
+
foo . methodWithParenArgs ( param1 : { $0 }, param2 : ( 0 , 1 ), ( 0 , 1 )) { $0 }
+
+
+
+
+
+
+
+
+
+
+
diff --git a/nesting.html b/nesting.html
new file mode 100644
index 000000000..848645a68
--- /dev/null
+++ b/nesting.html
@@ -0,0 +1,1033 @@
+
+
+
+
nesting Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SwiftLintFramework Reference
+
+ nesting Reference
+
+
+
+
+
+
+
+
+
+
+
+
Nesting
+
+
Types should be nested at most 1 level deep, and functions should be nested at most 2 levels deep.
+
+
+Identifier: nesting
+Enabled by default: Yes
+Supports autocorrection: No
+Kind: metrics
+Analyzer rule: No
+Minimum Swift compiler version: 5.0.0
+Default configuration: (type_level) w: 1, (function_level) w: 2, (check_nesting_in_closures_and_statements) true, (always_allow_one_type_in_functions) false
+
+
Non Triggering Examples
+
class Example_0 {
+ class Example_1 {}
+ }
+
+
var example : Int {
+ class Example_0 {
+ class Example_1 {}
+ }
+ return 5
+ }
+
+
var example : Int = 5 {
+ didSet {
+ class Example_0 {
+ class Example_1 {}
+ }
+ }
+ }
+
+
extension Example_0 {
+ class Example_1 {}
+ }
+
+
struct Example_0 {
+ struct Example_1 {}
+ }
+
+
var example : Int {
+ struct Example_0 {
+ struct Example_1 {}
+ }
+ return 5
+ }
+
+
var example : Int = 5 {
+ didSet {
+ struct Example_0 {
+ struct Example_1 {}
+ }
+ }
+ }
+
+
extension Example_0 {
+ struct Example_1 {}
+ }
+
+
enum Example_0 {
+ enum Example_1 {}
+ }
+
+
var example : Int {
+ enum Example_0 {
+ enum Example_1 {}
+ }
+ return 5
+ }
+
+
var example : Int = 5 {
+ didSet {
+ enum Example_0 {
+ enum Example_1 {}
+ }
+ }
+ }
+
+
extension Example_0 {
+ enum Example_1 {}
+ }
+
+
func f_0 () {
+ func f_1 () {
+ func f_2 () {}
+ }
+ }
+
+
var example : Int {
+ func f_0 () {
+ func f_1 () {
+ func f_2 () {}
+ }
+ }
+ return 5
+ }
+
+
var example : Int = 5 {
+ didSet {
+ func f_0 () {
+ func f_1 () {
+ func f_2 () {}
+ }
+ }
+ }
+ }
+
+
extension Example_0 {
+ func f_0 () {
+ func f_1 () {
+ func f_2 () {}
+ }
+ }
+ }
+
+
switch example {
+ case . exampleCase :
+ class Example_0 {
+ class Example_1 {}
+ }
+ default :
+ func f_0 () {
+ func f_1 () {
+ func f_2 () {}
+ }
+ }
+ }
+
+
var exampleClosure : () -> Void = {
+ class Example_0 {
+ class Example_1 {}
+ }
+ func f_0 () {
+ func f_1 () {
+ func f_2 () {}
+ }
+ }
+ }
+
+
exampleFunc ( closure : {
+ class Example_0 {
+ class Example_1 {}
+ }
+ func f_0 () {
+ func f_1 () {
+ func f_2 () {}
+ }
+ }
+ })
+
+
switch example {
+ case . exampleCase :
+ struct Example_0 {
+ struct Example_1 {}
+ }
+ default :
+ func f_0 () {
+ func f_1 () {
+ func f_2 () {}
+ }
+ }
+ }
+
+
var exampleClosure : () -> Void = {
+ struct Example_0 {
+ struct Example_1 {}
+ }
+ func f_0 () {
+ func f_1 () {
+ func f_2 () {}
+ }
+ }
+ }
+
+
exampleFunc ( closure : {
+ struct Example_0 {
+ struct Example_1 {}
+ }
+ func f_0 () {
+ func f_1 () {
+ func f_2 () {}
+ }
+ }
+ })
+
+
switch example {
+ case . exampleCase :
+ enum Example_0 {
+ enum Example_1 {}
+ }
+ default :
+ func f_0 () {
+ func f_1 () {
+ func f_2 () {}
+ }
+ }
+ }
+
+
var exampleClosure : () -> Void = {
+ enum Example_0 {
+ enum Example_1 {}
+ }
+ func f_0 () {
+ func f_1 () {
+ func f_2 () {}
+ }
+ }
+ }
+
+
exampleFunc ( closure : {
+ enum Example_0 {
+ enum Example_1 {}
+ }
+ func f_0 () {
+ func f_1 () {
+ func f_2 () {}
+ }
+ }
+ })
+
+
class Example_0 {
+ func f_0 () {
+ class Example_1 {
+ func f_1 () {
+ func f_2 () {}
+ }
+ }
+ }
+ }
+
+
class Example_0 {
+ func f_0 () {
+ switch example {
+ case . exampleCase :
+ class Example_1 {
+ func f_1 () {
+ func f_2 () {}
+ }
+ }
+ default :
+ exampleFunc ( closure : {
+ class Example_1 {
+ func f_1 () {
+ func f_2 () {}
+ }
+ }
+ })
+ }
+ }
+ }
+
+
struct Example_0 {
+ func f_0 () {
+ struct Example_1 {
+ func f_1 () {
+ func f_2 () {}
+ }
+ }
+ }
+ }
+
+
struct Example_0 {
+ func f_0 () {
+ switch example {
+ case . exampleCase :
+ struct Example_1 {
+ func f_1 () {
+ func f_2 () {}
+ }
+ }
+ default :
+ exampleFunc ( closure : {
+ struct Example_1 {
+ func f_1 () {
+ func f_2 () {}
+ }
+ }
+ })
+ }
+ }
+ }
+
+
enum Example_0 {
+ func f_0 () {
+ enum Example_1 {
+ func f_1 () {
+ func f_2 () {}
+ }
+ }
+ }
+ }
+
+
enum Example_0 {
+ func f_0 () {
+ switch example {
+ case . exampleCase :
+ enum Example_1 {
+ func f_1 () {
+ func f_2 () {}
+ }
+ }
+ default :
+ exampleFunc ( closure : {
+ enum Example_1 {
+ func f_1 () {
+ func f_2 () {}
+ }
+ }
+ })
+ }
+ }
+ }
+
+
Triggering Examples
+
class Example_0 {
+ class Example_1 {
+ ↓ class Example_2 {}
+ }
+ }
+
+
var example : Int {
+ class Example_0 {
+ class Example_1 {
+ ↓ class Example_2 {}
+ }
+ }
+ return 5
+ }
+
+
var example : Int = 5 {
+ didSet {
+ class Example_0 {
+ class Example_1 {
+ ↓ class Example_2 {}
+ }
+ }
+ }
+ }
+
+
extension Example_0 {
+ class Example_1 {
+ ↓ class Example_2 {}
+ }
+ }
+
+
struct Example_0 {
+ struct Example_1 {
+ ↓ struct Example_2 {}
+ }
+ }
+
+
var example : Int {
+ struct Example_0 {
+ struct Example_1 {
+ ↓ struct Example_2 {}
+ }
+ }
+ return 5
+ }
+
+
var example : Int = 5 {
+ didSet {
+ struct Example_0 {
+ struct Example_1 {
+ ↓ struct Example_2 {}
+ }
+ }
+ }
+ }
+
+
extension Example_0 {
+ struct Example_1 {
+ ↓ struct Example_2 {}
+ }
+ }
+
+
enum Example_0 {
+ enum Example_1 {
+ ↓ enum Example_2 {}
+ }
+ }
+
+
var example : Int {
+ enum Example_0 {
+ enum Example_1 {
+ ↓ enum Example_2 {}
+ }
+ }
+ return 5
+ }
+
+
var example : Int = 5 {
+ didSet {
+ enum Example_0 {
+ enum Example_1 {
+ ↓ enum Example_2 {}
+ }
+ }
+ }
+ }
+
+
extension Example_0 {
+ enum Example_1 {
+ ↓ enum Example_2 {}
+ }
+ }
+
+
func f_0 () {
+ func f_1 () {
+ func f_2 () {
+ ↓ func f_3 () {}
+ }
+ }
+ }
+
+
var example : Int {
+ func f_0 () {
+ func f_1 () {
+ func f_2 () {
+ ↓ func f_3 () {}
+ }
+ }
+ }
+ return 5
+ }
+
+
var example : Int = 5 {
+ didSet {
+ func f_0 () {
+ func f_1 () {
+ func f_2 () {
+ ↓ func f_3 () {}
+ }
+ }
+ }
+ }
+ }
+
+
extension Example_0 {
+ func f_0 () {
+ func f_1 () {
+ func f_2 () {
+ ↓ func f_3 () {}
+ }
+ }
+ }
+ }
+
+
switch example {
+ case . exampleCase :
+ class Example_0 {
+ class Example_1 {
+ ↓ class Example_2 {}
+ }
+ }
+ default :
+ func f_0 () {
+ func f_1 () {
+ func f_2 () {
+ ↓ func f_3 () {}
+ }
+ }
+ }
+ }
+
+
var exampleClosure : () -> Void = {
+ class Example_0 {
+ class Example_1 {
+ ↓ class Example_2 {}
+ }
+ }
+ func f_0 () {
+ func f_1 () {
+ func f_2 () {
+ ↓ func f_3 () {}
+ }
+ }
+ }
+ }
+
+
exampleFunc ( closure : {
+ class Example_0 {
+ class Example_1 {}
+ }
+ func f_0 () {
+ func f_1 () {
+ func f_2 () {
+ ↓ func f_3 () {}
+ }
+ }
+ }
+ })
+
+
switch example {
+ case . exampleCase :
+ struct Example_0 {
+ struct Example_1 {
+ ↓ struct Example_2 {}
+ }
+ }
+ default :
+ func f_0 () {
+ func f_1 () {
+ func f_2 () {
+ ↓ func f_3 () {}
+ }
+ }
+ }
+ }
+
+
var exampleClosure : () -> Void = {
+ struct Example_0 {
+ struct Example_1 {
+ ↓ struct Example_2 {}
+ }
+ }
+ func f_0 () {
+ func f_1 () {
+ func f_2 () {
+ ↓ func f_3 () {}
+ }
+ }
+ }
+ }
+
+
exampleFunc ( closure : {
+ struct Example_0 {
+ struct Example_1 {}
+ }
+ func f_0 () {
+ func f_1 () {
+ func f_2 () {
+ ↓ func f_3 () {}
+ }
+ }
+ }
+ })
+
+
switch example {
+ case . exampleCase :
+ enum Example_0 {
+ enum Example_1 {
+ ↓ enum Example_2 {}
+ }
+ }
+ default :
+ func f_0 () {
+ func f_1 () {
+ func f_2 () {
+ ↓ func f_3 () {}
+ }
+ }
+ }
+ }
+
+
var exampleClosure : () -> Void = {
+ enum Example_0 {
+ enum Example_1 {
+ ↓ enum Example_2 {}
+ }
+ }
+ func f_0 () {
+ func f_1 () {
+ func f_2 () {
+ ↓ func f_3 () {}
+ }
+ }
+ }
+ }
+
+
exampleFunc ( closure : {
+ enum Example_0 {
+ enum Example_1 {}
+ }
+ func f_0 () {
+ func f_1 () {
+ func f_2 () {
+ ↓ func f_3 () {}
+ }
+ }
+ }
+ })
+
+
class Example_0 {
+ func f_0 () {
+ class Example_1 {
+ func f_1 () {
+ func f_2 () {
+ ↓ class Example_2 {}
+ ↓ func f_3 () {}
+ }
+ }
+ }
+ }
+ }
+
+
class Example_0 {
+ func f_0 () {
+ switch example {
+ case . exampleCase :
+ class Example_1 {
+ func f_1 () {
+ func f_2 () {
+ ↓ class Example_2 {}
+ ↓ func f_3 () {}
+ }
+ }
+ }
+ default :
+ exampleFunc ( closure : {
+ class Example_1 {
+ func f_1 () {
+ func f_2 () {
+ ↓ class Example_2 {}
+ ↓ func f_3 () {}
+ }
+ }
+ }
+ })
+ }
+ }
+ }
+
+
struct Example_0 {
+ func f_0 () {
+ struct Example_1 {
+ func f_1 () {
+ func f_2 () {
+ ↓ struct Example_2 {}
+ ↓ func f_3 () {}
+ }
+ }
+ }
+ }
+ }
+
+
struct Example_0 {
+ func f_0 () {
+ switch example {
+ case . exampleCase :
+ struct Example_1 {
+ func f_1 () {
+ func f_2 () {
+ ↓ struct Example_2 {}
+ ↓ func f_3 () {}
+ }
+ }
+ }
+ default :
+ exampleFunc ( closure : {
+ struct Example_1 {
+ func f_1 () {
+ func f_2 () {
+ ↓ struct Example_2 {}
+ ↓ func f_3 () {}
+ }
+ }
+ }
+ })
+ }
+ }
+ }
+
+
enum Example_0 {
+ func f_0 () {
+ enum Example_1 {
+ func f_1 () {
+ func f_2 () {
+ ↓ enum Example_2 {}
+ ↓ func f_3 () {}
+ }
+ }
+ }
+ }
+ }
+
+
enum Example_0 {
+ func f_0 () {
+ switch example {
+ case . exampleCase :
+ enum Example_1 {
+ func f_1 () {
+ func f_2 () {
+ ↓ enum Example_2 {}
+ ↓ func f_3 () {}
+ }
+ }
+ }
+ default :
+ exampleFunc ( closure : {
+ enum Example_1 {
+ func f_1 () {
+ func f_2 () {
+ ↓ enum Example_2 {}
+ ↓ func f_3 () {}
+ }
+ }
+ }
+ })
+ }
+ }
+ }
+
+
+
+
+
+
+
+
+
+
+
diff --git a/nimble_operator.html b/nimble_operator.html
new file mode 100644
index 000000000..f633ad07a
--- /dev/null
+++ b/nimble_operator.html
@@ -0,0 +1,426 @@
+
+
+
+
nimble_operator Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SwiftLintFramework Reference
+
+ nimble_operator Reference
+
+
+
+
+
+
+
+
+
+
+
+
Nimble Operator
+
+
Prefer Nimble operator overloads over free matcher functions.
+
+
+Identifier: nimble_operator
+Enabled by default: No
+Supports autocorrection: Yes
+Kind: idiomatic
+Analyzer rule: No
+Minimum Swift compiler version: 5.0.0
+Default configuration: warning
+
+
Non Triggering Examples
+
expect ( seagull . squawk ) != "Hi!"
+
+
+
expect ( "Hi!" ) == "Hi!"
+
+
+
expect ( 10 ) > 2
+
+
+
expect ( 10 ) >= 10
+
+
+
expect ( 10 ) < 11
+
+
+
expect ( 10 ) <= 10
+
+
+
expect ( x ) === x
+
+
expect ( 10 ) == 10
+
+
expect ( success ) == true
+
+
expect ( value ) == nil
+
+
expect ( value ) != nil
+
+
expect ( object . asyncFunction ()) . toEventually ( equal ( 1 ))
+
+
+
expect ( actual ) . to ( haveCount ( expected ))
+
+
+
foo . method {
+ expect ( value ) . to ( equal ( expectedValue ), description : "Failed" )
+ return Bar ( value : ())
+}
+
+
Triggering Examples
+
↓ expect ( seagull . squawk ) . toNot ( equal ( "Hi" ))
+
+
+
↓ expect ( 12 ) . toNot ( equal ( 10 ))
+
+
+
↓ expect ( 10 ) . to ( equal ( 10 ))
+
+
+
↓ expect ( 10 , line : 1 ) . to ( equal ( 10 ))
+
+
+
↓ expect ( 10 ) . to ( beGreaterThan ( 8 ))
+
+
+
↓ expect ( 10 ) . to ( beGreaterThanOrEqualTo ( 10 ))
+
+
+
↓ expect ( 10 ) . to ( beLessThan ( 11 ))
+
+
+
↓ expect ( 10 ) . to ( beLessThanOrEqualTo ( 10 ))
+
+
+
↓ expect ( x ) . to ( beIdenticalTo ( x ))
+
+
+
↓ expect ( success ) . to ( beTrue ())
+
+
+
↓ expect ( success ) . to ( beFalse ())
+
+
+
↓ expect ( value ) . to ( beNil ())
+
+
+
↓ expect ( value ) . toNot ( beNil ())
+
+
+
expect ( 10 ) > 2
+ ↓ expect ( 10 ) . to ( beGreaterThan ( 2 ))
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/no_extension_access_modifier.html b/no_extension_access_modifier.html
new file mode 100644
index 000000000..80b6a2791
--- /dev/null
+++ b/no_extension_access_modifier.html
@@ -0,0 +1,361 @@
+
+
+
+
no_extension_access_modifier Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SwiftLintFramework Reference
+
+ no_extension_access_modifier Reference
+
+
+
+
+
+
+
+
+
+
+
+
No Extension Access Modifier
+
+
Prefer not to use extension access modifiers
+
+
+Identifier: no_extension_access_modifier
+Enabled by default: No
+Supports autocorrection: No
+Kind: idiomatic
+Analyzer rule: No
+Minimum Swift compiler version: 5.0.0
+Default configuration: error
+
+
Non Triggering Examples
+
extension String {}
+
+
+
+ extension String {}
+
+
Triggering Examples
+
↓ private extension String {}
+
+
↓ public
+ extension String {}
+
+
↓ open extension String {}
+
+
↓ internal extension String {}
+
+
↓ fileprivate extension String {}
+
+
+
+
+
+
+
+
+
+
+
diff --git a/no_fallthrough_only.html b/no_fallthrough_only.html
new file mode 100644
index 000000000..69a96de21
--- /dev/null
+++ b/no_fallthrough_only.html
@@ -0,0 +1,480 @@
+
+
+
+
no_fallthrough_only Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SwiftLintFramework Reference
+
+ no_fallthrough_only Reference
+
+
+
+
+
+
+
+
+
+
+
+
No Fallthrough Only
+
+
Fallthroughs can only be used if the case contains at least one other statement.
+
+
+Identifier: no_fallthrough_only
+Enabled by default: Yes
+Supports autocorrection: No
+Kind: idiomatic
+Analyzer rule: No
+Minimum Swift compiler version: 5.0.0
+Default configuration: warning
+
+
Non Triggering Examples
+
switch myvar {
+case 1 :
+ var a = 1
+ fallthrough
+case 2 :
+ var a = 2
+}
+
+
switch myvar {
+case "a" :
+ var one = 1
+ var two = 2
+ fallthrough
+case "b" : /* comment */
+ var three = 3
+}
+
+
switch myvar {
+case 1 :
+ let one = 1
+case 2 :
+ // comment
+ var two = 2
+}
+
+
switch myvar {
+case MyFunc ( x : [ 1 , 2 , YourFunc ( a : 23 )], y : 2 ):
+ var three = 3
+ fallthrough
+default :
+ var three = 4
+}
+
+
switch myvar {
+case . alpha :
+ var one = 1
+case . beta :
+ var three = 3
+ fallthrough
+default :
+ var four = 4
+}
+
+
let aPoint = ( 1 , - 1 )
+switch aPoint {
+case let ( x , y ) where x == y :
+ let A = "A"
+case let ( x , y ) where x == - y :
+ let B = "B"
+ fallthrough
+default :
+ let C = "C"
+}
+
+
switch myvar {
+case MyFun ( with : { $1 }):
+ let one = 1
+ fallthrough
+case "abc" :
+ let two = 2
+}
+
+
switch enumInstance {
+case . caseA :
+ print ( "it's a" )
+case . caseB :
+ fallthrough
+@unknown default :
+ print ( "it's not a" )
+}
+
+
Triggering Examples
+
switch myvar {
+case 1 :
+ ↓ fallthrough
+case 2 :
+ var a = 1
+}
+
+
switch myvar {
+case 1 :
+ var a = 2
+case 2 :
+ ↓ fallthrough
+case 3 :
+ var a = 3
+}
+
+
switch myvar {
+case 1 : // comment
+ ↓ fallthrough
+}
+
+
switch myvar {
+case 1 : /* multi
+ line
+ comment */
+ ↓ fallthrough
+case 2 :
+ var a = 2
+}
+
+
switch myvar {
+case MyFunc ( x : [ 1 , 2 , YourFunc ( a : 23 )], y : 2 ):
+ ↓ fallthrough
+default :
+ var three = 4
+}
+
+
switch myvar {
+case . alpha :
+ var one = 1
+case . beta :
+ ↓ fallthrough
+case . gamma :
+ var three = 3
+default :
+ var four = 4
+}
+
+
let aPoint = ( 1 , - 1 )
+switch aPoint {
+case let ( x , y ) where x == y :
+ let A = "A"
+case let ( x , y ) where x == - y :
+ ↓ fallthrough
+default :
+ let B = "B"
+}
+
+
switch myvar {
+case MyFun ( with : { $1 }):
+ ↓ fallthrough
+case "abc" :
+ let two = 2
+}
+
+
+
+
+
+
+
+
+
+
+
diff --git a/no_grouping_extension.html b/no_grouping_extension.html
new file mode 100644
index 000000000..aa009ed27
--- /dev/null
+++ b/no_grouping_extension.html
@@ -0,0 +1,372 @@
+
+
+
+
no_grouping_extension Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SwiftLintFramework Reference
+
+ no_grouping_extension Reference
+
+
+
+
+
+
+
+
+
+
+
+
No Grouping Extension
+
+
Extensions shouldn’t be used to group code within the same source file.
+
+
+Identifier: no_grouping_extension
+Enabled by default: No
+Supports autocorrection: No
+Kind: idiomatic
+Analyzer rule: No
+Minimum Swift compiler version: 5.0.0
+Default configuration: warning
+
+
Non Triggering Examples
+
protocol Food {}
+extension Food {}
+
+
+
class Apples {}
+extension Oranges {}
+
+
+
class Box < T > {}
+extension Box where T : Vegetable {}
+
+
+
Triggering Examples
+
enum Fruit {}
+↓ extension Fruit {}
+
+
+
↓ extension Tea : Error {}
+struct Tea {}
+
+
+
class Ham { class Spam {}}
+↓ extension Ham . Spam {}
+
+
+
extension External { struct Gotcha {}}
+↓ extension External . Gotcha {}
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/no_magic_numbers.html b/no_magic_numbers.html
new file mode 100644
index 000000000..5344cc4c2
--- /dev/null
+++ b/no_magic_numbers.html
@@ -0,0 +1,388 @@
+
+
+
+
no_magic_numbers Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SwiftLintFramework Reference
+
+ no_magic_numbers Reference
+
+
+
+
+
+
+
+
+
+
+
+
No Magic Numbers
+
+
Magic numbers should be replaced by named constants.
+
+
+Identifier: no_magic_numbers
+Enabled by default: No
+Supports autocorrection: No
+Kind: idiomatic
+Analyzer rule: No
+Minimum Swift compiler version: 5.0.0
+Default configuration: warning
+
+
Non Triggering Examples
+
var foo = 123
+
+
static let bar : Double = 0.123
+
+
let a = b + 1.0
+
+
array [ 0 ] + array [ 1 ]
+
+
let foo = 1_000.000_0 1
+
+
// array[1337]
+
+
baz ( "9999" )
+
+
func foo () {
+ let x : Int = 2
+ let y = 3
+ let vector = [ x , y , - 1 ]
+}
+
+
class A {
+ var foo : Double = 132
+ static let bar : Double = 0.98
+}
+
+
@available ( iOS 13 , * )
+func version () {
+ if #available(iOS 13, OSX 10.10, *) {
+ return
+ }
+}
+
+
Triggering Examples
+
foo ( ↓ 321 )
+
+
bar ( ↓ 1_000.005_0 1 )
+
+
array [ ↓ 42 ]
+
+
let box = array [ ↓ 12 + ↓ 14 ]
+
+
let a = b + ↓ 2.0
+
+
Color . primary . opacity ( isAnimate ? ↓ 0.1 : ↓ 1.5 )
+
+
+
+
+
+
+
+
+
+
+
diff --git a/no_space_in_method_call.html b/no_space_in_method_call.html
new file mode 100644
index 000000000..43fd1a26f
--- /dev/null
+++ b/no_space_in_method_call.html
@@ -0,0 +1,378 @@
+
+
+
+
no_space_in_method_call Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SwiftLintFramework Reference
+
+ no_space_in_method_call Reference
+
+
+
+
+
+
+
+
+
+
+
+
No Space in Method Call
+
+
Don’t add a space between the method name and the parentheses.
+
+
+Identifier: no_space_in_method_call
+Enabled by default: Yes
+Supports autocorrection: Yes
+Kind: style
+Analyzer rule: No
+Minimum Swift compiler version: 5.0.0
+Default configuration: warning
+
+
Non Triggering Examples
+
foo ()
+
+
object . foo ()
+
+
object . foo ( 1 )
+
+
object . foo ( value : 1 )
+
+
object . foo { print ( $0 }
+
+
list . sorted { $0 . 0 < $1 . 0 } . map { $0 . value }
+
+
self . init ( rgb : ( Int ) ( colorInt ))
+
+
Button {
+ print ( "Button tapped" )
+} label : {
+ Text ( "Button" )
+}
+
+
Triggering Examples
+
foo ↓ ()
+
+
object . foo ↓ ()
+
+
object . foo ↓ ( 1 )
+
+
object . foo ↓ ( value : 1 )
+
+
object . foo ↓ () {}
+
+
object . foo ↓ ()
+
+
object . foo ↓ ( value : 1 ) { x in print ( x ) }
+
+
+
+
+
+
+
+
+
+
+
diff --git a/notification_center_detachment.html b/notification_center_detachment.html
new file mode 100644
index 000000000..da915cb71
--- /dev/null
+++ b/notification_center_detachment.html
@@ -0,0 +1,362 @@
+
+
+
+
notification_center_detachment Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SwiftLintFramework Reference
+
+ notification_center_detachment Reference
+
+
+
+
+
+
+
+
+
+
+
+
Notification Center Detachment
+
+
An object should only remove itself as an observer in deinit.
+
+
+Identifier: notification_center_detachment
+Enabled by default: Yes
+Supports autocorrection: No
+Kind: lint
+Analyzer rule: No
+Minimum Swift compiler version: 5.0.0
+Default configuration: warning
+
+
Non Triggering Examples
+
class Foo {
+ deinit {
+ NotificationCenter . default . removeObserver ( self )
+ }
+}
+
+
class Foo {
+ func bar () {
+ NotificationCenter . default . removeObserver ( otherObject )
+ }
+}
+
+
Triggering Examples
+
class Foo {
+ func bar () {
+ ↓ NotificationCenter . default . removeObserver ( self )
+ }
+}
+
+
+
+
+
+
+
+
+
+
+
diff --git a/ns_number_init_as_function_reference.html b/ns_number_init_as_function_reference.html
new file mode 100644
index 000000000..149983d4c
--- /dev/null
+++ b/ns_number_init_as_function_reference.html
@@ -0,0 +1,356 @@
+
+
+
+
ns_number_init_as_function_reference Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SwiftLintFramework Reference
+
+ ns_number_init_as_function_reference Reference
+
+
+
+
+
+
+
+
+
+
+
+
NSNumber Init as Function Reference
+
+
Passing NSNumber.init or NSDecimalNumber.init as a function reference is dangerous as it can cause the wrong initializer to be used, causing crashes. Use .init(value:) instead.
+
+
+Identifier: ns_number_init_as_function_reference
+Enabled by default: Yes
+Supports autocorrection: No
+Kind: lint
+Analyzer rule: No
+Minimum Swift compiler version: 5.0.0
+Default configuration: warning
+
+
Non Triggering Examples
+
[ 0 , 0.2 ] . map ( NSNumber . init ( value :))
+
+
[ 0 , 0.2 ] . map { NSNumber ( value : $0 ) }
+
+
[ 0 , 0.2 ] . map ( NSDecimalNumber . init ( value :))
+
+
[ 0 , 0.2 ] . map { NSDecimalNumber ( value : $0 ) }
+
+
Triggering Examples
+
[ 0 , 0.2 ] . map ( ↓ NSNumber . init )
+
+
[ 0 , 0.2 ] . map ( ↓ NSDecimalNumber . init )
+
+
+
+
+
+
+
+
+
+
+
diff --git a/nslocalizedstring_key.html b/nslocalizedstring_key.html
new file mode 100644
index 000000000..7529ac5db
--- /dev/null
+++ b/nslocalizedstring_key.html
@@ -0,0 +1,365 @@
+
+
+
+
nslocalizedstring_key Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SwiftLintFramework Reference
+
+ nslocalizedstring_key Reference
+
+
+
+
+
+
+
+
+
+
+
+
NSLocalizedString Key
+
+
Static strings should be used as key/comment in NSLocalizedString in order for genstrings to work.
+
+
+Identifier: nslocalizedstring_key
+Enabled by default: No
+Supports autocorrection: No
+Kind: lint
+Analyzer rule: No
+Minimum Swift compiler version: 5.0.0
+Default configuration: warning
+
+
Non Triggering Examples
+
NSLocalizedString ( "key" , comment : "" )
+
+
NSLocalizedString ( "key" + "2" , comment : "" )
+
+
NSLocalizedString ( "key" , comment : "comment" )
+
+
NSLocalizedString ( "This is a multi-" +
+ "line string" , comment : "" )
+
+
let format = NSLocalizedString ( "%@, %@." , comment : "Accessibility label for a post in the post list." +
+" The parameters are the title, and date respectively." +
+" For example, " Let it Go , 1 hour ago . "" )
+
+
Triggering Examples
+
NSLocalizedString ( ↓ method (), comment : "" )
+
+
NSLocalizedString ( ↓ "key_ \( param ) " , comment : "" )
+
+
NSLocalizedString ( "key" , comment : ↓ "comment with \( param ) " )
+
+
NSLocalizedString ( ↓ "key_ \( param ) " , comment : ↓ method ())
+
+
+
+
+
+
+
+
+
+
+
diff --git a/nslocalizedstring_require_bundle.html b/nslocalizedstring_require_bundle.html
new file mode 100644
index 000000000..0f49d7600
--- /dev/null
+++ b/nslocalizedstring_require_bundle.html
@@ -0,0 +1,363 @@
+
+
+
+
nslocalizedstring_require_bundle Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SwiftLintFramework Reference
+
+ nslocalizedstring_require_bundle Reference
+
+
+
+
+
+
+
+
+
+
+
+
NSLocalizedString Require Bundle
+
+
Calls to NSLocalizedString should specify the bundle which contains the strings file.
+
+
+Identifier: nslocalizedstring_require_bundle
+Enabled by default: No
+Supports autocorrection: No
+Kind: lint
+Analyzer rule: No
+Minimum Swift compiler version: 5.0.0
+Default configuration: warning
+
+
Non Triggering Examples
+
NSLocalizedString ( "someKey" , bundle : . main , comment : "test" )
+
+
NSLocalizedString ( "someKey" , tableName : "a" ,
+ bundle : Bundle ( for : A . self ),
+ comment : "test" )
+
+
NSLocalizedString ( "someKey" , tableName : "xyz" ,
+ bundle : someBundle , value : "test"
+ comment : "test" )
+
+
arbitraryFunctionCall ( "something" )
+
+
Triggering Examples
+
↓ NSLocalizedString ( "someKey" , comment : "test" )
+
+
↓ NSLocalizedString ( "someKey" , tableName : "a" , comment : "test" )
+
+
↓ NSLocalizedString ( "someKey" , tableName : "xyz" ,
+ value : "test" , comment : "test" )
+
+
+
+
+
+
+
+
+
+
+
diff --git a/nsobject_prefer_isequal.html b/nsobject_prefer_isequal.html
new file mode 100644
index 000000000..209eaa362
--- /dev/null
+++ b/nsobject_prefer_isequal.html
@@ -0,0 +1,416 @@
+
+
+
+
nsobject_prefer_isequal Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SwiftLintFramework Reference
+
+ nsobject_prefer_isequal Reference
+
+
+
+
+
+
+
+
+
+
+
+
NSObject Prefer isEqual
+
+
NSObject subclasses should implement isEqual instead of ==.
+
+
+Identifier: nsobject_prefer_isequal
+Enabled by default: Yes
+Supports autocorrection: No
+Kind: lint
+Analyzer rule: No
+Minimum Swift compiler version: 5.0.0
+Default configuration: warning
+
+
Non Triggering Examples
+
class AClass : NSObject {
+}
+
+
@objc class AClass : SomeNSObjectSubclass {
+}
+
+
class AClass : Equatable {
+ static func == ( lhs : AClass , rhs : AClass ) -> Bool {
+ return true
+ }
+
+
class AClass : NSObject {
+ override func isEqual ( _ object : Any ?) -> Bool {
+ return true
+ }
+}
+
+
@objc class AClass : SomeNSObjectSubclass {
+ override func isEqual ( _ object : Any ?) -> Bool {
+ return false
+ }
+}
+
+
class AClass : NSObject {
+ static func == ( lhs : AClass , rhs : BClass ) -> Bool {
+ return true
+ }
+}
+
+
struct AStruct : Equatable {
+ static func == ( lhs : AStruct , rhs : AStruct ) -> Bool {
+ return false
+ }
+}
+
+
enum AnEnum : Equatable {
+ static func == ( lhs : AnEnum , rhs : AnEnum ) -> Bool {
+ return true
+ }
+}
+
+
Triggering Examples
+
class AClass : NSObject {
+ ↓ static func == ( lhs : AClass , rhs : AClass ) -> Bool {
+ return false
+ }
+}
+
+
@objc class AClass : SomeOtherNSObjectSubclass {
+ ↓ static func == ( lhs : AClass , rhs : AClass ) -> Bool {
+ return true
+ }
+}
+
+
class AClass : NSObject , Equatable {
+ ↓ static func == ( lhs : AClass , rhs : AClass ) -> Bool {
+ return false
+ }
+}
+
+
class AClass : NSObject {
+ override func isEqual ( _ object : Any ?) -> Bool {
+ guard let other = object as? AClass else {
+ return false
+ }
+ return true
+ }
+
+ ↓ static func == ( lhs : AClass , rhs : AClass ) -> Bool {
+ return false
+ }
+}
+
+
+
+
+
+
+
+
+
+
+
diff --git a/number_separator.html b/number_separator.html
new file mode 100644
index 000000000..12d147303
--- /dev/null
+++ b/number_separator.html
@@ -0,0 +1,506 @@
+
+
+
+
number_separator Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SwiftLintFramework Reference
+
+ number_separator Reference
+
+
+
+
+
+
+
+
+
+
+
+
Number Separator
+
+
Underscores should be used as thousand separator in large decimal numbers.
+
+
+Identifier: number_separator
+Enabled by default: No
+Supports autocorrection: Yes
+Kind: style
+Analyzer rule: No
+Minimum Swift compiler version: 5.0.0
+Default configuration: warning, minimum_length: 0, minimum_fraction_length: none
+
+
Non Triggering Examples
+
let foo = - 100
+
+
let foo = - 1_000
+
+
let foo = - 1_000_000
+
+
let foo = - 1.0001
+
+
let foo = - 1_000_000.0000001
+
+
let binary = - 0b10000
+
+
let binary = - 0b1000_0001
+
+
let hex = - 0xA
+
+
let hex = - 0xAA_BB
+
+
let octal = - 0o21
+
+
let octal = - 0o21_1
+
+
let exp = - 1_000_000.000000e2
+
+
let foo : Double = - ( 200 )
+
+
let foo : Double = - ( 200 / 447.214 )
+
+
let foo = - 6.2832e-6
+
+
let foo = + 100
+
+
let foo = + 1_000
+
+
let foo = + 1_000_000
+
+
let foo = + 1.0001
+
+
let foo = + 1_000_000.0000001
+
+
let binary = + 0b10000
+
+
let binary = + 0b1000_0001
+
+
let hex = + 0xA
+
+
let hex = + 0xAA_BB
+
+
let octal = + 0o21
+
+
let octal = + 0o21_1
+
+
let exp = + 1_000_000.000000e2
+
+
let foo : Double = + ( 200 )
+
+
let foo : Double = + ( 200 / 447.214 )
+
+
let foo = + 6.2832e-6
+
+
let foo = 100
+
+
let foo = 1_000
+
+
let foo = 1_000_000
+
+
let foo = 1.0001
+
+
let foo = 1_000_000.0000001
+
+
let binary = 0b10000
+
+
let binary = 0b1000_0001
+
+
let hex = 0xA
+
+
let hex = 0xAA_BB
+
+
let octal = 0o21
+
+
let octal = 0o21_1
+
+
let exp = 1_000_000.000000e2
+
+
let foo : Double = ( 200 )
+
+
let foo : Double = ( 200 / 447.214 )
+
+
let foo = 6.2832e-6
+
+
Triggering Examples
+
let foo = - ↓ 10_0
+
+
let foo = - ↓ 1000
+
+
let foo = - ↓ 1000e2
+
+
let foo = - ↓ 1000E2
+
+
let foo = - ↓ 1 __000
+
+
let foo = - ↓ 1.0001
+
+
let foo = - ↓ 1_000_000.000000_1
+
+
let foo = - ↓ 1000000.000000_1
+
+
let foo = - ↓ 6.2832e-6
+
+
let foo = + ↓ 10_0
+
+
let foo = + ↓ 1000
+
+
let foo = + ↓ 1000e2
+
+
let foo = + ↓ 1000E2
+
+
let foo = + ↓ 1 __000
+
+
let foo = + ↓ 1.0001
+
+
let foo = + ↓ 1_000_000.000000_1
+
+
let foo = + ↓ 1000000.000000_1
+
+
let foo = + ↓ 6.2832e-6
+
+
let foo = ↓ 10_0
+
+
let foo = ↓ 1000
+
+
let foo = ↓ 1000e2
+
+
let foo = ↓ 1000E2
+
+
let foo = ↓ 1 __000
+
+
let foo = ↓ 1.0001
+
+
let foo = ↓ 1_000_000.000000_1
+
+
let foo = ↓ 1000000.000000_1
+
+
let foo = ↓ 6.2832e-6
+
+
let foo : Double = - ( ↓ 100000 )
+
+
let foo : Double = - ( ↓ 10.000000_1 )
+
+
let foo : Double = - ( ↓ 123456 / ↓ 447.214214 )
+
+
let foo : Double = + ( ↓ 100000 )
+
+
let foo : Double = + ( ↓ 10.000000_1 )
+
+
let foo : Double = + ( ↓ 123456 / ↓ 447.214214 )
+
+
let foo : Double = ( ↓ 100000 )
+
+
let foo : Double = ( ↓ 10.000000_1 )
+
+
let foo : Double = ( ↓ 123456 / ↓ 447.214214 )
+
+
+
+
+
+
+
+
+
+
+
diff --git a/object_literal.html b/object_literal.html
new file mode 100644
index 000000000..fb2d19578
--- /dev/null
+++ b/object_literal.html
@@ -0,0 +1,392 @@
+
+
+
+
object_literal Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SwiftLintFramework Reference
+
+ object_literal Reference
+
+
+
+
+
+
+
+
+
+
+
+
Object Literal
+
+
Prefer object literals over image and color inits.
+
+
+Identifier: object_literal
+Enabled by default: No
+Supports autocorrection: No
+Kind: idiomatic
+Analyzer rule: No
+Minimum Swift compiler version: 5.0.0
+Default configuration: warning, image_literal: true, color_literal: true
+
+
Non Triggering Examples
+
let image = # imageLiteral ( resourceName : "image.jpg" )
+
+
let color = # colorLiteral ( red : 0.9607843161 , green : 0.7058823705 , blue : 0.200000003 , alpha : 1 )
+
+
let image = UIImage ( named : aVariable )
+
+
let image = UIImage ( named : "interpolated \( variable ) " )
+
+
let color = UIColor ( red : value , green : value , blue : value , alpha : 1 )
+
+
let image = NSImage ( named : aVariable )
+
+
let image = NSImage ( named : "interpolated \( variable ) " )
+
+
let color = NSColor ( red : value , green : value , blue : value , alpha : 1 )
+
+
Triggering Examples
+
let image = ↓ UIImage ( named : "foo" )
+
+
let color = ↓ UIColor ( red : 0.3 , green : 0.3 , blue : 0.3 , alpha : 1 )
+
+
let color = ↓ UIColor ( red : 100 / 255.0 , green : 50 / 255.0 , blue : 0 , alpha : 1 )
+
+
let color = ↓ UIColor ( white : 0.5 , alpha : 1 )
+
+
let image = ↓ NSImage ( named : "foo" )
+
+
let color = ↓ NSColor ( red : 0.3 , green : 0.3 , blue : 0.3 , alpha : 1 )
+
+
let color = ↓ NSColor ( red : 100 / 255.0 , green : 50 / 255.0 , blue : 0 , alpha : 1 )
+
+
let color = ↓ NSColor ( white : 0.5 , alpha : 1 )
+
+
let image = ↓ UIImage . init ( named : "foo" )
+
+
let color = ↓ UIColor . init ( red : 0.3 , green : 0.3 , blue : 0.3 , alpha : 1 )
+
+
let color = ↓ UIColor . init ( red : 100 / 255.0 , green : 50 / 255.0 , blue : 0 , alpha : 1 )
+
+
let color = ↓ UIColor . init ( white : 0.5 , alpha : 1 )
+
+
let image = ↓ NSImage . init ( named : "foo" )
+
+
let color = ↓ NSColor . init ( red : 0.3 , green : 0.3 , blue : 0.3 , alpha : 1 )
+
+
let color = ↓ NSColor . init ( red : 100 / 255.0 , green : 50 / 255.0 , blue : 0 , alpha : 1 )
+
+
let color = ↓ NSColor . init ( white : 0.5 , alpha : 1 )
+
+
+
+
+
+
+
+
+
+
+
diff --git a/opening_brace.html b/opening_brace.html
new file mode 100644
index 000000000..e6acfb21d
--- /dev/null
+++ b/opening_brace.html
@@ -0,0 +1,484 @@
+
+
+
+
opening_brace Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SwiftLintFramework Reference
+
+ opening_brace Reference
+
+
+
+
+
+
+
+
+
+
+
+
Opening Brace Spacing
+
+
Opening braces should be preceded by a single space and on the same line as the declaration.
+
+
+Identifier: opening_brace
+Enabled by default: Yes
+Supports autocorrection: Yes
+Kind: style
+Analyzer rule: No
+Minimum Swift compiler version: 5.0.0
+Default configuration: warning, allowMultilineFunc: false
+
+
Non Triggering Examples
+
func abc () {
+}
+
+
[] . map () { $0 }
+
+
[] . map ({ })
+
+
if let a = b { }
+
+
while a == b { }
+
+
guard let a = b else { }
+
+
if
+ let a = b ,
+ let c = d
+ where a == c
+{ }
+
+
while
+ let a = b ,
+ let c = d
+ where a == c
+{ }
+
+
guard
+ let a = b ,
+ let c = d
+ where a == c else
+{ }
+
+
struct Rule {}
+
+
+
struct Parent {
+ struct Child {
+ let foo : Int
+ }
+}
+
+
+
func f ( rect : CGRect ) {
+ {
+ let centre = CGPoint ( x : rect . midX , y : rect . midY )
+ print ( centre )
+ }()
+}
+
+
func f ( rect : CGRect ) -> () -> Void {
+ {
+ let centre = CGPoint ( x : rect . midX , y : rect . midY )
+ print ( centre )
+ }
+}
+
+
func f () -> () -> Void {
+ {}
+}
+
+
Triggering Examples
+
func abc () ↓ {
+}
+
+
func abc ()
+ ↓ { }
+
+
func abc ( a : A
+ b : B )
+↓ {
+
+
[] . map () ↓ { $0 }
+
+
[] . map ( ↓ { } )
+
+
if let a = b ↓ { }
+
+
while a == b ↓ { }
+
+
guard let a = b else ↓ { }
+
+
if
+ let a = b ,
+ let c = d
+ where a == c ↓ { }
+
+
while
+ let a = b ,
+ let c = d
+ where a == c ↓ { }
+
+
guard
+ let a = b ,
+ let c = d
+ where a == c else ↓ { }
+
+
struct Rule ↓ {}
+
+
+
struct Rule
+↓ {
+}
+
+
+
struct Rule
+
+ ↓ {
+}
+
+
+
struct Parent {
+ struct Child
+ ↓ {
+ let foo : Int
+ }
+}
+
+
+
// Get the current thread's TLS pointer. On first call for a given thread,
+// creates and initializes a new one.
+internal static func getPointer ()
+ -> UnsafeMutablePointer < _ThreadLocalStorage >
+{ // <- here
+ return _swift_stdlib_threadLocalStorageGet () . assumingMemoryBound (
+ to : _ThreadLocalStorage . self )
+}
+
+
func run_Array_method1x ( _ N : Int ) {
+ let existentialArray = array !
+ for _ in 0 ..< N * 100 {
+ for elt in existentialArray {
+ if ! elt . doIt () {
+ fatalError ( "expected true" )
+ }
+ }
+ }
+}
+
+func run_Array_method2x ( _ N : Int ) {
+
+}
+
+
+
+
+
+
+
+
+
+
+
diff --git a/operator_usage_whitespace.html b/operator_usage_whitespace.html
new file mode 100644
index 000000000..139f83e4e
--- /dev/null
+++ b/operator_usage_whitespace.html
@@ -0,0 +1,528 @@
+
+
+
+
operator_usage_whitespace Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SwiftLintFramework Reference
+
+ operator_usage_whitespace Reference
+
+
+
+
+
+
+
+
+
+
+
+
Operator Usage Whitespace
+
+
Operators should be surrounded by a single whitespace when they are being used.
+
+
+Identifier: operator_usage_whitespace
+Enabled by default: No
+Supports autocorrection: Yes
+Kind: style
+Analyzer rule: No
+Minimum Swift compiler version: 5.0.0
+Default configuration: warning, lines_look_around: 2, skip_aligned_constants: true, allowed_no_space_operators: [“…”, “..<”]
+
+
Non Triggering Examples
+
let foo = 1 + 2
+
+
+
let foo = 1 > 2
+
+
+
let foo = ! false
+
+
+
let foo : Int ?
+
+
+
let foo : Array < String >
+
+
+
let model = CustomView < Container < Button > , NSAttributedString > ()
+
+
+
let foo : [ String ]
+
+
+
let foo = 1 +
+ 2
+
+
+
let range = 1 ... 3
+
+
+
let range = 1 ... 3
+
+
+
let range = 1 ..< 3
+
+
+
#if swift(>=3.0)
+ foo ()
+#endif
+
+
+
array . removeAtIndex ( - 200 )
+
+
+
let name = "image-1"
+
+
+
button . setImage ( # imageLiteral ( resourceName : "image-1" ), for : . normal )
+
+
+
let doubleValue = - 9e-11
+
+
+
let foo = GenericType < ( UIViewController ) -> Void > ()
+
+
+
let foo = Foo < Bar < T > , Baz > ()
+
+
+
let foo = SignalProducer < Signal < Value , Error > , Error > ([ self . signal , next ]) . flatten ( . concat )
+
+
+
"let foo = 1"
+
+
enum Enum {
+ case hello = 1
+ case hello2 = 1
+ }
+
+
let something = Something < GenericParameter1 ,
+ GenericParameter2 > ()
+
+
return path . flatMap { path in
+ return compileCommands [ path ] ??
+ compileCommands [ path . path ( relativeTo : FileManager . default . currentDirectoryPath )]
+}
+
+
internal static func == ( lhs : Vertix , rhs : Vertix ) -> Bool {
+ return lhs . filePath == rhs . filePath
+ && lhs . originalRemoteString == rhs . originalRemoteString
+ && lhs . rootDirectory == rhs . rootDirectory
+}
+
+
internal static func == ( lhs : Vertix , rhs : Vertix ) -> Bool {
+ return lhs . filePath == rhs . filePath &&
+ lhs . originalRemoteString == rhs . originalRemoteString &&
+ lhs . rootDirectory == rhs . rootDirectory
+}
+
+
private static let pattern =
+ " \\ S \( mainPatternGroups ) " + // Regexp will match if expression not begin with comma
+ "|" + // or
+ " \( mainPatternGroups ) " // Regexp will match if expression begins with comma
+
+
private static let pattern =
+ " \\ S \( mainPatternGroups ) " + // Regexp will match if expression not begin with comma
+ "|" + // or
+ " \( mainPatternGroups ) " // Regexp will match if expression begins with comma
+
+
typealias Foo = Bar
+
+
protocol A {
+ associatedtype B = C
+}
+
+
tabbedViewController . title = nil
+
+
Triggering Examples
+
let foo = 1 ↓ + 2
+
+
+
let foo = 1 ↓ + 2
+
+
+
let foo = 1 ↓ + 2
+
+
+
let foo = 1 ↓ + 2
+
+
+
let foo ↓ = 1 ↓ + 2
+
+
+
let foo ↓ = 1 + 2
+
+
+
let foo ↓ = bar
+
+
+
let range = 1 ↓ ..< 3
+
+
+
let foo = bar ↓ ?? 0
+
+
+
let foo = bar ↓ != 0
+
+
+
let foo = bar ↓ !== bar2
+
+
+
let v8 = Int8 ( 1 ) ↓ << 6
+
+
+
let v8 = 1 ↓ << ( 6 )
+
+
+
let v8 = 1 ↓ << ( 6 )
+ let foo = 1 > 2
+
+
+
let foo ↓ = [ 1 ]
+
+
+
let foo ↓ = "1"
+
+
+
let foo ↓ = "1"
+
+
+
enum Enum {
+ case one ↓ = 1
+ case two = 1
+ }
+
+
enum Enum {
+ case one = 1
+ case two ↓ = 1
+ }
+
+
enum Enum {
+ case one ↓ = 1
+ case two ↓ = 1
+ }
+
+
typealias Foo ↓ = Bar
+
+
protocol A {
+ associatedtype B ↓ = C
+}
+
+
tabbedViewController . title ↓ = nil
+
+
let foo = bar ? 0 ↓ : 1
+
+
let foo = bar ↓ ? 0 : 1
+
+
+
+
+
+
+
+
+
+
+
diff --git a/operator_whitespace.html b/operator_whitespace.html
new file mode 100644
index 000000000..acd1c4a51
--- /dev/null
+++ b/operator_whitespace.html
@@ -0,0 +1,371 @@
+
+
+
+
operator_whitespace Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SwiftLintFramework Reference
+
+ operator_whitespace Reference
+
+
+
+
+
+
+
+
+
+
+
+
Operator Function Whitespace
+
+
Operators should be surrounded by a single whitespace when defining them.
+
+
+Identifier: operator_whitespace
+Enabled by default: Yes
+Supports autocorrection: No
+Kind: style
+Analyzer rule: No
+Minimum Swift compiler version: 5.0.0
+Default configuration: warning
+
+
Non Triggering Examples
+
func <| ( lhs : Int , rhs : Int ) -> Int {}
+
+
+
func <|< < A > ( lhs : A , rhs : A ) -> A {}
+
+
+
func abc ( lhs : Int , rhs : Int ) -> Int {}
+
+
+
Triggering Examples
+
↓ func <| ( lhs : Int , rhs : Int ) -> Int {}
+
+
+
↓ func <|<< A > ( lhs : A , rhs : A ) -> A {}
+
+
+
↓ func <| ( lhs : Int , rhs : Int ) -> Int {}
+
+
+
↓ func <|< < A > ( lhs : A , rhs : A ) -> A {}
+
+
+
↓ func <| ( lhs : Int , rhs : Int ) -> Int {}
+
+
+
↓ func <|< < A > ( lhs : A , rhs : A ) -> A {}
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/optional_enum_case_matching.html b/optional_enum_case_matching.html
new file mode 100644
index 000000000..bf5a910a7
--- /dev/null
+++ b/optional_enum_case_matching.html
@@ -0,0 +1,396 @@
+
+
+
+
optional_enum_case_matching Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SwiftLintFramework Reference
+
+ optional_enum_case_matching Reference
+
+
+
+
+
+
+
+
+
+
+
+
Optional Enum Case Match
+
+
Matching an enum case against an optional enum without ‘?’ is supported on Swift 5.1 and above.
+
+
+Identifier: optional_enum_case_matching
+Enabled by default: No
+Supports autocorrection: Yes
+Kind: style
+Analyzer rule: No
+Minimum Swift compiler version: 5.1.0
+Default configuration: warning
+
+
Non Triggering Examples
+
switch foo {
+ case . bar : break
+ case . baz : break
+ default : break
+}
+
+
switch foo {
+ case ( . bar , . baz ): break
+ case ( . bar , _ ): break
+ case ( _ , . baz ): break
+ default : break
+}
+
+
switch ( x , y ) {
+case ( . c , _ ?):
+ break
+case ( . c , nil ):
+ break
+case ( _ , _ ):
+ break
+}
+
+
Triggering Examples
+
switch foo {
+ case . bar ↓ ?: break
+ case . baz : break
+ default : break
+}
+
+
switch foo {
+ case Foo . bar ↓ ?: break
+ case . baz : break
+ default : break
+}
+
+
switch foo {
+ case . bar ↓ ?, . baz ↓ ?: break
+ default : break
+}
+
+
switch foo {
+ case . bar ↓ ? where x > 1 : break
+ case . baz : break
+ default : break
+}
+
+
switch foo {
+ case ( . bar ↓ ?, . baz ↓ ?): break
+ case ( . bar ↓ ?, _ ): break
+ case ( _ , . bar ↓ ?): break
+ default : break
+}
+
+
+
+
+
+
+
+
+
+
+
diff --git a/orphaned_doc_comment.html b/orphaned_doc_comment.html
new file mode 100644
index 000000000..36471f40c
--- /dev/null
+++ b/orphaned_doc_comment.html
@@ -0,0 +1,368 @@
+
+
+
+
orphaned_doc_comment Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SwiftLintFramework Reference
+
+ orphaned_doc_comment Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
A doc comment should be attached to a declaration.
+
+
+Identifier: orphaned_doc_comment
+Enabled by default: Yes
+Supports autocorrection: No
+Kind: lint
+Analyzer rule: No
+Minimum Swift compiler version: 5.0.0
+Default configuration: warning
+
+
Non Triggering Examples
+
/// My great property
+var myGreatProperty : String !
+
+
//////////////////////////////////////
+//
+// Copyright header.
+//
+//////////////////////////////////////
+
+
/// Look here for more info: https://github.com.
+var myGreatProperty : String !
+
+
/// Look here for more info:
+/// https://github.com.
+var myGreatProperty : String !
+
+
Triggering Examples
+
↓ /// My great property
+// Not a doc string
+var myGreatProperty : String !
+
+
↓ /// Look here for more info: https://github.com.
+// Not a doc string
+var myGreatProperty : String !
+
+
+
+
+
+
+
+
+
+
+
diff --git a/overridden_super_call.html b/overridden_super_call.html
new file mode 100644
index 000000000..9c3b07992
--- /dev/null
+++ b/overridden_super_call.html
@@ -0,0 +1,396 @@
+
+
+
+
overridden_super_call Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SwiftLintFramework Reference
+
+ overridden_super_call Reference
+
+
+
+
+
+
+
+
+
+
+
+
Overridden methods call super
+
+
Some overridden methods should always call super
+
+
+Identifier: overridden_super_call
+Enabled by default: No
+Supports autocorrection: No
+Kind: lint
+Analyzer rule: No
+Minimum Swift compiler version: 5.0.0
+Default configuration: warning, excluded: [], included: [“*”]
+
+
Non Triggering Examples
+
class VC : UIViewController {
+ override func viewWillAppear ( _ animated : Bool ) {
+ super . viewWillAppear ( animated )
+ }
+}
+
+
class VC : UIViewController {
+ override func viewWillAppear ( _ animated : Bool ) {
+ self . method1 ()
+ super . viewWillAppear ( animated )
+ self . method2 ()
+ }
+}
+
+
class VC : UIViewController {
+ override func loadView () {
+ }
+}
+
+
class Some {
+ func viewWillAppear ( _ animated : Bool ) {
+ }
+}
+
+
class VC : UIViewController {
+ override func viewDidLoad () {
+ defer {
+ super . viewDidLoad ()
+ }
+ }
+}
+
+
Triggering Examples
+
class VC : UIViewController {
+ override func viewWillAppear ( _ animated : Bool ) { ↓
+ //Not calling to super
+ self . method ()
+ }
+}
+
+
class VC : UIViewController {
+ override func viewWillAppear ( _ animated : Bool ) { ↓
+ super . viewWillAppear ( animated )
+ //Other code
+ super . viewWillAppear ( animated )
+ }
+}
+
+
class VC : UIViewController {
+ override func didReceiveMemoryWarning () { ↓
+ }
+}
+
+
+
+
+
+
+
+
+
+
+
diff --git a/override_in_extension.html b/override_in_extension.html
new file mode 100644
index 000000000..938f22845
--- /dev/null
+++ b/override_in_extension.html
@@ -0,0 +1,381 @@
+
+
+
+
override_in_extension Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SwiftLintFramework Reference
+
+ override_in_extension Reference
+
+
+
+
+
+
+
+
+
+
+
+
Override in Extension
+
+
Extensions shouldn’t override declarations.
+
+
+Identifier: override_in_extension
+Enabled by default: No
+Supports autocorrection: No
+Kind: lint
+Analyzer rule: No
+Minimum Swift compiler version: 5.0.0
+Default configuration: warning
+
+
Non Triggering Examples
+
extension Person {
+ var age : Int { return 42 }
+}
+
+
+
extension Person {
+ func celebrateBirthday () {}
+}
+
+
+
class Employee : Person {
+ override func celebrateBirthday () {}
+}
+
+
+
class Foo : NSObject {}
+extension Foo {
+ override var description : String { return "" }
+}
+
+
struct Foo {
+ class Bar : NSObject {}
+}
+extension Foo . Bar {
+ override var description : String { return "" }
+}
+
+
Triggering Examples
+
extension Person {
+ override ↓ var age : Int { return 42 }
+}
+
+
+
extension Person {
+ override ↓ func celebrateBirthday () {}
+}
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pattern_matching_keywords.html b/pattern_matching_keywords.html
new file mode 100644
index 000000000..b62338a64
--- /dev/null
+++ b/pattern_matching_keywords.html
@@ -0,0 +1,420 @@
+
+
+
+
pattern_matching_keywords Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SwiftLintFramework Reference
+
+ pattern_matching_keywords Reference
+
+
+
+
+
+
+
+
+
+
+
+
Pattern Matching Keywords
+
+
Combine multiple pattern matching bindings by moving keywords out of tuples.
+
+
+Identifier: pattern_matching_keywords
+Enabled by default: No
+Supports autocorrection: No
+Kind: idiomatic
+Analyzer rule: No
+Minimum Swift compiler version: 5.0.0
+Default configuration: warning
+
+
Non Triggering Examples
+
switch foo {
+ default : break
+}
+
+
switch foo {
+ case 1 : break
+}
+
+
switch foo {
+ case bar : break
+}
+
+
switch foo {
+ case let ( x , y ): break
+}
+
+
switch foo {
+ case . foo ( let x ): break
+}
+
+
switch foo {
+ case let . foo ( x , y ): break
+}
+
+
switch foo {
+ case . foo ( let x ), . bar ( let x ): break
+}
+
+
switch foo {
+ case . foo ( let x , var y ): break
+}
+
+
switch foo {
+ case var ( x , y ): break
+}
+
+
switch foo {
+ case . foo ( var x ): break
+}
+
+
switch foo {
+ case var . foo ( x , y ): break
+}
+
+
Triggering Examples
+
switch foo {
+ case ( ↓ let x , ↓ let y ): break
+}
+
+
switch foo {
+ case ( ↓ let x , ↓ let y , . foo ): break
+}
+
+
switch foo {
+ case ( ↓ let x , ↓ let y , _ ): break
+}
+
+
switch foo {
+ case . foo ( ↓ let x , ↓ let y ): break
+}
+
+
switch foo {
+ case ( . yamlParsing ( ↓ let x ), . yamlParsing ( ↓ let y )): break
+}
+
+
switch foo {
+ case ( ↓ var x , ↓ var y ): break
+}
+
+
switch foo {
+ case . foo ( ↓ var x , ↓ var y ): break
+}
+
+
switch foo {
+ case ( . yamlParsing ( ↓ var x ), . yamlParsing ( ↓ var y )): break
+}
+
+
+
+
+
+
+
+
+
+
+
diff --git a/prefer_nimble.html b/prefer_nimble.html
new file mode 100644
index 000000000..bd11c7db7
--- /dev/null
+++ b/prefer_nimble.html
@@ -0,0 +1,360 @@
+
+
+
+
prefer_nimble Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SwiftLintFramework Reference
+
+ prefer_nimble Reference
+
+
+
+
+
+
+
+
+
+
+
+
Prefer Nimble
+
+
Prefer Nimble matchers over XCTAssert functions.
+
+
+Identifier: prefer_nimble
+Enabled by default: No
+Supports autocorrection: No
+Kind: idiomatic
+Analyzer rule: No
+Minimum Swift compiler version: 5.0.0
+Default configuration: warning
+
+
Non Triggering Examples
+
expect ( foo ) == 1
+
+
expect ( foo ) . to ( equal ( 1 ))
+
+
Triggering Examples
+
↓ XCTAssertTrue ( foo )
+
+
↓ XCTAssertEqual ( foo , 2 )
+
+
↓ XCTAssertNotEqual ( foo , 2 )
+
+
↓ XCTAssertNil ( foo )
+
+
↓ XCTAssert ( foo )
+
+
↓ XCTAssertGreaterThan ( foo , 10 )
+
+
+
+
+
+
+
+
+
+
+
diff --git a/prefer_self_in_static_references.html b/prefer_self_in_static_references.html
new file mode 100644
index 000000000..b2a76922b
--- /dev/null
+++ b/prefer_self_in_static_references.html
@@ -0,0 +1,401 @@
+
+
+
+
prefer_self_in_static_references Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SwiftLintFramework Reference
+
+ prefer_self_in_static_references Reference
+
+
+
+
+
+
+
+
+
+
+
+
Prefer Self in Static References
+
+
Use Self to refer to the surrounding type name.
+
+
+Identifier: prefer_self_in_static_references
+Enabled by default: No
+Supports autocorrection: Yes
+Kind: style
+Analyzer rule: No
+Minimum Swift compiler version: 5.0.0
+Default configuration: warning
+
+
Non Triggering Examples
+
class C {
+ static let primes = [ 2 , 3 , 5 , 7 ]
+ func isPrime ( i : Int ) -> Bool { Self . primes . contains ( i ) }
+
+
struct T {
+ static let i = 0
+ }
+ struct S {
+ static let i = 0
+ }
+ extension T {
+ static let j = S . i + T . i
+ static let k = { T . j }()
+ }
+
+
class ` Self ` {
+ static let i = 0
+ func f () -> Int { Self . i }
+ }
+
+
Triggering Examples
+
class C {
+ struct S {
+ static let i = 2
+ let h = ↓ S . i
+ }
+ static let i = 1
+ let h = C . i
+ var j : Int { ↓ C . i }
+ func f () -> Int { ↓ C . i + h }
+ }
+
+
struct S {
+ let j : Int
+ static let i = 1
+ static func f () -> Int { ↓ S . i }
+ func g () -> Any { ↓ S . self }
+ func h () -> S { ↓ S ( j : 2 ) }
+ func i () -> KeyPath < S , Int > { \ ↓ S . j }
+ func j ( @Wrap ( - ↓ S . i , ↓ S . i ) n : Int = ↓ S . i ) {}
+ }
+
+
struct S {
+ struct T {
+ static let i = 3
+ }
+ struct R {
+ static let j = S . T . i
+ }
+ static let h = ↓ S . T . i + ↓ S . R . j
+ }
+
+
enum E {
+ case A
+ static func f () -> E { ↓ E . A }
+ static func g () -> E { ↓ E . f () }
+ }
+
+
+
+
+
+
+
+
+
+
+
diff --git a/prefer_self_type_over_type_of_self.html b/prefer_self_type_over_type_of_self.html
new file mode 100644
index 000000000..1fb565385
--- /dev/null
+++ b/prefer_self_type_over_type_of_self.html
@@ -0,0 +1,386 @@
+
+
+
+
prefer_self_type_over_type_of_self Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SwiftLintFramework Reference
+
+ prefer_self_type_over_type_of_self Reference
+
+
+
+
+
+
+
+
+
+
+
+
Prefer Self Type Over Type of Self
+
+
Prefer Self over type(of: self) when accessing properties or calling methods.
+
+
+Identifier: prefer_self_type_over_type_of_self
+Enabled by default: No
+Supports autocorrection: Yes
+Kind: style
+Analyzer rule: No
+Minimum Swift compiler version: 5.1.0
+Default configuration: warning
+
+
Non Triggering Examples
+
class Foo {
+ func bar () {
+ Self . baz ()
+ }
+}
+
+
class Foo {
+ func bar () {
+ print ( Self . baz )
+ }
+}
+
+
class A {
+ func foo ( param : B ) {
+ type ( of : param ) . bar ()
+ }
+}
+
+
class A {
+ func foo () {
+ print ( type ( of : self ))
+ }
+}
+
+
Triggering Examples
+
class Foo {
+ func bar () {
+ ↓ type ( of : self ) . baz ()
+ }
+}
+
+
class Foo {
+ func bar () {
+ print ( ↓ type ( of : self ) . baz )
+ }
+}
+
+
class Foo {
+ func bar () {
+ print ( ↓ Swift . type ( of : self ) . baz )
+ }
+}
+
+
+
+
+
+
+
+
+
+
+
diff --git a/prefer_zero_over_explicit_init.html b/prefer_zero_over_explicit_init.html
new file mode 100644
index 000000000..1603e7bf5
--- /dev/null
+++ b/prefer_zero_over_explicit_init.html
@@ -0,0 +1,368 @@
+
+
+
+
prefer_zero_over_explicit_init Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SwiftLintFramework Reference
+
+ prefer_zero_over_explicit_init Reference
+
+
+
+
+
+
+
+
+
+
+
+
Prefer Zero Over Explicit Init
+
+
Prefer .zero over explicit init with zero parameters (e.g. CGPoint(x: 0, y: 0))
+
+
+Identifier: prefer_zero_over_explicit_init
+Enabled by default: No
+Supports autocorrection: Yes
+Kind: idiomatic
+Analyzer rule: No
+Minimum Swift compiler version: 5.0.0
+Default configuration: warning
+
+
Non Triggering Examples
+
CGRect ( x : 0 , y : 0 , width : 0 , height : 1 )
+
+
CGPoint ( x : 0 , y : - 1 )
+
+
CGSize ( width : 2 , height : 4 )
+
+
CGVector ( dx : - 5 , dy : 0 )
+
+
UIEdgeInsets ( top : 0 , left : 1 , bottom : 0 , right : 1 )
+
+
Triggering Examples
+
↓ CGPoint ( x : 0 , y : 0 )
+
+
↓ CGPoint ( x : 0.000000 , y : 0 )
+
+
↓ CGPoint ( x : 0.000000 , y : 0.000 )
+
+
↓ CGRect ( x : 0 , y : 0 , width : 0 , height : 0 )
+
+
↓ CGSize ( width : 0 , height : 0 )
+
+
↓ CGVector ( dx : 0 , dy : 0 )
+
+
↓ UIEdgeInsets ( top : 0 , left : 0 , bottom : 0 , right : 0 )
+
+
+
+
+
+
+
+
+
+
+
diff --git a/prefixed_toplevel_constant.html b/prefixed_toplevel_constant.html
new file mode 100644
index 000000000..2e917b1b6
--- /dev/null
+++ b/prefixed_toplevel_constant.html
@@ -0,0 +1,416 @@
+
+
+
+
prefixed_toplevel_constant Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SwiftLintFramework Reference
+
+ prefixed_toplevel_constant Reference
+
+
+
+
+
+
+
+
+
+
+
+
Prefixed Top-Level Constant
+
+
Top-level constants should be prefixed by k.
+
+
+Identifier: prefixed_toplevel_constant
+Enabled by default: No
+Supports autocorrection: No
+Kind: style
+Analyzer rule: No
+Minimum Swift compiler version: 5.0.0
+Default configuration: warning, only_private: false
+
+
Non Triggering Examples
+
private let kFoo = 20.0
+
+
public let kFoo = false
+
+
internal let kFoo = "Foo"
+
+
let kFoo = true
+
+
let Foo = true
+
+
struct Foo {
+ let bar = 20.0
+}
+
+
private var foo = 20.0
+
+
public var foo = false
+
+
internal var foo = "Foo"
+
+
var foo = true
+
+
var foo = true , bar = true
+
+
var foo = true , let kFoo = true
+
+
let
+ kFoo = true
+
+
var foo : Int {
+ return a + b
+}
+
+
let kFoo = {
+ return a + b
+}()
+
+
var foo : String {
+ let bar = ""
+ return bar
+}
+
+
if condition () {
+ let result = somethingElse ()
+ print ( result )
+ exit ()
+}
+
+
[ 1 , 2 , 3 , 1000 , 4000 ] . forEach { number in
+ let isSmall = number < 10
+ if isSmall {
+ print ( " \( number ) is a small number" )
+ }
+}
+
+
Triggering Examples
+
private let ↓ Foo = 20.0
+
+
public let ↓ Foo = false
+
+
internal let ↓ Foo = "Foo"
+
+
let ↓ Foo = true
+
+
let ↓ foo = 2 , ↓ bar = true
+
+
let
+ ↓ foo = true
+
+
let ↓ foo = {
+ return a + b
+}()
+
+
+
+
+
+
+
+
+
+
+
diff --git a/private_action.html b/private_action.html
new file mode 100644
index 000000000..1f2301a26
--- /dev/null
+++ b/private_action.html
@@ -0,0 +1,429 @@
+
+
+
+
private_action Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SwiftLintFramework Reference
+
+ private_action Reference
+
+
+
+
+
+
+
+
+
+
+
+
Private Actions
+
+
IBActions should be private.
+
+
+Identifier: private_action
+Enabled by default: No
+Supports autocorrection: No
+Kind: lint
+Analyzer rule: No
+Minimum Swift compiler version: 5.0.0
+Default configuration: warning
+
+
Non Triggering Examples
+
class Foo {
+ @IBAction private func barButtonTapped ( _ sender : UIButton ) {}
+}
+
+
+
struct Foo {
+ @IBAction private func barButtonTapped ( _ sender : UIButton ) {}
+}
+
+
+
class Foo {
+ @IBAction fileprivate func barButtonTapped ( _ sender : UIButton ) {}
+}
+
+
+
struct Foo {
+ @IBAction fileprivate func barButtonTapped ( _ sender : UIButton ) {}
+}
+
+
+
private extension Foo {
+ @IBAction func barButtonTapped ( _ sender : UIButton ) {}
+}
+
+
+
fileprivate extension Foo {
+ @IBAction func barButtonTapped ( _ sender : UIButton ) {}
+}
+
+
+
Triggering Examples
+
class Foo {
+ @IBAction ↓ func barButtonTapped ( _ sender : UIButton ) {}
+}
+
+
+
struct Foo {
+ @IBAction ↓ func barButtonTapped ( _ sender : UIButton ) {}
+}
+
+
+
class Foo {
+ @IBAction public ↓ func barButtonTapped ( _ sender : UIButton ) {}
+}
+
+
+
struct Foo {
+ @IBAction public ↓ func barButtonTapped ( _ sender : UIButton ) {}
+}
+
+
+
class Foo {
+ @IBAction internal ↓ func barButtonTapped ( _ sender : UIButton ) {}
+}
+
+
+
struct Foo {
+ @IBAction internal ↓ func barButtonTapped ( _ sender : UIButton ) {}
+}
+
+
+
extension Foo {
+ @IBAction ↓ func barButtonTapped ( _ sender : UIButton ) {}
+}
+
+
+
extension Foo {
+ @IBAction public ↓ func barButtonTapped ( _ sender : UIButton ) {}
+}
+
+
+
extension Foo {
+ @IBAction internal ↓ func barButtonTapped ( _ sender : UIButton ) {}
+}
+
+
+
public extension Foo {
+ @IBAction ↓ func barButtonTapped ( _ sender : UIButton ) {}
+}
+
+
+
internal extension Foo {
+ @IBAction ↓ func barButtonTapped ( _ sender : UIButton ) {}
+}
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/private_outlet.html b/private_outlet.html
new file mode 100644
index 000000000..4a0f3a3ac
--- /dev/null
+++ b/private_outlet.html
@@ -0,0 +1,419 @@
+
+
+
+
private_outlet Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SwiftLintFramework Reference
+
+ private_outlet Reference
+
+
+
+
+
+
+
+
+
+
+
+
Private Outlets
+
+
IBOutlets should be private to avoid leaking UIKit to higher layers.
+
+
+Identifier: private_outlet
+Enabled by default: No
+Supports autocorrection: No
+Kind: lint
+Analyzer rule: No
+Minimum Swift compiler version: 5.0.0
+Default configuration: warning, allow_private_set: false
+
+
Non Triggering Examples
+
class Foo {
+ @IBOutlet private var label : UILabel ?
+}
+
+
+
class Foo {
+ @IBOutlet private var label : UILabel !
+}
+
+
+
class Foo {
+ var notAnOutlet : UILabel
+}
+
+
+
class Foo {
+ @IBOutlet weak private var label : UILabel ?
+}
+
+
+
class Foo {
+ @IBOutlet private weak var label : UILabel ?
+}
+
+
+
class Foo {
+ @IBOutlet fileprivate weak var label : UILabel ?
+}
+
+
+
class Foo {
+ @IBOutlet private(set) var label : UILabel ?
+}
+
+
+
class Foo {
+ @IBOutlet private(set) var label : UILabel !
+}
+
+
+
class Foo {
+ @IBOutlet weak private(set) var label : UILabel ?
+}
+
+
+
class Foo {
+ @IBOutlet private(set) weak var label : UILabel ?
+}
+
+
+
class Foo {
+ @IBOutlet fileprivate ( set ) weak var label : UILabel ?
+}
+
+
+
Triggering Examples
+
class Foo {
+ @IBOutlet ↓ var label : UILabel ?
+}
+
+
+
class Foo {
+ @IBOutlet ↓ var label : UILabel !
+}
+
+
+
class Foo {
+ @IBOutlet private(set) ↓ var label : UILabel ?
+}
+
+
+
class Foo {
+ @IBOutlet fileprivate ( set ) ↓ var label : UILabel ?
+}
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/private_over_fileprivate.html b/private_over_fileprivate.html
new file mode 100644
index 000000000..79e65a65a
--- /dev/null
+++ b/private_over_fileprivate.html
@@ -0,0 +1,380 @@
+
+
+
+
private_over_fileprivate Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SwiftLintFramework Reference
+
+ private_over_fileprivate Reference
+
+
+
+
+
+
+
+
+
+
+
+
Private over fileprivate
+
+
Prefer private over fileprivate declarations.
+
+
+Identifier: private_over_fileprivate
+Enabled by default: Yes
+Supports autocorrection: Yes
+Kind: idiomatic
+Analyzer rule: No
+Minimum Swift compiler version: 5.0.0
+Default configuration: warning, validate_extensions: false
+
+
Non Triggering Examples
+
extension String {}
+
+
private extension String {}
+
+
public
+ enum MyEnum {}
+
+
open extension
+ String {}
+
+
internal extension String {}
+
+
extension String {
+ fileprivate func Something (){}
+}
+
+
class MyClass {
+ fileprivate let myInt = 4
+}
+
+
class MyClass {
+ fileprivate ( set ) var myInt = 4
+}
+
+
struct Outter {
+ struct Inter {
+ fileprivate struct Inner {}
+ }
+}
+
+
Triggering Examples
+
↓ fileprivate enum MyEnum {}
+
+
↓ fileprivate class MyClass {
+ fileprivate ( set ) var myInt = 4
+}
+
+
+
+
+
+
+
+
+
+
+
diff --git a/private_subject.html b/private_subject.html
new file mode 100644
index 000000000..dc9069b42
--- /dev/null
+++ b/private_subject.html
@@ -0,0 +1,494 @@
+
+
+
+
private_subject Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SwiftLintFramework Reference
+
+ private_subject Reference
+
+
+
+
+
+
+
+
+
+
+
+
Private Combine Subject
+
+
Combine Subject should be private.
+
+
+Identifier: private_subject
+Enabled by default: No
+Supports autocorrection: No
+Kind: lint
+Analyzer rule: No
+Minimum Swift compiler version: 5.0.0
+Default configuration: warning
+
+
Non Triggering Examples
+
final class Foobar {
+ private let goodSubject = PassthroughSubject < Bool , Never > ()
+}
+
+
final class Foobar {
+ private let goodSubject : PassthroughSubject < Bool , Never >
+}
+
+
final class Foobar {
+ fileprivate let goodSubject : PassthroughSubject < Bool , Never >
+}
+
+
final class Foobar {
+ private let goodSubject : PassthroughSubject < Bool , Never > = . ini ()
+}
+
+
final class Foobar {
+ private let goodSubject = CurrentValueSubject < Bool , Never > ( false )
+}
+
+
final class Foobar {
+ private let goodSubject : CurrentValueSubject < Bool , Never >
+}
+
+
final class Foobar {
+ fileprivate let goodSubject : CurrentValueSubject < String , Never >
+}
+
+
final class Foobar {
+ private let goodSubject : CurrentValueSubject < String , Never > = . ini ( "toto" )
+}
+
+
final class Foobar {
+ private let goodSubject = PassthroughSubject < Set < String > , Never > ()
+}
+
+
final class Foobar {
+ private let goodSubject : PassthroughSubject < Set < String > , Never > = . init ()
+}
+
+
final class Foobar {
+ private let goodSubject : CurrentValueSubject < Set < String > , Never > = . init ([])
+}
+
+
final class Foobar {
+ private let goodSubject =
+ PassthroughSubject < Bool , Never > ()
+}
+
+
final class Foobar {
+ private let goodSubject :
+ PassthroughSubject < Bool , Never > = . ini ()
+}
+
+
final class Foobar {
+ private let goodSubject =
+ CurrentValueSubject < Bool , Never > ( true )
+}
+
+
Triggering Examples
+
final class Foobar {
+ let ↓ badSubject = PassthroughSubject < Bool , Never > ()
+}
+
+
final class Foobar {
+ let ↓ badSubject : PassthroughSubject < Bool , Never >
+}
+
+
final class Foobar {
+ private(set) let ↓ badSubject : PassthroughSubject < Bool , Never >
+}
+
+
final class Foobar {
+ private(set) let ↓ badSubject = PassthroughSubject < Bool , Never > ()
+}
+
+
final class Foobar {
+ let goodSubject : PassthroughSubject < Bool , Never > = . ini ()
+}
+
+
final class Foobar {
+ private let goodSubject : PassthroughSubject < Bool , Never >
+ private(set) let ↓ badSubject = PassthroughSubject < Bool , Never > ()
+ private(set) let ↓ anotherBadSubject = PassthroughSubject < Bool , Never > ()
+}
+
+
final class Foobar {
+ private(set) let ↓ badSubject = PassthroughSubject < Bool , Never > ()
+ private let goodSubject : PassthroughSubject < Bool , Never >
+ private(set) let ↓ anotherBadSubject = PassthroughSubject < Bool , Never > ()
+}
+
+
final class Foobar {
+ let ↓ badSubject = CurrentValueSubject < Bool , Never > ( true )
+}
+
+
final class Foobar {
+ let ↓ badSubject : CurrentValueSubject < Bool , Never >
+}
+
+
final class Foobar {
+ private(set) let ↓ badSubject : CurrentValueSubject < Bool , Never >
+}
+
+
final class Foobar {
+ private(set) let ↓ badSubject = CurrentValueSubject < Bool , Never > ( false )
+}
+
+
final class Foobar {
+ let goodSubject : CurrentValueSubject < String , Never > = . init ( "toto" )
+}
+
+
final class Foobar {
+ private let goodSubject : CurrentValueSubject < Bool , Never >
+ private(set) let ↓ badSubject = CurrentValueSubject < Bool , Never > ( false )
+ private(set) let ↓ anotherBadSubject = CurrentValueSubject < Bool , Never > ( false )
+}
+
+
final class Foobar {
+ private(set) let ↓ badSubject = CurrentValueSubject < Bool , Never > ( false )
+ private let goodSubject : CurrentValueSubject < Bool , Never >
+ private(set) let ↓ anotherBadSubject = CurrentValueSubject < Bool , Never > ( true )
+}
+
+
final class Foobar {
+ let ↓ badSubject = PassthroughSubject < Set < String > , Never > ()
+}
+
+
final class Foobar {
+ let ↓ badSubject : PassthroughSubject < Set < String > , Never > = . init ()
+}
+
+
final class Foobar {
+ let ↓ badSubject : CurrentValueSubject < Set < String > , Never > = . init ([])
+}
+
+
final class Foobar {
+ let ↓ badSubject =
+ PassthroughSubject < Bool , Never > ()
+}
+
+
final class Foobar {
+ let ↓ badSubject :
+ PassthroughSubject < Bool , Never > = . ini ()
+}
+
+
final class Foobar {
+ let ↓ badSubject =
+ CurrentValueSubject < Bool , Never > ( true )
+}
+
+
+
+
+
+
+
+
+
+
+
diff --git a/private_unit_test.html b/private_unit_test.html
new file mode 100644
index 000000000..c10835675
--- /dev/null
+++ b/private_unit_test.html
@@ -0,0 +1,415 @@
+
+
+
+
private_unit_test Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SwiftLintFramework Reference
+
+ private_unit_test Reference
+
+
+
+
+
+
+
+
+
+
+
+
Private Unit Test
+
+
Unit tests marked private are silently skipped.
+
+
+Identifier: private_unit_test
+Enabled by default: Yes
+Supports autocorrection: Yes
+Kind: lint
+Analyzer rule: No
+Minimum Swift compiler version: 5.0.0
+Default configuration: warning: XCTestCase
+
+
Non Triggering Examples
+
class FooTest : XCTestCase {
+ func test1 () {}
+ internal func test2 () {}
+ public func test3 () {}
+}
+
+
internal class FooTest : XCTestCase {
+ func test1 () {}
+ internal func test2 () {}
+ public func test3 () {}
+}
+
+
public class FooTest : XCTestCase {
+ func test1 () {}
+ internal func test2 () {}
+ public func test3 () {}
+}
+
+
@objc private class FooTest : XCTestCase {
+ @objc private func test1 () {}
+ internal func test2 () {}
+ public func test3 () {}
+}
+
+
private class Foo : NSObject {
+ func test1 () {}
+ internal func test2 () {}
+ public func test3 () {}
+}
+
+
private class Foo {
+ func test1 () {}
+ internal func test2 () {}
+ public func test3 () {}
+}
+
+
public class FooTest : XCTestCase {
+ private func test1 ( param : Int ) {}
+ private func test2 () -> String { "" }
+ private func atest () {}
+ private static func test3 () {}
+}
+
+
Triggering Examples
+
private ↓ class FooTest : XCTestCase {
+ func test1 () {}
+ internal func test2 () {}
+ public func test3 () {}
+ private func test4 () {}
+}
+
+
class FooTest : XCTestCase {
+ func test1 () {}
+ internal func test2 () {}
+ public func test3 () {}
+ private ↓ func test4 () {}
+}
+
+
internal class FooTest : XCTestCase {
+ func test1 () {}
+ internal func test2 () {}
+ public func test3 () {}
+ private ↓ func test4 () {}
+}
+
+
public class FooTest : XCTestCase {
+ func test1 () {}
+ internal func test2 () {}
+ public func test3 () {}
+ private ↓ func test4 () {}
+}
+
+
+
+
+
+
+
+
+
+
+
diff --git a/prohibited_interface_builder.html b/prohibited_interface_builder.html
new file mode 100644
index 000000000..da5cd8b73
--- /dev/null
+++ b/prohibited_interface_builder.html
@@ -0,0 +1,360 @@
+
+
+
+
prohibited_interface_builder Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SwiftLintFramework Reference
+
+ prohibited_interface_builder Reference
+
+
+
+
+
+
+
+
+
+
+
+
Prohibited Interface Builder
+
+
Creating views using Interface Builder should be avoided.
+
+
+Identifier: prohibited_interface_builder
+Enabled by default: No
+Supports autocorrection: No
+Kind: lint
+Analyzer rule: No
+Minimum Swift compiler version: 5.0.0
+Default configuration: warning
+
+
Non Triggering Examples
+
class ViewController : UIViewController {
+ var label : UILabel !
+}
+
+
class ViewController : UIViewController {
+ @objc func buttonTapped ( _ sender : UIButton ) {}
+}
+
+
Triggering Examples
+
class ViewController : UIViewController {
+ @IBOutlet ↓ var label : UILabel !
+}
+
+
class ViewController : UIViewController {
+ @IBAction ↓ func buttonTapped ( _ sender : UIButton ) {}
+}
+
+
+
+
+
+
+
+
+
+
+
diff --git a/prohibited_super_call.html b/prohibited_super_call.html
new file mode 100644
index 000000000..ae9d72340
--- /dev/null
+++ b/prohibited_super_call.html
@@ -0,0 +1,393 @@
+
+
+
+
prohibited_super_call Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SwiftLintFramework Reference
+
+ prohibited_super_call Reference
+
+
+
+
+
+
+
+
+
+
+
+
Prohibited calls to super
+
+
Some methods should not call super
+
+
+Identifier: prohibited_super_call
+Enabled by default: No
+Supports autocorrection: No
+Kind: lint
+Analyzer rule: No
+Minimum Swift compiler version: 5.0.0
+Default configuration: warning, excluded: [[]], included: [[“*”]]
+
+
Non Triggering Examples
+
class VC : UIViewController {
+ override func loadView () {
+ }
+}
+
+
class NSView {
+ func updateLayer () {
+ self . method1 ()
+ }
+}
+
+
public class FileProviderExtension : NSFileProviderExtension {
+ override func providePlaceholder ( at url : URL , completionHandler : @escaping ( Error ?) -> Void ) {
+ guard let identifier = persistentIdentifierForItem ( at : url ) else {
+ completionHandler ( NSFileProviderError ( . noSuchItem ))
+ return
+ }
+ }
+}
+
+
Triggering Examples
+
class VC : UIViewController {
+ override func loadView () { ↓
+ super . loadView ()
+ }
+}
+
+
class VC : NSFileProviderExtension {
+ override func providePlaceholder ( at url : URL , completionHandler : @escaping ( Error ?) -> Void ) { ↓
+ self . method1 ()
+ super . providePlaceholder ( at : url , completionHandler : completionHandler )
+ }
+}
+
+
class VC : NSView {
+ override func updateLayer () { ↓
+ self . method1 ()
+ super . updateLayer ()
+ self . method2 ()
+ }
+}
+
+
class VC : NSView {
+ override func updateLayer () { ↓
+ defer {
+ super . updateLayer ()
+ }
+ }
+}
+
+
+
+
+
+
+
+
+
+
+
diff --git a/protocol_property_accessors_order.html b/protocol_property_accessors_order.html
new file mode 100644
index 000000000..564c10362
--- /dev/null
+++ b/protocol_property_accessors_order.html
@@ -0,0 +1,360 @@
+
+
+
+
protocol_property_accessors_order Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SwiftLintFramework Reference
+
+ protocol_property_accessors_order Reference
+
+
+
+
+
+
+
+
+
+
+
+
Protocol Property Accessors Order
+
+
When declaring properties in protocols, the order of accessors should be get set.
+
+
+Identifier: protocol_property_accessors_order
+Enabled by default: Yes
+Supports autocorrection: Yes
+Kind: style
+Analyzer rule: No
+Minimum Swift compiler version: 5.0.0
+Default configuration: warning
+
+
Non Triggering Examples
+
protocol Foo {
+ var bar : String { get set }
+ }
+
+
protocol Foo {
+ var bar : String { get }
+ }
+
+
protocol Foo {
+ var bar : String { set }
+ }
+
+
Triggering Examples
+
protocol Foo {
+ var bar : String { ↓ set get }
+ }
+
+
+
+
+
+
+
+
+
+
+
diff --git a/quick_discouraged_call.html b/quick_discouraged_call.html
new file mode 100644
index 000000000..07e7b7001
--- /dev/null
+++ b/quick_discouraged_call.html
@@ -0,0 +1,605 @@
+
+
+
+
quick_discouraged_call Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SwiftLintFramework Reference
+
+ quick_discouraged_call Reference
+
+
+
+
+
+
+
+
+
+
+
+
Quick Discouraged Call
+
+
Discouraged call inside ‘describe’ and/or ‘context’ block.
+
+
+Identifier: quick_discouraged_call
+Enabled by default: No
+Supports autocorrection: No
+Kind: lint
+Analyzer rule: No
+Minimum Swift compiler version: 5.0.0
+Default configuration: warning
+
+
Non Triggering Examples
+
class TotoTests : QuickSpec {
+ override func spec () {
+ describe ( "foo" ) {
+ beforeEach {
+ let foo = Foo ()
+ foo . toto ()
+ }
+ }
+ }
+}
+
+
class TotoTests : QuickSpec {
+ override func spec () {
+ describe ( "foo" ) {
+ beforeEach {
+ let foo = Foo ()
+ foo . toto ()
+ }
+ afterEach {
+ let foo = Foo ()
+ foo . toto ()
+ }
+ describe ( "bar" ) {
+ }
+ context ( "bar" ) {
+ }
+ it ( "bar" ) {
+ let foo = Foo ()
+ foo . toto ()
+ }
+ }
+ }
+}
+
+
class TotoTests : QuickSpec {
+ override func spec () {
+ describe ( "foo" ) {
+ itBehavesLike ( "bar" )
+ }
+ }
+}
+
+
class TotoTests : QuickSpec {
+ override func spec () {
+ describe ( "foo" ) {
+ it ( "does something" ) {
+ let foo = Foo ()
+ foo . toto ()
+ }
+ }
+ }
+}
+
+
class TotoTests : QuickSpec {
+ override func spec () {
+ context ( "foo" ) {
+ afterEach { toto . append ( foo ) }
+ }
+ }
+}
+
+
class TotoTests : QuickSpec {
+ override func spec () {
+ xcontext ( "foo" ) {
+ afterEach { toto . append ( foo ) }
+ }
+ }
+}
+
+
class TotoTests : QuickSpec {
+ override func spec () {
+ xdescribe ( "foo" ) {
+ afterEach { toto . append ( foo ) }
+ }
+ }
+}
+
+
class TotoTests : QuickSpec {
+ override func spec () {
+ describe ( "foo" ) {
+ xit ( "does something" ) {
+ let foo = Foo ()
+ foo . toto ()
+ }
+ }
+ }
+}
+
+
class TotoTests : QuickSpec {
+ override func spec () {
+ fcontext ( "foo" ) {
+ afterEach { toto . append ( foo ) }
+ }
+ }
+}
+
+
class TotoTests : QuickSpec {
+ override func spec () {
+ fdescribe ( "foo" ) {
+ afterEach { toto . append ( foo ) }
+ }
+ }
+}
+
+
class TotoTests : QuickSpec {
+ override func spec () {
+ describe ( "foo" ) {
+ fit ( "does something" ) {
+ let foo = Foo ()
+ foo . toto ()
+ }
+ }
+ }
+}
+
+
class TotoTests : QuickSpec {
+ override func spec () {
+ fitBehavesLike ( "foo" )
+ }
+}
+
+
class TotoTests : QuickSpec {
+ override func spec () {
+ xitBehavesLike ( "foo" )
+ }
+}
+
+
Triggering Examples
+
class TotoTests {
+ override func spec () {
+ describe ( "foo" ) {
+ let foo = Foo ()
+ }
+ }
+}
+class TotoTests : QuickSpec {
+ override func spec () {
+ describe ( "foo" ) {
+ let foo = ↓ Foo ()
+ }
+ }
+}
+
+
class TotoTests : QuickSpec {
+ override func spec () {
+ describe ( "foo" ) {
+ let foo = ↓ Foo ()
+ }
+ }
+}
+
+
class TotoTests : QuickSpec {
+ override func spec () {
+ describe ( "foo" ) {
+ context ( "foo" ) {
+ let foo = ↓ Foo ()
+ }
+ context ( "bar" ) {
+ let foo = ↓ Foo ()
+ ↓ foo . bar ()
+ it ( "does something" ) {
+ let foo = Foo ()
+ foo . toto ()
+ }
+ }
+ }
+ }
+}
+
+
class TotoTests : QuickSpec {
+ override func spec () {
+ describe ( "foo" ) {
+ context ( "foo" ) {
+ context ( "foo" ) {
+ beforeEach {
+ let foo = Foo ()
+ foo . toto ()
+ }
+ it ( "bar" ) {
+ }
+ context ( "foo" ) {
+ let foo = ↓ Foo ()
+ }
+ }
+ }
+ }
+ }
+}
+
+
class TotoTests : QuickSpec {
+ override func spec () {
+ context ( "foo" ) {
+ let foo = ↓ Foo ()
+ }
+ }
+}
+
+
class TotoTests : QuickSpec {
+ override func spec () {
+ sharedExamples ( "foo" ) {
+ let foo = ↓ Foo ()
+ }
+ }
+}
+
+
class TotoTests : QuickSpec {
+ override func spec () {
+ describe ( "foo" ) {
+ ↓ foo ()
+ }
+ }
+}
+
+
class TotoTests : QuickSpec {
+ override func spec () {
+ context ( "foo" ) {
+ ↓ foo ()
+ }
+ }
+}
+
+
class TotoTests : QuickSpec {
+ override func spec () {
+ sharedExamples ( "foo" ) {
+ ↓ foo ()
+ }
+ }
+}
+
+
class TotoTests : QuickSpec {
+ override func spec () {
+ xdescribe ( "foo" ) {
+ let foo = ↓ Foo ()
+ }
+ fdescribe ( "foo" ) {
+ let foo = ↓ Foo ()
+ }
+ }
+}
+
+
class TotoTests : QuickSpec {
+ override func spec () {
+ xcontext ( "foo" ) {
+ let foo = ↓ Foo ()
+ }
+ fcontext ( "foo" ) {
+ let foo = ↓ Foo ()
+ }
+ }
+}
+
+
class TotoTests : QuickSpecSubclass {
+ override func spec () {
+ xcontext ( "foo" ) {
+ let foo = ↓ Foo ()
+ }
+ fcontext ( "foo" ) {
+ let foo = ↓ Foo ()
+ }
+ }
+}
+
+
+
+
+
+
+
+
+
+
+
diff --git a/quick_discouraged_focused_test.html b/quick_discouraged_focused_test.html
new file mode 100644
index 000000000..5dc5fa0bb
--- /dev/null
+++ b/quick_discouraged_focused_test.html
@@ -0,0 +1,413 @@
+
+
+
+
quick_discouraged_focused_test Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SwiftLintFramework Reference
+
+ quick_discouraged_focused_test Reference
+
+
+
+
+
+
+
+
+
+
+
+
Quick Discouraged Focused Test
+
+
Discouraged focused test. Other tests won’t run while this one is focused.
+
+
+Identifier: quick_discouraged_focused_test
+Enabled by default: No
+Supports autocorrection: No
+Kind: lint
+Analyzer rule: No
+Minimum Swift compiler version: 5.0.0
+Default configuration: warning
+
+
Non Triggering Examples
+
class TotoTests : QuickSpec {
+ override func spec () {
+ describe ( "foo" ) {
+ describe ( "bar" ) { }
+ context ( "bar" ) {
+ it ( "bar" ) { }
+ }
+ it ( "bar" ) { }
+ itBehavesLike ( "bar" )
+ }
+ }
+}
+
+
Triggering Examples
+
class TotoTests : QuickSpec {
+ override func spec () {
+ ↓ fdescribe ( "foo" ) { }
+ }
+}
+
+
class TotoTests : QuickSpec {
+ override func spec () {
+ ↓ fcontext ( "foo" ) { }
+ }
+}
+
+
class TotoTests : QuickSpec {
+ override func spec () {
+ ↓ fit ( "foo" ) { }
+ }
+}
+
+
class TotoTests : QuickSpec {
+ override func spec () {
+ describe ( "foo" ) {
+ ↓ fit ( "bar" ) { }
+ }
+ }
+}
+
+
class TotoTests : QuickSpec {
+ override func spec () {
+ context ( "foo" ) {
+ ↓ fit ( "bar" ) { }
+ }
+ }
+}
+
+
class TotoTests : QuickSpec {
+ override func spec () {
+ describe ( "foo" ) {
+ context ( "bar" ) {
+ ↓ fit ( "toto" ) { }
+ }
+ }
+ }
+}
+
+
class TotoTests : QuickSpec {
+ override func spec () {
+ ↓ fitBehavesLike ( "foo" )
+ }
+}
+
+
class TotoTests : QuickSpecSubclass {
+ override func spec () {
+ ↓ fitBehavesLike ( "foo" )
+ }
+}
+
+
+
+
+
+
+
+
+
+
+
diff --git a/quick_discouraged_pending_test.html b/quick_discouraged_pending_test.html
new file mode 100644
index 000000000..f0d737bb1
--- /dev/null
+++ b/quick_discouraged_pending_test.html
@@ -0,0 +1,419 @@
+
+
+
+
quick_discouraged_pending_test Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SwiftLintFramework Reference
+
+ quick_discouraged_pending_test Reference
+
+
+
+
+
+
+
+
+
+
+
+
Quick Discouraged Pending Test
+
+
Discouraged pending test. This test won’t run while it’s marked as pending.
+
+
+Identifier: quick_discouraged_pending_test
+Enabled by default: No
+Supports autocorrection: No
+Kind: lint
+Analyzer rule: No
+Minimum Swift compiler version: 5.0.0
+Default configuration: warning
+
+
Non Triggering Examples
+
class TotoTests : QuickSpec {
+ override func spec () {
+ describe ( "foo" ) {
+ describe ( "bar" ) { }
+ context ( "bar" ) {
+ it ( "bar" ) { }
+ }
+ it ( "bar" ) { }
+ itBehavesLike ( "bar" )
+ }
+ }
+}
+
+
Triggering Examples
+
class TotoTests : QuickSpec {
+ override func spec () {
+ ↓ xdescribe ( "foo" ) { }
+ }
+}
+
+
class TotoTests : QuickSpec {
+ override func spec () {
+ ↓ xcontext ( "foo" ) { }
+ }
+}
+
+
class TotoTests : QuickSpec {
+ override func spec () {
+ ↓ xit ( "foo" ) { }
+ }
+}
+
+
class TotoTests : QuickSpec {
+ override func spec () {
+ describe ( "foo" ) {
+ ↓ xit ( "bar" ) { }
+ }
+ }
+}
+
+
class TotoTests : QuickSpec {
+ override func spec () {
+ context ( "foo" ) {
+ ↓ xit ( "bar" ) { }
+ }
+ }
+}
+
+
class TotoTests : QuickSpec {
+ override func spec () {
+ describe ( "foo" ) {
+ context ( "bar" ) {
+ ↓ xit ( "toto" ) { }
+ }
+ }
+ }
+}
+
+
class TotoTests : QuickSpec {
+ override func spec () {
+ ↓ pending ( "foo" )
+ }
+}
+
+
class TotoTests : QuickSpec {
+ override func spec () {
+ ↓ xitBehavesLike ( "foo" )
+ }
+}
+
+
class TotoTests : QuickSpecSubclass {
+ override func spec () {
+ ↓ xitBehavesLike ( "foo" )
+ }
+}
+
+
+
+
+
+
+
+
+
+
+
diff --git a/raw_value_for_camel_cased_codable_enum.html b/raw_value_for_camel_cased_codable_enum.html
new file mode 100644
index 000000000..27ddeed2f
--- /dev/null
+++ b/raw_value_for_camel_cased_codable_enum.html
@@ -0,0 +1,409 @@
+
+
+
+
raw_value_for_camel_cased_codable_enum Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SwiftLintFramework Reference
+
+ raw_value_for_camel_cased_codable_enum Reference
+
+
+
+
+
+
+
+
+
+
+
+
Raw Value For Camel Cased Codable Enum
+
+
Camel cased cases of Codable String enums should have raw value.
+
+
+Identifier: raw_value_for_camel_cased_codable_enum
+Enabled by default: No
+Supports autocorrection: No
+Kind: lint
+Analyzer rule: No
+Minimum Swift compiler version: 5.0.0
+Default configuration: warning
+
+
Non Triggering Examples
+
enum Numbers : Codable {
+ case int ( Int )
+ case short ( Int16 )
+}
+
+
enum Numbers : Int , Codable {
+ case one = 1
+ case two = 2
+}
+
+
enum Numbers : Double , Codable {
+ case one = 1.1
+ case two = 2.2
+}
+
+
enum Numbers : String , Codable {
+ case one = "one"
+ case two = "two"
+}
+
+
enum Status : String , Codable {
+ case OK , ACCEPTABLE
+}
+
+
enum Status : String , Codable {
+ case ok
+ case maybeAcceptable = "maybe_acceptable"
+}
+
+
enum Status : String {
+ case ok
+ case notAcceptable
+ case maybeAcceptable = "maybe_acceptable"
+}
+
+
enum Status : Int , Codable {
+ case ok
+ case notAcceptable
+ case maybeAcceptable = - 1
+}
+
+
Triggering Examples
+
enum Status : String , Codable {
+ case ok
+ case ↓ notAcceptable
+ case maybeAcceptable = "maybe_acceptable"
+}
+
+
enum Status : String , Decodable {
+ case ok
+ case ↓ notAcceptable
+ case maybeAcceptable = "maybe_acceptable"
+}
+
+
enum Status : String , Encodable {
+ case ok
+ case ↓ notAcceptable
+ case maybeAcceptable = "maybe_acceptable"
+}
+
+
enum Status : String , Codable {
+ case ok
+ case ↓ notAcceptable
+ case maybeAcceptable = "maybe_acceptable"
+}
+
+
+
+
+
+
+
+
+
+
+
diff --git a/reduce_boolean.html b/reduce_boolean.html
new file mode 100644
index 000000000..37b33544f
--- /dev/null
+++ b/reduce_boolean.html
@@ -0,0 +1,364 @@
+
+
+
+
reduce_boolean Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SwiftLintFramework Reference
+
+ reduce_boolean Reference
+
+
+
+
+
+
+
+
+
+
+
+
Reduce Boolean
+
+
Prefer using .allSatisfy() or .contains() over reduce(true) or reduce(false)
+
+
+Identifier: reduce_boolean
+Enabled by default: Yes
+Supports autocorrection: No
+Kind: performance
+Analyzer rule: No
+Minimum Swift compiler version: 5.0.0
+Default configuration: warning
+
+
Non Triggering Examples
+
nums . reduce ( 0 ) { $0 . 0 + $0 . 1 }
+
+
nums . reduce ( 0.0 ) { $0 . 0 + $0 . 1 }
+
+
Triggering Examples
+
let allNines = nums . ↓ reduce ( true ) { $0 . 0 && $0 . 1 == 9 }
+
+
let anyNines = nums . ↓ reduce ( false ) { $0 . 0 || $0 . 1 == 9 }
+
+
let allValid = validators . ↓ reduce ( true ) { $0 && $1 ( input ) }
+
+
let anyValid = validators . ↓ reduce ( false ) { $0 || $1 ( input ) }
+
+
let allNines = nums . ↓ reduce ( true , { $0 . 0 && $0 . 1 == 9 })
+
+
let anyNines = nums . ↓ reduce ( false , { $0 . 0 || $0 . 1 == 9 })
+
+
let allValid = validators . ↓ reduce ( true , { $0 && $1 ( input ) })
+
+
let anyValid = validators . ↓ reduce ( false , { $0 || $1 ( input ) })
+
+
+
+
+
+
+
+
+
+
+
diff --git a/reduce_into.html b/reduce_into.html
new file mode 100644
index 000000000..b5d30e3c3
--- /dev/null
+++ b/reduce_into.html
@@ -0,0 +1,419 @@
+
+
+
+
reduce_into Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SwiftLintFramework Reference
+
+ reduce_into Reference
+
+
+
+
+
+
+
+
+
+
+
+
Reduce Into
+
+
Prefer reduce(into:_:) over reduce(_:_:) for copy-on-write types
+
+
+Identifier: reduce_into
+Enabled by default: No
+Supports autocorrection: No
+Kind: performance
+Analyzer rule: No
+Minimum Swift compiler version: 5.0.0
+Default configuration: warning
+
+
Non Triggering Examples
+
let foo = values . reduce ( into : "abc" ) { $0 += " \( $1 ) " }
+
+
values . reduce ( into : Array < Int > ()) { result , value in
+ result . append ( value )
+}
+
+
let rows = violations . enumerated () . reduce ( into : "" ) { rows , indexAndViolation in
+ rows . append ( generateSingleRow ( for : indexAndViolation . 1 , at : indexAndViolation . 0 + 1 ))
+}
+
+
zip ( group , group . dropFirst ()) . reduce ( into : []) { result , pair in
+ result . append ( pair . 0 + pair . 1 )
+}
+
+
let foo = values . reduce ( into : [ String : Int ]()) { result , value in
+ result [ " \( value ) " ] = value
+}
+
+
let foo = values . reduce ( into : Dictionary < String , Int >. init ()) { result , value in
+ result [ " \( value ) " ] = value
+}
+
+
let foo = values . reduce ( into : [ Int ]( repeating : 0 , count : 10 )) { result , value in
+ result . append ( value )
+}
+
+
let foo = values . reduce ( MyClass ()) { result , value in
+ result . handleValue ( value )
+ return result
+}
+
+
Triggering Examples
+
let bar = values . ↓ reduce ( "abc" ) { $0 + " \( $1 ) " }
+
+
values . ↓ reduce ( Array < Int > ()) { result , value in
+ result += [ value ]
+}
+
+
[ 1 , 2 , 3 ] . ↓ reduce ( Set < Int > ()) { acc , value in
+ var result = acc
+ result . insert ( value )
+ return result
+}
+
+
let rows = violations . enumerated () . ↓ reduce ( "" ) { rows , indexAndViolation in
+ return rows + generateSingleRow ( for : indexAndViolation . 1 , at : indexAndViolation . 0 + 1 )
+}
+
+
zip ( group , group . dropFirst ()) . ↓ reduce ([]) { result , pair in
+ result + [ pair . 0 + pair . 1 ]
+}
+
+
let foo = values . ↓ reduce ([ String : Int ]()) { result , value in
+ var result = result
+ result [ " \( value ) " ] = value
+ return result
+}
+
+
let bar = values . ↓ reduce ( Dictionary < String , Int >. init ()) { result , value in
+ var result = result
+ result [ " \( value ) " ] = value
+ return result
+}
+
+
let bar = values . ↓ reduce ([ Int ]( repeating : 0 , count : 10 )) { result , value in
+ return result + [ value ]
+}
+
+
extension Data {
+ var hexString : String {
+ return ↓ reduce ( "" ) { ( output , byte ) -> String in
+ output + String ( format : "%02x" , byte )
+ }
+ }
+}
+
+
+
+
+
+
+
+
+
+
+
diff --git a/redundant_discardable_let.html b/redundant_discardable_let.html
new file mode 100644
index 000000000..3a86181a8
--- /dev/null
+++ b/redundant_discardable_let.html
@@ -0,0 +1,366 @@
+
+
+
+
redundant_discardable_let Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SwiftLintFramework Reference
+
+ redundant_discardable_let Reference
+
+
+
+
+
+
+
+
+
+
+
+
Redundant Discardable Let
+
+
Prefer _ = foo() over let _ = foo() when discarding a result from a function.
+
+
+Identifier: redundant_discardable_let
+Enabled by default: Yes
+Supports autocorrection: Yes
+Kind: style
+Analyzer rule: No
+Minimum Swift compiler version: 5.0.0
+Default configuration: warning
+
+
Non Triggering Examples
+
_ = foo ()
+
+
+
if let _ = foo () { }
+
+
+
guard let _ = foo () else { return }
+
+
+
let _ : ExplicitType = foo ()
+
+
while let _ = SplashStyle ( rawValue : maxValue ) { maxValue += 1 }
+
+
+
async let _ = await foo ()
+
+
Triggering Examples
+
↓ let _ = foo ()
+
+
+
if _ = foo () { ↓ let _ = bar () }
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/redundant_nil_coalescing.html b/redundant_nil_coalescing.html
new file mode 100644
index 000000000..cc9049cbe
--- /dev/null
+++ b/redundant_nil_coalescing.html
@@ -0,0 +1,350 @@
+
+
+
+
redundant_nil_coalescing Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SwiftLintFramework Reference
+
+ redundant_nil_coalescing Reference
+
+
+
+
+
+
+
+
+
+
+
+
Redundant Nil Coalescing
+
+
nil coalescing operator is only evaluated if the lhs is nil, coalescing operator with nil as rhs is redundant
+
+
+Identifier: redundant_nil_coalescing
+Enabled by default: No
+Supports autocorrection: Yes
+Kind: idiomatic
+Analyzer rule: No
+Minimum Swift compiler version: 5.0.0
+Default configuration: warning
+
+
Non Triggering Examples
+
var myVar : Int ?; myVar ?? 0
+
+
+
Triggering Examples
+
var myVar : Int ? = nil ; myVar ↓ ?? nil
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/redundant_objc_attribute.html b/redundant_objc_attribute.html
new file mode 100644
index 000000000..3b827dc9e
--- /dev/null
+++ b/redundant_objc_attribute.html
@@ -0,0 +1,485 @@
+
+
+
+
redundant_objc_attribute Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SwiftLintFramework Reference
+
+ redundant_objc_attribute Reference
+
+
+
+
+
+
+
+
+
+
+
+
Redundant @objc Attribute
+
+
Objective-C attribute (@objc) is redundant in declaration.
+
+
+Identifier: redundant_objc_attribute
+Enabled by default: Yes
+Supports autocorrection: Yes
+Kind: idiomatic
+Analyzer rule: No
+Minimum Swift compiler version: 5.0.0
+Default configuration: warning
+
+
Non Triggering Examples
+
@objc private var foo : String ? {}
+
+
@IBInspectable private var foo : String ? {}
+
+
@objc private func foo ( _ sender : Any ) {}
+
+
@IBAction private func foo ( _ sender : Any ) {}
+
+
@GKInspectable private var foo : String ! {}
+
+
private @GKInspectable var foo : String ! {}
+
+
@NSManaged var foo : String !
+
+
@objc @NSCopying var foo : String !
+
+
@objcMembers
+class Foo {
+ var bar : Any ?
+ @objc
+ class Bar {
+ @objc
+ var foo : Any ?
+ }
+}
+
+
@objc
+extension Foo {
+ var bar : Int {
+ return 0
+ }
+}
+
+
extension Foo {
+ @objc
+ var bar : Int { return 0 }
+}
+
+
@objc @IBDesignable
+extension Foo {
+ var bar : Int { return 0 }
+}
+
+
@IBDesignable
+extension Foo {
+ @objc
+ var bar : Int { return 0 }
+ var fooBar : Int { return 1 }
+}
+
+
@objcMembers
+class Foo : NSObject {
+ @objc
+ private var bar : Int {
+ return 0
+ }
+}
+
+
@objcMembers
+class Foo {
+ class Bar : NSObject {
+ @objc var foo : Any
+ }
+}
+
+
@objcMembers
+class Foo {
+ @objc class Bar {}
+}
+
+
extension BlockEditorSettings {
+ @objc ( addElementsObject :)
+ @NSManaged public func addToElements ( _ value : BlockEditorSettingElement )
+}
+
+
Triggering Examples
+
↓ @objc @IBInspectable private var foo : String ? {}
+
+
@IBInspectable ↓ @objc private var foo : String ? {}
+
+
↓ @objc @IBAction private func foo ( _ sender : Any ) {}
+
+
@IBAction ↓ @objc private func foo ( _ sender : Any ) {}
+
+
↓ @objc @GKInspectable private var foo : String ! {}
+
+
@GKInspectable ↓ @objc private var foo : String ! {}
+
+
↓ @objc @NSManaged private var foo : String !
+
+
@NSManaged ↓ @objc private var foo : String !
+
+
↓ @objc @IBDesignable class Foo {}
+
+
@objcMembers
+class Foo {
+ ↓ @objc var bar : Any ?
+}
+
+
@objcMembers
+class Foo {
+ ↓ @objc var bar : Any ?
+ ↓ @objc var foo : Any ?
+ @objc
+ class Bar {
+ @objc
+ var foo : Any ?
+ }
+}
+
+
@objc
+extension Foo {
+ ↓ @objc
+ var bar : Int {
+ return 0
+ }
+}
+
+
@objc @IBDesignable
+extension Foo {
+ ↓ @objc
+ var bar : Int {
+ return 0
+ }
+}
+
+
@objcMembers
+class Foo {
+ @objcMembers
+ class Bar : NSObject {
+ ↓ @objc var foo : Any
+ }
+}
+
+
@objc
+extension Foo {
+ ↓ @objc
+ private var bar : Int {
+ return 0
+ }
+}
+
+
+
+
+
+
+
+
+
+
+
diff --git a/redundant_optional_initialization.html b/redundant_optional_initialization.html
new file mode 100644
index 000000000..fb63628a6
--- /dev/null
+++ b/redundant_optional_initialization.html
@@ -0,0 +1,405 @@
+
+
+
+
redundant_optional_initialization Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SwiftLintFramework Reference
+
+ redundant_optional_initialization Reference
+
+
+
+
+
+
+
+
+
+
+
+
Redundant Optional Initialization
+
+
Initializing an optional variable with nil is redundant.
+
+
+Identifier: redundant_optional_initialization
+Enabled by default: Yes
+Supports autocorrection: Yes
+Kind: idiomatic
+Analyzer rule: No
+Minimum Swift compiler version: 5.0.0
+Default configuration: warning
+
+
Non Triggering Examples
+
var myVar : Int ?
+
+
+
let myVar : Int ? = nil
+
+
+
var myVar : Int ? = 0
+
+
+
func foo ( bar : Int ? = 0 ) { }
+
+
+
var myVar : Optional < Int >
+
+
+
let myVar : Optional < Int > = nil
+
+
+
var myVar : Optional < Int > = 0
+
+
+
var foo : Int ? {
+ if bar != nil { }
+ return 0
+}
+
+
var foo : Int ? = {
+ if bar != nil { }
+ return 0
+}()
+
+
lazy var test : Int ? = nil
+
+
func funcName () {
+ var myVar : String ?
+}
+
+
func funcName () {
+ let myVar : String ? = nil
+}
+
+
Triggering Examples
+
var myVar : Int ? ↓ = nil
+
+
+
var myVar : Optional < Int > ↓ = nil
+
+
+
var myVar : Int ? ↓ = nil
+
+
+
var myVar : Optional < Int > ↓ = nil
+)
+
+
var myVar : String ? ↓ = nil {
+ didSet { print ( "didSet" ) }
+}
+
+
func funcName () {
+ var myVar : String ? ↓ = nil
+}
+
+
+
+
+
+
+
+
+
+
+
diff --git a/redundant_set_access_control.html b/redundant_set_access_control.html
new file mode 100644
index 000000000..34cf1dd23
--- /dev/null
+++ b/redundant_set_access_control.html
@@ -0,0 +1,384 @@
+
+
+
+
redundant_set_access_control Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SwiftLintFramework Reference
+
+ redundant_set_access_control Reference
+
+
+
+
+
+
+
+
+
+
+
+
Redundant Set Access Control Rule
+
+
Property setter access level shouldn’t be explicit if it’s the same as the variable access level.
+
+
+Identifier: redundant_set_access_control
+Enabled by default: Yes
+Supports autocorrection: No
+Kind: idiomatic
+Analyzer rule: No
+Minimum Swift compiler version: 5.0.0
+Default configuration: warning
+
+
Non Triggering Examples
+
private(set) public var foo : Int
+
+
public let foo : Int
+
+
public var foo : Int
+
+
var foo : Int
+
+
private final class A {
+ private(set) var value : Int
+}
+
+
extension Color {
+ public internal(set) static var someColor = Color . anotherColor
+}
+
+
Triggering Examples
+
↓ private(set) private var foo : Int
+
+
↓ fileprivate ( set ) fileprivate var foo : Int
+
+
↓ internal(set) internal var foo : Int
+
+
↓ public ( set ) public var foo : Int
+
+
open class Foo {
+ ↓ open ( set ) open var bar : Int
+}
+
+
class A {
+ ↓ internal(set) var value : Int
+}
+
+
internal class A {
+ ↓ internal(set) var value : Int
+}
+
+
fileprivate class A {
+ ↓ fileprivate ( set ) var value : Int
+}
+
+
+
+
+
+
+
+
+
+
+
diff --git a/redundant_string_enum_value.html b/redundant_string_enum_value.html
new file mode 100644
index 000000000..b0a2924f9
--- /dev/null
+++ b/redundant_string_enum_value.html
@@ -0,0 +1,381 @@
+
+
+
+
redundant_string_enum_value Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SwiftLintFramework Reference
+
+ redundant_string_enum_value Reference
+
+
+
+
+
+
+
+
+
+
+
+
Redundant String Enum Value
+
+
String enum values can be omitted when they are equal to the enumcase name.
+
+
+Identifier: redundant_string_enum_value
+Enabled by default: Yes
+Supports autocorrection: No
+Kind: idiomatic
+Analyzer rule: No
+Minimum Swift compiler version: 5.0.0
+Default configuration: warning
+
+
Non Triggering Examples
+
enum Numbers : String {
+ case one
+ case two
+}
+
+
enum Numbers : Int {
+ case one = 1
+ case two = 2
+}
+
+
enum Numbers : String {
+ case one = "ONE"
+ case two = "TWO"
+}
+
+
enum Numbers : String {
+ case one = "ONE"
+ case two = "two"
+}
+
+
enum Numbers : String {
+ case one , two
+}
+
+
Triggering Examples
+
enum Numbers : String {
+ case one = ↓ "one"
+ case two = ↓ "two"
+}
+
+
enum Numbers : String {
+ case one = ↓ "one" , two = ↓ "two"
+}
+
+
enum Numbers : String {
+ case one , two = ↓ "two"
+}
+
+
+
+
+
+
+
+
+
+
+
diff --git a/redundant_type_annotation.html b/redundant_type_annotation.html
new file mode 100644
index 000000000..b224295d6
--- /dev/null
+++ b/redundant_type_annotation.html
@@ -0,0 +1,391 @@
+
+
+
+
redundant_type_annotation Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SwiftLintFramework Reference
+
+ redundant_type_annotation Reference
+
+
+
+
+
+
+
+
+
+
+
+
Redundant Type Annotation
+
+
Variables should not have redundant type annotation
+
+
+Identifier: redundant_type_annotation
+Enabled by default: No
+Supports autocorrection: Yes
+Kind: idiomatic
+Analyzer rule: No
+Minimum Swift compiler version: 5.0.0
+Default configuration: warning
+
+
Non Triggering Examples
+
var url = URL ()
+
+
var url : CustomStringConvertible = URL ()
+
+
@IBInspectable var color : UIColor = UIColor . white
+
+
enum Direction {
+ case up
+ case down
+}
+
+var direction : Direction = . up
+
+
enum Direction {
+ case up
+ case down
+}
+
+var direction = Direction . up
+
+
Triggering Examples
+
var url ↓ : URL = URL ()
+
+
var url ↓ : URL = URL ( string : "" )
+
+
var url ↓ : URL = URL ()
+
+
let url ↓ : URL = URL ()
+
+
lazy var url ↓ : URL = URL ()
+
+
let alphanumerics ↓ : CharacterSet = CharacterSet . alphanumerics
+
+
class ViewController : UIViewController {
+ func someMethod () {
+ let myVar ↓ : Int = Int ( 5 )
+ }
+}
+
+
var isEnabled ↓ : Bool = true
+
+
enum Direction {
+ case up
+ case down
+}
+
+var direction ↓ : Direction = Direction . up
+
+
+
+
+
+
+
+
+
+
+
diff --git a/redundant_void_return.html b/redundant_void_return.html
new file mode 100644
index 000000000..1a403ad91
--- /dev/null
+++ b/redundant_void_return.html
@@ -0,0 +1,399 @@
+
+
+
+
redundant_void_return Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SwiftLintFramework Reference
+
+ redundant_void_return Reference
+
+
+
+
+
+
+
+
+
+
+
+
Redundant Void Return
+
+
Returning Void in a function declaration is redundant.
+
+
+Identifier: redundant_void_return
+Enabled by default: Yes
+Supports autocorrection: Yes
+Kind: idiomatic
+Analyzer rule: No
+Minimum Swift compiler version: 5.0.0
+Default configuration: warning
+
+
Non Triggering Examples
+
func foo () {}
+
+
+
func foo () -> Int {}
+
+
+
func foo () -> Int -> Void {}
+
+
+
func foo () -> VoidResponse
+
+
+
let foo : ( Int ) -> Void
+
+
+
func foo () -> Int -> () {}
+
+
+
let foo : ( Int ) -> ()
+
+
+
func foo () -> ()?
+
+
+
func foo () -> () !
+
+
+
func foo () -> Void ?
+
+
+
func foo () -> Void !
+
+
+
struct A {
+ subscript ( key : String ) {
+ print ( key )
+ }
+}
+
+
Triggering Examples
+
func foo () ↓ -> Void {}
+
+
+
protocol Foo {
+ func foo () ↓ -> Void
+}
+
+
func foo () ↓ -> () {}
+
+
+
func foo () ↓ -> ( ) {}
+
+
protocol Foo {
+ func foo () ↓ -> ()
+}
+
+
+
+
+
+
+
+
+
+
+
diff --git a/required_deinit.html b/required_deinit.html
new file mode 100644
index 000000000..01750d33c
--- /dev/null
+++ b/required_deinit.html
@@ -0,0 +1,389 @@
+
+
+
+
required_deinit Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SwiftLintFramework Reference
+
+ required_deinit Reference
+
+
+
+
+
+
+
+
+
+
+
+
Required Deinit
+
+
Classes should have an explicit deinit method.
+
+
+Identifier: required_deinit
+Enabled by default: No
+Supports autocorrection: No
+Kind: lint
+Analyzer rule: No
+Minimum Swift compiler version: 5.0.0
+Default configuration: warning
+
+
Non Triggering Examples
+
class Apple {
+ deinit { }
+}
+
+
enum Banana { }
+
+
protocol Cherry { }
+
+
struct Damson { }
+
+
class Outer {
+ deinit { print ( "Deinit Outer" ) }
+ class Inner {
+ deinit { print ( "Deinit Inner" ) }
+ }
+}
+
+
Triggering Examples
+
↓ class Apple { }
+
+
↓ class Banana : NSObject , Equatable { }
+
+
↓ class Cherry {
+ // deinit { }
+}
+
+
↓ class Damson {
+ func deinitialize () { }
+}
+
+
class Outer {
+ func hello () -> String { return "outer" }
+ deinit { }
+ ↓ class Inner {
+ func hello () -> String { return "inner" }
+ }
+}
+
+
↓ class Outer {
+ func hello () -> String { return "outer" }
+ class Inner {
+ func hello () -> String { return "inner" }
+ deinit { }
+ }
+}
+
+
+
+
+
+
+
+
+
+
+
diff --git a/required_enum_case.html b/required_enum_case.html
new file mode 100644
index 000000000..46e33205d
--- /dev/null
+++ b/required_enum_case.html
@@ -0,0 +1,387 @@
+
+
+
+
required_enum_case Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SwiftLintFramework Reference
+
+ required_enum_case Reference
+
+
+
+
+
+
+
+
+
+
+
+
Required Enum Case
+
+
Enums conforming to a specified protocol must implement a specific case(s).
+
+
+Identifier: required_enum_case
+Enabled by default: No
+Supports autocorrection: No
+Kind: lint
+Analyzer rule: No
+Minimum Swift compiler version: 5.0.0
+Default configuration: No protocols configured. In config add ‘required_enum_case’ to ‘opt_in_rules’ and config using :
+
+
+
‘required_enum_case:
+ {Protocol Name}:
+ {Case Name}:{warning|error}
+ {Case Name}:{warning|error}
+
Non Triggering Examples
+
enum MyNetworkResponse : String , NetworkResponsable {
+ case success , error , notConnected
+}
+
+
enum MyNetworkResponse : String , NetworkResponsable {
+ case success , error , notConnected ( error : Error )
+}
+
+
enum MyNetworkResponse : String , NetworkResponsable {
+ case success
+ case error
+ case notConnected
+}
+
+
enum MyNetworkResponse : String , NetworkResponsable {
+ case success
+ case error
+ case notConnected ( error : Error )
+}
+
+
Triggering Examples
+
↓ enum MyNetworkResponse : String , NetworkResponsable {
+ case success , error
+}
+
+
↓ enum MyNetworkResponse : String , NetworkResponsable {
+ case success , error
+}
+
+
↓ enum MyNetworkResponse : String , NetworkResponsable {
+ case success
+ case error
+}
+
+
↓ enum MyNetworkResponse : String , NetworkResponsable {
+ case success
+ case error
+}
+
+
+
+
+
+
+
+
+
+
+
diff --git a/return_arrow_whitespace.html b/return_arrow_whitespace.html
new file mode 100644
index 000000000..89f91941a
--- /dev/null
+++ b/return_arrow_whitespace.html
@@ -0,0 +1,416 @@
+
+
+
+
return_arrow_whitespace Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SwiftLintFramework Reference
+
+ return_arrow_whitespace Reference
+
+
+
+
+
+
+
+
+
+
+
+
Returning Whitespace
+
+
Return arrow and return type should be separated by a single space or on a separate line.
+
+
+Identifier: return_arrow_whitespace
+Enabled by default: Yes
+Supports autocorrection: Yes
+Kind: style
+Analyzer rule: No
+Minimum Swift compiler version: 5.0.0
+Default configuration: warning
+
+
Non Triggering Examples
+
func abc () -> Int {}
+
+
+
func abc () -> [ Int ] {}
+
+
+
func abc () -> ( Int , Int ) {}
+
+
+
var abc = {( param : Int ) -> Void in }
+
+
+
func abc () ->
+ Int {}
+
+
+
func abc ()
+ -> Int {}
+
+
+
func reallyLongFunctionMethods < T > ( withParam1 : Int , param2 : String , param3 : Bool ) where T : AGenericConstraint
+ -> Int {
+ return 1
+}
+
+
typealias SuccessBlock = (( Data ) -> Void )
+
+
Triggering Examples
+
func abc () ↓ -> Int {}
+
+
+
func abc () ↓ -> [ Int ] {}
+
+
+
func abc () ↓ -> ( Int , Int ) {}
+
+
+
func abc () ↓ -> Int {}
+
+
+
func abc () ↓ -> Int {}
+
+
+
func abc () ↓ -> Int {}
+
+
+
func abc () ↓ -> Int {}
+
+
+
var abc = {( param : Int ) ↓ -> Bool in }
+
+
+
var abc = {( param : Int ) ↓ -> Bool in }
+
+
+
typealias SuccessBlock = (( Data ) ↓ -> Void )
+
+
func abc ()
+ ↓ -> Int {}
+
+
+
func abc ()
+ ↓ -> Int {}
+
+
+
func abc () ↓ ->
+ Int {}
+
+
+
func abc () ↓ ->
+Int {}
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/return_value_from_void_function.html b/return_value_from_void_function.html
new file mode 100644
index 000000000..c29b05c2f
--- /dev/null
+++ b/return_value_from_void_function.html
@@ -0,0 +1,540 @@
+
+
+
+
return_value_from_void_function Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SwiftLintFramework Reference
+
+ return_value_from_void_function Reference
+
+
+
+
+
+
+
+
+
+
+
+
Return Value from Void Function
+
+
Returning values from Void functions should be avoided.
+
+
+Identifier: return_value_from_void_function
+Enabled by default: No
+Supports autocorrection: No
+Kind: idiomatic
+Analyzer rule: No
+Minimum Swift compiler version: 5.1.0
+Default configuration: warning
+
+
Non Triggering Examples
+
func foo () {
+ return
+}
+
+
func foo () {
+ return /* a comment */
+}
+
+
func foo () -> Int {
+ return 1
+}
+
+
func foo () -> Void {
+ if condition {
+ return
+ }
+ bar ()
+}
+
+
func foo () {
+ return ;
+ bar ()
+}
+
+
func test () {}
+
+
init ?() {
+ guard condition else {
+ return nil
+ }
+}
+
+
init ?( arg : String ?) {
+ guard arg != nil else {
+ return nil
+ }
+}
+
+
func test () {
+ guard condition else {
+ return
+ }
+}
+
+
func test () -> Result < String , Error > {
+ func other () {}
+ func otherVoid () -> Void {}
+}
+
+
func test () -> Int ? {
+ return nil
+}
+
+
func test () {
+ if bar {
+ print ( "" )
+ return
+ }
+ let foo = [ 1 , 2 , 3 ] . filter { return true }
+ return
+}
+
+
func test () {
+ guard foo else {
+ bar ()
+ return
+ }
+}
+
+
func spec () {
+ var foo : Int {
+ return 0
+ }
+
+
Triggering Examples
+
func foo () {
+ ↓ return bar ()
+}
+
+
func foo () {
+ ↓ return self . bar ()
+}
+
+
func foo () -> Void {
+ ↓ return bar ()
+}
+
+
func foo () -> Void {
+ ↓ return /* comment */ bar ()
+}
+
+
func foo () {
+ ↓ return
+ self . bar ()
+}
+
+
func foo () {
+ variable += 1
+ ↓ return
+ variable += 1
+}
+
+
func initThing () {
+ guard foo else {
+ ↓ return print ( "" )
+ }
+}
+
+
// Leading comment
+func test () {
+ guard condition else {
+ ↓ return assertionfailure ( "" )
+ }
+}
+
+
func test () -> Result < String , Error > {
+ func other () {
+ guard false else {
+ ↓ return assertionfailure ( "" )
+ }
+ }
+ func otherVoid () -> Void {}
+}
+
+
func test () {
+ guard conditionIsTrue else {
+ sideEffects ()
+ return // comment
+ }
+ guard otherCondition else {
+ ↓ return assertionfailure ( "" )
+ }
+ differentSideEffect ()
+}
+
+
func test () {
+ guard otherCondition else {
+ ↓ return assertionfailure ( "" ); // comment
+ }
+ differentSideEffect ()
+}
+
+
func test () {
+ if x {
+ ↓ return foo ()
+ }
+ bar ()
+}
+
+
func test () {
+ switch x {
+ case . a :
+ ↓ return foo () // return to skip baz()
+ case . b :
+ bar ()
+ }
+ baz ()
+}
+
+
func test () {
+ if check {
+ if otherCheck {
+ ↓ return foo ()
+ }
+ }
+ bar ()
+}
+
+
func test () {
+ ↓ return foo ()
+}
+
+
func test () {
+ ↓ return foo ({
+ return bar ()
+ })
+}
+
+
func test () {
+ guard x else {
+ ↓ return foo ()
+ }
+ bar ()
+}
+
+
func test () {
+ let closure : () -> () = {
+ return assert ()
+ }
+ if check {
+ if otherCheck {
+ return // comments are fine
+ }
+ }
+ ↓ return foo ()
+}
+
+
+
+
+
+
+
+
+
+
+
diff --git a/rule-directory.html b/rule-directory.html
new file mode 100644
index 000000000..751783307
--- /dev/null
+++ b/rule-directory.html
@@ -0,0 +1,558 @@
+
+
+
+
Rule Directory Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SwiftLintFramework Reference
+
+ Rule Directory Reference
+
+
+
+
+
+
+
+
+
+
+
+
Rule Directory
+
Default Rules
+
+
+
Opt-In Rules
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/search.json b/search.json
new file mode 100644
index 000000000..121c413a2
--- /dev/null
+++ b/search.json
@@ -0,0 +1 @@
+{"Structs/XcodeReporter.html#/s:18SwiftLintFramework8ReporterP10identifierSSvpZ":{"name":"identifier","parent_name":"XcodeReporter"},"Structs/XcodeReporter.html#/s:18SwiftLintFramework8ReporterP10isRealtimeSbvpZ":{"name":"isRealtime","parent_name":"XcodeReporter"},"Structs/XcodeReporter.html#/s:s23CustomStringConvertibleP11descriptionSSvp":{"name":"description","parent_name":"XcodeReporter"},"Structs/XcodeReporter.html#/s:18SwiftLintFramework8ReporterP14generateReportySSSayAA14StyleViolationVGFZ":{"name":"generateReport(_:)","parent_name":"XcodeReporter"},"Structs/SonarQubeReporter.html#/s:18SwiftLintFramework8ReporterP10identifierSSvpZ":{"name":"identifier","parent_name":"SonarQubeReporter"},"Structs/SonarQubeReporter.html#/s:18SwiftLintFramework8ReporterP10isRealtimeSbvpZ":{"name":"isRealtime","parent_name":"SonarQubeReporter"},"Structs/SonarQubeReporter.html#/s:s23CustomStringConvertibleP11descriptionSSvp":{"name":"description","parent_name":"SonarQubeReporter"},"Structs/SonarQubeReporter.html#/s:18SwiftLintFramework8ReporterP14generateReportySSSayAA14StyleViolationVGFZ":{"name":"generateReport(_:)","parent_name":"SonarQubeReporter"},"Structs/GitLabJUnitReporter.html#/s:18SwiftLintFramework8ReporterP10identifierSSvpZ":{"name":"identifier","parent_name":"GitLabJUnitReporter"},"Structs/GitLabJUnitReporter.html#/s:18SwiftLintFramework8ReporterP10isRealtimeSbvpZ":{"name":"isRealtime","parent_name":"GitLabJUnitReporter"},"Structs/GitLabJUnitReporter.html#/s:s23CustomStringConvertibleP11descriptionSSvp":{"name":"description","parent_name":"GitLabJUnitReporter"},"Structs/GitLabJUnitReporter.html#/s:18SwiftLintFramework8ReporterP14generateReportySSSayAA14StyleViolationVGFZ":{"name":"generateReport(_:)","parent_name":"GitLabJUnitReporter"},"Structs/ReasonedRuleViolation.html#/s:18SwiftLintFramework21ReasonedRuleViolationV8position0A6Syntax16AbsolutePositionVvp":{"name":"position","abstract":"
The violation’s position.
","parent_name":"ReasonedRuleViolation"},"Structs/ReasonedRuleViolation.html#/s:18SwiftLintFramework21ReasonedRuleViolationV6reasonSSSgvp":{"name":"reason","abstract":"
A specific reason for the violation.
","parent_name":"ReasonedRuleViolation"},"Structs/ReasonedRuleViolation.html#/s:18SwiftLintFramework21ReasonedRuleViolationV8severityAA0F8SeverityOSgvp":{"name":"severity","abstract":"
The violation’s severity.
","parent_name":"ReasonedRuleViolation"},"Structs/ReasonedRuleViolation.html#/s:18SwiftLintFramework21ReasonedRuleViolationV8position6reason8severityAC0A6Syntax16AbsolutePositionV_SSSgAA0F8SeverityOSgtcfc":{"name":"init(position:reason:severity:)","abstract":"
Creates a ReasonedRuleViolation.
","parent_name":"ReasonedRuleViolation"},"Structs/ReasonedRuleViolation.html#/s:SL1loiySbx_xtFZ":{"name":"<(_:_:)","parent_name":"ReasonedRuleViolation"},"Structs/YamlParser.html#/s:18SwiftLintFramework10YamlParserV5parse_3envSDySSypGSS_SDyS2SGtKFZ":{"name":"parse(_:env:)","abstract":"
Parses the input YAML string as an untyped dictionary.
","parent_name":"YamlParser"},"Structs/Version.html#/s:18SwiftLintFramework7VersionV5valueSSvp":{"name":"value","abstract":"
The string value for this version.
","parent_name":"Version"},"Structs/Version.html#/s:18SwiftLintFramework7VersionV7currentACvpZ":{"name":"current","abstract":"
The current SwiftLint version.
","parent_name":"Version"},"Structs/SwiftVersion.html#/s:SY8RawValueQa":{"name":"RawValue","parent_name":"SwiftVersion"},"Structs/SwiftVersion.html#/s:SY8rawValue03RawB0Qzvp":{"name":"rawValue","parent_name":"SwiftVersion"},"Structs/SwiftVersion.html#/s:SY8rawValuexSg03RawB0Qz_tcfc":{"name":"init(rawValue:)","parent_name":"SwiftVersion"},"Structs/SwiftVersion.html#/s:SL1loiySbx_xtFZ":{"name":"<(_:_:)","parent_name":"SwiftVersion"},"Structs/SwiftVersion.html#/s:18SwiftLintFramework0A7VersionV4fiveACvpZ":{"name":"five","abstract":"
Swift 5.0.x - https://swift.org/download/#swift-50
","parent_name":"SwiftVersion"},"Structs/SwiftVersion.html#/s:18SwiftLintFramework0A7VersionV10fiveDotOneACvpZ":{"name":"fiveDotOne","abstract":"
Swift 5.1.x - https://swift.org/download/#swift-51
","parent_name":"SwiftVersion"},"Structs/SwiftVersion.html#/s:18SwiftLintFramework0A7VersionV10fiveDotTwoACvpZ":{"name":"fiveDotTwo","abstract":"
Swift 5.2.x - https://swift.org/download/#swift-52
","parent_name":"SwiftVersion"},"Structs/SwiftVersion.html#/s:18SwiftLintFramework0A7VersionV12fiveDotThreeACvpZ":{"name":"fiveDotThree","abstract":"
Swift 5.3.x - https://swift.org/download/#swift-53
","parent_name":"SwiftVersion"},"Structs/SwiftVersion.html#/s:18SwiftLintFramework0A7VersionV11fiveDotFourACvpZ":{"name":"fiveDotFour","abstract":"
Swift 5.4.x - https://swift.org/download/#swift-54
","parent_name":"SwiftVersion"},"Structs/SwiftVersion.html#/s:18SwiftLintFramework0A7VersionV11fiveDotFiveACvpZ":{"name":"fiveDotFive","abstract":"
Swift 5.5.x - https://swift.org/download/#swift-55
","parent_name":"SwiftVersion"},"Structs/SwiftVersion.html#/s:18SwiftLintFramework0A7VersionV10fiveDotSixACvpZ":{"name":"fiveDotSix","abstract":"
Swift 5.6.x - https://swift.org/download/#swift-56
","parent_name":"SwiftVersion"},"Structs/SwiftVersion.html#/s:18SwiftLintFramework0A7VersionV12fiveDotSevenACvpZ":{"name":"fiveDotSeven","abstract":"
Swift 5.7.x - https://swift.org/download/#swift-57
","parent_name":"SwiftVersion"},"Structs/SwiftVersion.html#/s:18SwiftLintFramework0A7VersionV7currentACvpZ":{"name":"current","abstract":"
The current detected Swift compiler version, based on the currently accessible SourceKit version.
","parent_name":"SwiftVersion"},"Structs/SwiftLintSyntaxToken.html#/s:18SwiftLintFramework0aB11SyntaxTokenV5value012SourceKittenC00dE0Vvp":{"name":"value","abstract":"
The raw SyntaxToken obtained by SourceKitten.
","parent_name":"SwiftLintSyntaxToken"},"Structs/SwiftLintSyntaxToken.html#/s:18SwiftLintFramework0aB11SyntaxTokenV4kind012SourceKittenC00D4KindOSgvp":{"name":"kind","abstract":"
The syntax kind associated with is token.
","parent_name":"SwiftLintSyntaxToken"},"Structs/SwiftLintSyntaxToken.html#/s:18SwiftLintFramework0aB11SyntaxTokenV5valueAC012SourceKittenC00dE0V_tcfc":{"name":"init(value:)","abstract":"
Creates a SwiftLintSyntaxToken from the raw SyntaxToken obtained by SourceKitten.
","parent_name":"SwiftLintSyntaxToken"},"Structs/SwiftLintSyntaxToken.html#/s:18SwiftLintFramework0aB11SyntaxTokenV5range012SourceKittenC09ByteRangeVvp":{"name":"range","abstract":"
The byte range in a source file for this token.
","parent_name":"SwiftLintSyntaxToken"},"Structs/SwiftLintSyntaxToken.html#/s:18SwiftLintFramework0aB11SyntaxTokenV6offset012SourceKittenC09ByteCountVvp":{"name":"offset","abstract":"
The starting byte offset in a source file for this token.
","parent_name":"SwiftLintSyntaxToken"},"Structs/SwiftLintSyntaxToken.html#/s:18SwiftLintFramework0aB11SyntaxTokenV6length012SourceKittenC09ByteCountVvp":{"name":"length","abstract":"
The length in bytes for this token.
","parent_name":"SwiftLintSyntaxToken"},"Structs/SwiftLintSyntaxMap.html#/s:18SwiftLintFramework0aB9SyntaxMapV5value012SourceKittenC00dE0Vvp":{"name":"value","abstract":"
The raw SyntaxMap obtained by SourceKitten.
","parent_name":"SwiftLintSyntaxMap"},"Structs/SwiftLintSyntaxMap.html#/s:18SwiftLintFramework0aB9SyntaxMapV6tokensSayAA0abD5TokenVGvp":{"name":"tokens","abstract":"
The SwiftLint-specific syntax tokens for this syntax map.
","parent_name":"SwiftLintSyntaxMap"},"Structs/SwiftLintSyntaxMap.html#/s:18SwiftLintFramework0aB9SyntaxMapV5valueAC012SourceKittenC00dE0V_tcfc":{"name":"init(value:)","abstract":"
Creates a SwiftLintSyntaxMap from the raw SyntaxMap obtained by SourceKitten.
","parent_name":"SwiftLintSyntaxMap"},"Structs/StyleViolation.html#/s:18SwiftLintFramework14StyleViolationV14ruleIdentifierSSvp":{"name":"ruleIdentifier","abstract":"
The identifier of the rule that generated this violation.
","parent_name":"StyleViolation"},"Structs/StyleViolation.html#/s:18SwiftLintFramework14StyleViolationV15ruleDescriptionSSvp":{"name":"ruleDescription","abstract":"
The description of the rule that generated this violation.
","parent_name":"StyleViolation"},"Structs/StyleViolation.html#/s:18SwiftLintFramework14StyleViolationV8ruleNameSSvp":{"name":"ruleName","abstract":"
The name of the rule that generated this violation.
","parent_name":"StyleViolation"},"Structs/StyleViolation.html#/s:18SwiftLintFramework14StyleViolationV8severityAA0E8SeverityOvp":{"name":"severity","abstract":"
The severity of this violation.
","parent_name":"StyleViolation"},"Structs/StyleViolation.html#/s:18SwiftLintFramework14StyleViolationV8locationAA8LocationVvp":{"name":"location","abstract":"
The location of this violation.
","parent_name":"StyleViolation"},"Structs/StyleViolation.html#/s:18SwiftLintFramework14StyleViolationV6reasonSSvp":{"name":"reason","abstract":"
The justification for this violation.
","parent_name":"StyleViolation"},"Structs/StyleViolation.html#/s:18SwiftLintFramework14StyleViolationV11descriptionSSvp":{"name":"description","abstract":"
A printable description for this violation.
","parent_name":"StyleViolation"},"Structs/StyleViolation.html#/s:18SwiftLintFramework14StyleViolationV15ruleDescription8severity8location6reasonAcA04RuleG0V_AA0E8SeverityOAA8LocationVSSSgtcfc":{"name":"init(ruleDescription:severity:location:reason:)","abstract":"
Creates a StyleViolation by specifying its properties directly.
","parent_name":"StyleViolation"},"Structs/StyleViolation.html#/s:18SwiftLintFramework14StyleViolationV4with8severityAcA0E8SeverityO_tF":{"name":"with(severity:)","abstract":"
Returns the same violation, but with the severity that is passed in
","parent_name":"StyleViolation"},"Structs/StyleViolation.html#/s:18SwiftLintFramework14StyleViolationV4with8locationAcA8LocationV_tF":{"name":"with(location:)","abstract":"
Returns the same violation, but with the location that is passed in
","parent_name":"StyleViolation"},"Structs/RuleParameter.html#/s:18SwiftLintFramework13RuleParameterV8severityAA17ViolationSeverityOvp":{"name":"severity","abstract":"
The severity that should be assigned to the violation of this parameter’s value is met.
","parent_name":"RuleParameter"},"Structs/RuleParameter.html#/s:18SwiftLintFramework13RuleParameterV5valuexvp":{"name":"value","abstract":"
The value to configure the rule.
","parent_name":"RuleParameter"},"Structs/RuleParameter.html#/s:18SwiftLintFramework13RuleParameterV8severity5valueACyxGAA17ViolationSeverityO_xtcfc":{"name":"init(severity:value:)","abstract":"
Creates a RuleParameter by specifying its properties directly.
","parent_name":"RuleParameter"},"Structs/RuleList.html#/s:18SwiftLintFramework8RuleListV4listSDySSAA0D0_pXpGvp":{"name":"list","abstract":"
The rules contained in this list.
","parent_name":"RuleList"},"Structs/RuleList.html#/s:18SwiftLintFramework8RuleListV5rulesAcA0D0_pXpd_tcfc":{"name":"init(rules:)","abstract":"
Creates a RuleList by specifying all its rules.
","parent_name":"RuleList"},"Structs/RuleList.html#/s:18SwiftLintFramework8RuleListV5rulesACSayAA0D0_pXpG_tcfc":{"name":"init(rules:)","abstract":"
Creates a RuleList by specifying all its rules.
","parent_name":"RuleList"},"Structs/RuleList.html#/s:SQ2eeoiySbx_xtFZ":{"name":"==(_:_:)","parent_name":"RuleList"},"Structs/RuleDescription.html#/s:18SwiftLintFramework15RuleDescriptionV10identifierSSvp":{"name":"identifier","abstract":"
The rule’s unique identifier, to be used in configuration files and SwiftLint commands.","parent_name":"RuleDescription"},"Structs/RuleDescription.html#/s:18SwiftLintFramework15RuleDescriptionV4nameSSvp":{"name":"name","abstract":"
The rule’s human-readable name. Should be short, descriptive and formatted in Title Case. May contain spaces.
","parent_name":"RuleDescription"},"Structs/RuleDescription.html#/s:18SwiftLintFramework15RuleDescriptionV11descriptionSSvp":{"name":"description","abstract":"
The rule’s verbose description. Should read as a sentence or short paragraph. Good things to include are an","parent_name":"RuleDescription"},"Structs/RuleDescription.html#/s:18SwiftLintFramework15RuleDescriptionV4kindAA0D4KindOvp":{"name":"kind","abstract":"
The RuleKind that best categorizes this rule.
","parent_name":"RuleDescription"},"Structs/RuleDescription.html#/s:18SwiftLintFramework15RuleDescriptionV21nonTriggeringExamplesSayAA7ExampleVGvp":{"name":"nonTriggeringExamples","abstract":"
Swift source examples that do not trigger a violation for this rule. Used for documentation purposes to inform","parent_name":"RuleDescription"},"Structs/RuleDescription.html#/s:18SwiftLintFramework15RuleDescriptionV18triggeringExamplesSayAA7ExampleVGvp":{"name":"triggeringExamples","abstract":"
Swift source examples that do trigger one or more violations for this rule. Used for documentation purposes to","parent_name":"RuleDescription"},"Structs/RuleDescription.html#/s:18SwiftLintFramework15RuleDescriptionV11correctionsSDyAA7ExampleVAFGvp":{"name":"corrections","abstract":"
Pairs of Swift source examples, where keys are examples that trigger violations for this rule, and the values","parent_name":"RuleDescription"},"Structs/RuleDescription.html#/s:18SwiftLintFramework15RuleDescriptionV17deprecatedAliasesShySSGvp":{"name":"deprecatedAliases","abstract":"
Any previous iteration of the rule’s identifier that was previously shipped with SwiftLint.
","parent_name":"RuleDescription"},"Structs/RuleDescription.html#/s:18SwiftLintFramework15RuleDescriptionV03minA7VersionAA0aG0Vvp":{"name":"minSwiftVersion","abstract":"
The oldest version of the Swift compiler supported by this rule.
","parent_name":"RuleDescription"},"Structs/RuleDescription.html#/s:18SwiftLintFramework15RuleDescriptionV18requiresFileOnDiskSbvp":{"name":"requiresFileOnDisk","abstract":"
Whether or not this rule can only be executed on a file physically on-disk. Typically necessary for rules","parent_name":"RuleDescription"},"Structs/RuleDescription.html#/s:18SwiftLintFramework15RuleDescriptionV07consoleE0SSvp":{"name":"consoleDescription","abstract":"
The console-printable string for this description.
","parent_name":"RuleDescription"},"Structs/RuleDescription.html#/s:18SwiftLintFramework15RuleDescriptionV14allIdentifiersSaySSGvp":{"name":"allIdentifiers","abstract":"
All identifiers that have been used to uniquely identify this rule in past and current SwiftLint versions.
","parent_name":"RuleDescription"},"Structs/RuleDescription.html#/s:18SwiftLintFramework15RuleDescriptionV10identifier4name11description4kind03minA7Version21nonTriggeringExamples010triggeringN011corrections17deprecatedAliases18requiresFileOnDiskACSS_S2SAA0D4KindOAA0aK0VSayAA7ExampleVGATSDyA2SGShySSGSbtcfc":{"name":"init(identifier:name:description:kind:minSwiftVersion:nonTriggeringExamples:triggeringExamples:corrections:deprecatedAliases:requiresFileOnDisk:)","abstract":"
Creates a RuleDescription by specifying all its properties directly.
","parent_name":"RuleDescription"},"Structs/RuleDescription.html#/s:SQ2eeoiySbx_xtFZ":{"name":"==(_:_:)","parent_name":"RuleDescription"},"Structs/Region.html#/s:18SwiftLintFramework6RegionV5startAA8LocationVvp":{"name":"start","abstract":"
The location describing the start of the region. All locations that are less than this value","parent_name":"Region"},"Structs/Region.html#/s:18SwiftLintFramework6RegionV3endAA8LocationVvp":{"name":"end","abstract":"
The location describing the end of the region. All locations that are greater than this value","parent_name":"Region"},"Structs/Region.html#/s:18SwiftLintFramework6RegionV23disabledRuleIdentifiersShyAA0F10IdentifierOGvp":{"name":"disabledRuleIdentifiers","abstract":"
All SwiftLint rule identifiers that are disabled in this region.
","parent_name":"Region"},"Structs/Region.html#/s:18SwiftLintFramework6RegionV5start3end23disabledRuleIdentifiersAcA8LocationV_AHShyAA0H10IdentifierOGtcfc":{"name":"init(start:end:disabledRuleIdentifiers:)","abstract":"
Creates a Region by setting explicit values for all its properties.
","parent_name":"Region"},"Structs/Region.html#/s:18SwiftLintFramework6RegionV8containsySbAA8LocationVF":{"name":"contains(_:)","abstract":"
Whether the specific location is contained in this region.
","parent_name":"Region"},"Structs/Region.html#/s:18SwiftLintFramework6RegionV13isRuleEnabledySbAA0F0_pF":{"name":"isRuleEnabled(_:)","abstract":"
Whether the specified rule is enabled in this region.
","parent_name":"Region"},"Structs/Region.html#/s:18SwiftLintFramework6RegionV14isRuleDisabledySbAA0F0_pF":{"name":"isRuleDisabled(_:)","abstract":"
Whether the specified rule is disabled in this region.
","parent_name":"Region"},"Structs/Region.html#/s:18SwiftLintFramework6RegionV26deprecatedAliasesDisabling4ruleShySSGAA4Rule_p_tF":{"name":"deprecatedAliasesDisabling(rule:)","abstract":"
Returns the deprecated rule aliases that are disabling the specified rule in this region.","parent_name":"Region"},"Structs/Location.html#/s:18SwiftLintFramework8LocationV4fileSSSgvp":{"name":"file","abstract":"
The file path on disk for this location.
","parent_name":"Location"},"Structs/Location.html#/s:18SwiftLintFramework8LocationV4lineSiSgvp":{"name":"line","abstract":"
The line offset in the file for this location. 1-indexed.
","parent_name":"Location"},"Structs/Location.html#/s:18SwiftLintFramework8LocationV9characterSiSgvp":{"name":"character","abstract":"
The character offset in the file for this location. 1-indexed.
","parent_name":"Location"},"Structs/Location.html#/s:18SwiftLintFramework8LocationV11descriptionSSvp":{"name":"description","abstract":"
A lossless printable description of this location.
","parent_name":"Location"},"Structs/Location.html#/s:18SwiftLintFramework8LocationV12relativeFileSSSgvp":{"name":"relativeFile","abstract":"
The file path for this location relative to the current working directory.
","parent_name":"Location"},"Structs/Location.html#/s:18SwiftLintFramework8LocationV4file4line9characterACSSSg_SiSgAHtcfc":{"name":"init(file:line:character:)","abstract":"
Creates a Location by specifying its properties directly.
","parent_name":"Location"},"Structs/Location.html#/s:18SwiftLintFramework8LocationV4file10byteOffsetAcA0aB4FileC_012SourceKittenC09ByteCountVtcfc":{"name":"init(file:byteOffset:)","abstract":"
Creates a Location based on a SwiftLintFile and a byte-offset into the file.","parent_name":"Location"},"Structs/Location.html#/s:18SwiftLintFramework8LocationV4file8positionAcA0aB4FileC_0A6Syntax16AbsolutePositionVtcfc":{"name":"init(file:position:)","abstract":"
Creates a Location based on a SwiftLintFile and a SwiftSyntax AbsolutePosition into the file.","parent_name":"Location"},"Structs/Location.html#/s:18SwiftLintFramework8LocationV4file15characterOffsetAcA0aB4FileC_Sitcfc":{"name":"init(file:characterOffset:)","abstract":"
Creates a Location based on a SwiftLintFile and a UTF8 character-offset into the file.","parent_name":"Location"},"Structs/Location.html#/s:SL1loiySbx_xtFZ":{"name":"<(_:_:)","parent_name":"Location"},"Structs/CollectedLinter.html#/s:18SwiftLintFramework15CollectedLinterV4fileAA0aB4FileCvp":{"name":"file","abstract":"
The file to lint with this linter.
","parent_name":"CollectedLinter"},"Structs/CollectedLinter.html#/s:18SwiftLintFramework15CollectedLinterV15styleViolations5usingSayAA14StyleViolationVGAA11RuleStorageC_tF":{"name":"styleViolations(using:)","abstract":"
Computes or retrieves style violations.
","parent_name":"CollectedLinter"},"Structs/CollectedLinter.html#/s:18SwiftLintFramework15CollectedLinterV27styleViolationsAndRuleTimes5usingSayAA14StyleViolationVG_SaySS2id_Sd4timetGtAA0I7StorageC_tF":{"name":"styleViolationsAndRuleTimes(using:)","abstract":"
Computes or retrieves style violations and the time spent executing each rule.
","parent_name":"CollectedLinter"},"Structs/CollectedLinter.html#/s:18SwiftLintFramework15CollectedLinterV6format7useTabs11indentWidthySb_SitF":{"name":"format(useTabs:indentWidth:)","abstract":"
Formats the file associated with this linter.
","parent_name":"CollectedLinter"},"Structs/Linter.html#/s:18SwiftLintFramework6LinterV4fileAA0aB4FileCvp":{"name":"file","abstract":"
The file to lint with this linter.
","parent_name":"Linter"},"Structs/Linter.html#/s:18SwiftLintFramework6LinterV12isCollectingSbvp":{"name":"isCollecting","abstract":"
Whether or not this linter will be used to collect information from several files.
","parent_name":"Linter"},"Structs/Linter.html#/s:18SwiftLintFramework6LinterV4file13configuration5cache17compilerArgumentsAcA0aB4FileC_AA13ConfigurationVAA0D5CacheCSgSaySSGtcfc":{"name":"init(file:configuration:cache:compilerArguments:)","abstract":"
Creates a Linter by specifying its properties directly.
","parent_name":"Linter"},"Structs/Linter.html#/s:18SwiftLintFramework6LinterV7collect4intoAA09CollectedD0VAA11RuleStorageC_tF":{"name":"collect(into:)","abstract":"
Returns a linter capable of checking for violations after running each rule’s collection step.
","parent_name":"Linter"},"Structs/Example.html#/s:18SwiftLintFramework7ExampleV4codeSSvp":{"name":"code","abstract":"
The contents of the example
","parent_name":"Example"},"Structs/Example.html#/s:18SwiftLintFramework7ExampleV13configurationypSgvp":{"name":"configuration","abstract":"
The untyped configuration to apply to the rule, if deviating from the default configuration.","parent_name":"Example"},"Structs/Example.html#/s:18SwiftLintFramework7ExampleV20testMultiByteOffsetsSbvp":{"name":"testMultiByteOffsets","abstract":"
Whether the example should be tested by prepending multibyte grapheme clusters
","parent_name":"Example"},"Structs/Example.html#/s:18SwiftLintFramework7ExampleV11testOnLinuxSbvp":{"name":"testOnLinux","abstract":"
Whether the example should be tested on Linux
","parent_name":"Example"},"Structs/Example.html#/s:18SwiftLintFramework7ExampleV4files12StaticStringVvp":{"name":"file","abstract":"
The path to the file where the example was created
","parent_name":"Example"},"Structs/Example.html#/s:18SwiftLintFramework7ExampleV4lineSuvp":{"name":"line","abstract":"
The line in the file where the example was created
","parent_name":"Example"},"Structs/Example.html#/s:18SwiftLintFramework7ExampleV_13configuration20testMultiByteOffsets0F17WrappingInComment0fjK6String0F14DisableCommand0F7OnLinux4file4line24excludeFromDocumentationACSS_ypSgS5bs06StaticM0VSuSbtcfc":{"name":"init(_:configuration:testMultiByteOffsets:testWrappingInComment:testWrappingInString:testDisableCommand:testOnLinux:file:line:excludeFromDocumentation:)","abstract":"
Create a new Example with the specified code, file, and line.
","parent_name":"Example"},"Structs/Example.html#/s:18SwiftLintFramework7ExampleV4with4codeACSS_tF":{"name":"with(code:)","abstract":"
Returns the same example, but with the code that is passed in
","parent_name":"Example"},"Structs/Example.html#/s:18SwiftLintFramework7ExampleV24removingViolationMarkersACyF":{"name":"removingViolationMarkers()","abstract":"
Returns a copy of the Example with all instances of the “↓” character removed.
","parent_name":"Example"},"Structs/Example.html#/s:SQ2eeoiySbx_xtFZ":{"name":"==(_:_:)","parent_name":"Example"},"Structs/Example.html#/s:SH4hash4intoys6HasherVz_tF":{"name":"hash(into:)","parent_name":"Example"},"Structs/Example.html#/s:SL1loiySbx_xtFZ":{"name":"<(_:_:)","parent_name":"Example"},"Structs/Command/Modifier.html#/s:18SwiftLintFramework7CommandV8ModifierO8previousyA2EmF":{"name":"previous","abstract":"
The command should only apply to the line preceding its definition.
","parent_name":"Modifier"},"Structs/Command/Modifier.html#/s:18SwiftLintFramework7CommandV8ModifierO4thisyA2EmF":{"name":"this","abstract":"
The command should only apply to the same line as its definition.
","parent_name":"Modifier"},"Structs/Command/Modifier.html#/s:18SwiftLintFramework7CommandV8ModifierO4nextyA2EmF":{"name":"next","abstract":"
The command should only apply to the line following its definition.
","parent_name":"Modifier"},"Structs/Command/Action.html#/s:18SwiftLintFramework7CommandV6ActionO6enableyA2EmF":{"name":"enable","abstract":"
The rule(s) associated with this command should be enabled by the SwiftLint engine.
","parent_name":"Action"},"Structs/Command/Action.html#/s:18SwiftLintFramework7CommandV6ActionO7disableyA2EmF":{"name":"disable","abstract":"
The rule(s) associated with this command should be disabled by the SwiftLint engine.
","parent_name":"Action"},"Structs/Command/Action.html":{"name":"Action","abstract":"
The action (verb) that SwiftLint should perform when interpreting this command.
","parent_name":"Command"},"Structs/Command/Modifier.html":{"name":"Modifier","abstract":"
The modifier for a command, used to modify its scope.
","parent_name":"Command"},"Structs/Command.html#/s:18SwiftLintFramework7CommandV6action15ruleIdentifiers4line9character8modifier15trailingCommentA2C6ActionO_ShyAA14RuleIdentifierOGS2iSgAC8ModifierOSgSSSgtcfc":{"name":"init(action:ruleIdentifiers:line:character:modifier:trailingComment:)","abstract":"
Creates a command based on the specified parameters.
","parent_name":"Command"},"Structs/Command.html#/s:18SwiftLintFramework7CommandV12actionString4line9characterACSgSS_S2itcfc":{"name":"init(actionString:line:character:)","abstract":"
Creates a command based on the specified parameters.
","parent_name":"Command"},"Structs/SourceKittenDictionary.html#/s:18SwiftLintFramework22SourceKittenDictionaryV5valueSDySS0deC00D16KitRepresentable_pGvp":{"name":"value","abstract":"
The underlying SourceKitten dictionary.
","parent_name":"SourceKittenDictionary"},"Structs/SourceKittenDictionary.html#/s:18SwiftLintFramework22SourceKittenDictionaryV12substructureSayACGvp":{"name":"substructure","abstract":"
The cached substructure for this dictionary. Empty if there is no substructure.
","parent_name":"SourceKittenDictionary"},"Structs/SourceKittenDictionary.html#/s:18SwiftLintFramework22SourceKittenDictionaryV14expressionKindAA0a10ExpressionH0OSgvp":{"name":"expressionKind","abstract":"
The kind of Swift expression represented by this dictionary, if it is an expression.
","parent_name":"SourceKittenDictionary"},"Structs/SourceKittenDictionary.html#/s:18SwiftLintFramework22SourceKittenDictionaryV15declarationKind0deC00a11DeclarationH0OSgvp":{"name":"declarationKind","abstract":"
The kind of Swift declaration represented by this dictionary, if it is a declaration.
","parent_name":"SourceKittenDictionary"},"Structs/SourceKittenDictionary.html#/s:18SwiftLintFramework22SourceKittenDictionaryV13statementKind0deC009StatementH0OSgvp":{"name":"statementKind","abstract":"
The kind of Swift statement represented by this dictionary, if it is a statement.
","parent_name":"SourceKittenDictionary"},"Structs/SourceKittenDictionary.html#/s:18SwiftLintFramework22SourceKittenDictionaryV13accessibilityAA18AccessControlLevelOSgvp":{"name":"accessibility","abstract":"
The accessibility level for this dictionary, if it is a declaration.
","parent_name":"SourceKittenDictionary"},"Structs/Configuration/RulesMode.html#/s:18SwiftLintFramework13ConfigurationV9RulesModeO7defaultyAEShySSG_AGtcAEmF":{"name":"default(disabled:optIn:)","abstract":"
The default rules mode, which will enable all rules that aren’t defined as being opt-in","parent_name":"RulesMode"},"Structs/Configuration/RulesMode.html#/s:18SwiftLintFramework13ConfigurationV9RulesModeO4onlyyAEShySSGcAEmF":{"name":"only(_:)","abstract":"
Only enable the rules explicitly listed.
","parent_name":"RulesMode"},"Structs/Configuration/RulesMode.html#/s:18SwiftLintFramework13ConfigurationV9RulesModeO10allEnabledyA2EmF":{"name":"allEnabled","abstract":"
Enable all available rules.
","parent_name":"RulesMode"},"Structs/Configuration/IndentationStyle.html#/s:18SwiftLintFramework13ConfigurationV16IndentationStyleO4tabsyA2EmF":{"name":"tabs","abstract":"
Swift source code should be indented using tabs.
","parent_name":"IndentationStyle"},"Structs/Configuration/IndentationStyle.html#/s:18SwiftLintFramework13ConfigurationV16IndentationStyleO6spacesyAESi_tcAEmF":{"name":"spaces(count:)","abstract":"
Swift source code should be indented using spaces with count spaces per indentation level.
","parent_name":"IndentationStyle"},"Structs/Configuration.html#/s:18SwiftLintFramework13ConfigurationV7defaultACvpZ":{"name":"default","abstract":"
The default Configuration resulting from an empty configuration file.
","parent_name":"Configuration"},"Structs/Configuration.html#/s:18SwiftLintFramework13ConfigurationV15defaultFileNameSSvpZ":{"name":"defaultFileName","abstract":"
The default file name to look for user-defined configurations.
","parent_name":"Configuration"},"Structs/Configuration.html#/s:18SwiftLintFramework13ConfigurationV13includedPathsSaySSGvp":{"name":"includedPaths","abstract":"
The paths that should be included when linting
","parent_name":"Configuration"},"Structs/Configuration.html#/s:18SwiftLintFramework13ConfigurationV13excludedPathsSaySSGvp":{"name":"excludedPaths","abstract":"
The paths that should be excluded when linting
","parent_name":"Configuration"},"Structs/Configuration.html#/s:18SwiftLintFramework13ConfigurationV11indentationAC16IndentationStyleOvp":{"name":"indentation","abstract":"
The style to use when indenting Swift source code.
","parent_name":"Configuration"},"Structs/Configuration.html#/s:18SwiftLintFramework13ConfigurationV16warningThresholdSiSgvp":{"name":"warningThreshold","abstract":"
The threshold for the number of warnings to tolerate before treating the lint as having failed.
","parent_name":"Configuration"},"Structs/Configuration.html#/s:18SwiftLintFramework13ConfigurationV8reporterSSvp":{"name":"reporter","abstract":"
The identifier for the Reporter to use to report style violations.
","parent_name":"Configuration"},"Structs/Configuration.html#/s:18SwiftLintFramework13ConfigurationV9cachePathSSSgvp":{"name":"cachePath","abstract":"
The location of the persisted cache to use with this configuration.
","parent_name":"Configuration"},"Structs/Configuration.html#/s:18SwiftLintFramework13ConfigurationV22allowZeroLintableFilesSbvp":{"name":"allowZeroLintableFiles","abstract":"
Allow or disallow SwiftLint to exit successfully when passed only ignored or unlintable files.
","parent_name":"Configuration"},"Structs/Configuration.html#/s:18SwiftLintFramework13ConfigurationV013basedOnCustomD5FilesSbvp":{"name":"basedOnCustomConfigurationFiles","abstract":"
This value is true iff the --config parameter was used to specify (a) configuration file(s)","parent_name":"Configuration"},"Structs/Configuration.html#/s:18SwiftLintFramework13ConfigurationV5rulesSayAA4Rule_pGvp":{"name":"rules","abstract":"
All rules enabled in this configuration
","parent_name":"Configuration"},"Structs/Configuration.html#/s:18SwiftLintFramework13ConfigurationV13rootDirectorySSvp":{"name":"rootDirectory","abstract":"
The root directory is the directory that included & excluded paths relate to.","parent_name":"Configuration"},"Structs/Configuration.html#/s:18SwiftLintFramework13ConfigurationV9rulesModeAC05RulesF0Ovp":{"name":"rulesMode","abstract":"
The rules mode used for this configuration.
","parent_name":"Configuration"},"Structs/Configuration.html#/s:18SwiftLintFramework13ConfigurationV18configurationFiles14enableAllRules9cachePath27ignoreParentAndChildConfigs20mockedNetworkResults25useDefaultConfigOnFailureACSaySSG_SbSSSgSbSDyS2SGSbSgtcfc":{"name":"init(configurationFiles:enableAllRules:cachePath:ignoreParentAndChildConfigs:mockedNetworkResults:useDefaultConfigOnFailure:)","abstract":"
Creates a Configuration with convenience parameters.
","parent_name":"Configuration"},"Structs/Configuration.html#/s:18SwiftLintFramework13ConfigurationV31withPrecomputedCacheDescriptionACyF":{"name":"withPrecomputedCacheDescription()","abstract":"
Returns a copy of the current Configuration with its computedCacheDescription property set to the value of","parent_name":"Configuration"},"Structs/Configuration/IndentationStyle.html":{"name":"IndentationStyle","abstract":"
The style of indentation used in a Swift project.
","parent_name":"Configuration"},"Structs/Configuration.html#/s:18SwiftLintFramework13ConfigurationV13lintableFiles6inPath12forceExclude15excludeByPrefixSayAA0aB4FileCGSS_S2btF":{"name":"lintableFiles(inPath:forceExclude:excludeByPrefix:)","abstract":"
Returns the files that can be linted by SwiftLint in the specified parent path.
","parent_name":"Configuration"},"Structs/Configuration.html#/s:18SwiftLintFramework13ConfigurationV19filterExcludedPaths11fileManager2inSaySSGAA012LintableFileI0_p_AGdtF":{"name":"filterExcludedPaths(fileManager:in:)","abstract":"
Returns an array of file paths after removing the excluded paths as defined by this configuration.
","parent_name":"Configuration"},"Structs/Configuration.html#/s:18SwiftLintFramework13ConfigurationV27filterExcludedPathsByPrefix2inSaySSGAFd_tF":{"name":"filterExcludedPathsByPrefix(in:)","abstract":"
Returns the file paths that are excluded by this configuration using filtering by absolute path prefix.
","parent_name":"Configuration"},"Structs/Configuration.html#/s:18SwiftLintFramework13ConfigurationV13configuration3forAcA0aB4FileC_tF":{"name":"configuration(for:)","abstract":"
Returns a new configuration that applies to the specified file by merging the current configuration with any","parent_name":"Configuration"},"Structs/Configuration.html#/s:18SwiftLintFramework13ConfigurationV4dict8ruleList14enableAllRules9cachePathACSDySSypG_AA04RuleG0VSbSSSgtKcfc":{"name":"init(dict:ruleList:enableAllRules:cachePath:)","abstract":"
Creates a Configuration value based on the specified parameters.
","parent_name":"Configuration"},"Structs/Configuration.html#/s:18SwiftLintFramework13ConfigurationV14configuredRule5forIDAA0F0_pSgSS_tF":{"name":"configuredRule(forID:)","abstract":"
Returns the rule for the specified ID, if configured in this configuration.
","parent_name":"Configuration"},"Structs/Configuration/RulesMode.html":{"name":"RulesMode","abstract":"
Represents how a Configuration object can be configured with regards to rules.
","parent_name":"Configuration"},"Structs/Configuration.html#/s:SH4hash4intoys6HasherVz_tF":{"name":"hash(into:)","parent_name":"Configuration"},"Structs/Configuration.html#/s:SQ2eeoiySbx_xtFZ":{"name":"==(_:_:)","parent_name":"Configuration"},"Structs/Configuration.html#/s:s23CustomStringConvertibleP11descriptionSSvp":{"name":"description","parent_name":"Configuration"},"Structs/RuleListDocumentation.html#/s:18SwiftLintFramework21RuleListDocumentationVyAcA0dE0Vcfc":{"name":"init(_:)","abstract":"
Creates a RuleListDocumentation instance from a RuleList.
","parent_name":"RuleListDocumentation"},"Structs/RuleListDocumentation.html#/s:18SwiftLintFramework21RuleListDocumentationV5write2toy10Foundation3URLV_tKF":{"name":"write(to:)","abstract":"
Write the rule list documentation as markdown files to the specified directory.
","parent_name":"RuleListDocumentation"},"Structs/RuleListDocumentation.html":{"name":"RuleListDocumentation","abstract":"
User-facing documentation for a SwiftLint RuleList.
"},"Structs/Configuration.html":{"name":"Configuration","abstract":"
The configuration struct for SwiftLint. User-defined in the .swiftlint.yml file, drives the behavior of SwiftLint.
"},"Structs/SourceKittenDictionary.html":{"name":"SourceKittenDictionary","abstract":"
A collection of keys and values as parsed out of SourceKit, with many conveniences for accessing SwiftLint-specific"},"Structs/Command.html":{"name":"Command","abstract":"
A SwiftLint-interpretable command to modify SwiftLint’s behavior embedded as comments in source code.
"},"Structs/Example.html":{"name":"Example","abstract":"
Captures code and context information for an example of a triggering or"},"Structs/Linter.html":{"name":"Linter","abstract":"
Represents a file that can be linted for style violations and corrections after being collected.
"},"Structs/CollectedLinter.html":{"name":"CollectedLinter","abstract":"
Represents a file that can compute style violations and corrections for a list of rules.
"},"Structs/Location.html":{"name":"Location","abstract":"
The placement of a segment of Swift in a collection of source files.
"},"Structs/Region.html":{"name":"Region","abstract":"
A contiguous region of Swift source code.
"},"Structs/RuleDescription.html":{"name":"RuleDescription","abstract":"
A detailed description for a SwiftLint rule. Used for both documentation and testing purposes.
"},"Structs/RuleList.html":{"name":"RuleList","abstract":"
A list of available SwiftLint rules.
"},"Structs/RuleParameter.html":{"name":"RuleParameter","abstract":"
A configuration parameter for rules.
"},"Structs/StyleViolation.html":{"name":"StyleViolation","abstract":"
A value describing an instance of Swift source code that is considered invalid by a SwiftLint rule.
"},"Structs/SwiftLintSyntaxMap.html":{"name":"SwiftLintSyntaxMap","abstract":"
Represents a Swift file’s syntax information.
"},"Structs/SwiftLintSyntaxToken.html":{"name":"SwiftLintSyntaxToken","abstract":"
A SwiftLint-aware Swift syntax token.
"},"Structs/SwiftVersion.html":{"name":"SwiftVersion","abstract":"
A value describing the version of the Swift compiler.
"},"Structs/Version.html":{"name":"Version","abstract":"
A type describing the SwiftLint version.
"},"Structs/YamlParser.html":{"name":"YamlParser","abstract":"
An interface for parsing YAML.
"},"Structs/ReasonedRuleViolation.html":{"name":"ReasonedRuleViolation","abstract":"
A violation produced by ViolationsSyntaxVisitor s.
"},"Structs/GitLabJUnitReporter.html":{"name":"GitLabJUnitReporter","abstract":"
Reports violations as JUnit XML supported by GitLab.
"},"Structs/SonarQubeReporter.html":{"name":"SonarQubeReporter","abstract":"
Reports violations in SonarQube import format.
"},"Structs/XcodeReporter.html":{"name":"XcodeReporter","abstract":"
Reports violations in the format Xcode uses to display in the IDE. (default)
"},"Protocols/SwiftSyntaxRule.html#/s:18SwiftLintFramework0A10SyntaxRuleP11makeVisitor4fileAA010ViolationsdG0CAA0aB4FileC_tF":{"name":"makeVisitor(file:)","abstract":"
Produce a ViolationsSyntaxVisitor for the given file.
","parent_name":"SwiftSyntaxRule"},"Protocols/SwiftSyntaxRule.html#/s:18SwiftLintFramework0A10SyntaxRuleP13makeViolation4file9violationAA05StyleG0VAA0aB4FileC_AA08ReasonedeG0VtF":{"name":"makeViolation(file:violation:)","abstract":"
Produce a violation for the given file and absolute position.
","parent_name":"SwiftSyntaxRule"},"Protocols/SwiftSyntaxRule.html#/s:18SwiftLintFramework0A10SyntaxRuleP10preprocess10syntaxTree0aD0010SourceFileD0VSgAH_tF":{"name":"preprocess(syntaxTree:)","abstract":"
Gives a chance for the rule to do some pre-processing on the syntax tree.","parent_name":"SwiftSyntaxRule"},"Protocols/SwiftSyntaxRule.html#/s:18SwiftLintFramework0A10SyntaxRulePAAE15disabledRegions4fileSay0aD011SourceRangeVGAA0aB4FileC_tF":{"name":"disabledRegions(file:)","abstract":"
Returns the source ranges in the specified file where this rule is disabled.
","parent_name":"SwiftSyntaxRule"},"Protocols/SwiftSyntaxRule.html#/s:18SwiftLintFramework4RuleP8validate4fileSayAA14StyleViolationVGAA0aB4FileC_tF":{"name":"validate(file:)","parent_name":"SwiftSyntaxRule"},"Protocols/ViolationsSyntaxRewriter.html#/s:18SwiftLintFramework24ViolationsSyntaxRewriterP19correctionPositionsSay0aE016AbsolutePositionVGvp":{"name":"correctionPositions","abstract":"
Positions in a source file where corrections were applied.
","parent_name":"ViolationsSyntaxRewriter"},"Protocols/SeverityBasedRuleConfiguration.html#/s:18SwiftLintFramework30SeverityBasedRuleConfigurationP08severityG0AA0dG0Vvp":{"name":"severityConfiguration","abstract":"
The configuration of a rule’s severity.
","parent_name":"SeverityBasedRuleConfiguration"},"Protocols/SeverityBasedRuleConfiguration.html#/s:18SwiftLintFramework30SeverityBasedRuleConfigurationPAAE8severityAA09ViolationD0Ovp":{"name":"severity","abstract":"
The severity of a rule.
","parent_name":"SeverityBasedRuleConfiguration"},"Protocols/RuleConfiguration.html#/s:18SwiftLintFramework17RuleConfigurationP18consoleDescriptionSSvp":{"name":"consoleDescription","abstract":"
A human-readable description for this configuration and its applied values.
","parent_name":"RuleConfiguration"},"Protocols/RuleConfiguration.html#/s:18SwiftLintFramework17RuleConfigurationP5apply13configurationyyp_tKF":{"name":"apply(configuration:)","abstract":"
Apply an untyped configuration to the current value.
","parent_name":"RuleConfiguration"},"Protocols/RuleConfiguration.html#/s:18SwiftLintFramework17RuleConfigurationP9isEqualToySbAaB_pF":{"name":"isEqualTo(_:)","abstract":"
Whether the specified configuration is equivalent to the current value.
","parent_name":"RuleConfiguration"},"Protocols/AnalyzerRule.html#/s:18SwiftLintFramework4RuleP8validate4fileSayAA14StyleViolationVGAA0aB4FileC_tF":{"name":"validate(file:)","parent_name":"AnalyzerRule"},"Protocols/Rule.html#/s:18SwiftLintFramework4RuleP11descriptionAA0D11DescriptionVvpZ":{"name":"description","abstract":"
A verbose description of many of this rule’s properties.
","parent_name":"Rule"},"Protocols/Rule.html#/s:18SwiftLintFramework4RuleP24configurationDescriptionSSvp":{"name":"configurationDescription","abstract":"
A description of how this rule has been configured to run.
","parent_name":"Rule"},"Protocols/Rule.html#/s:18SwiftLintFramework4RulePxycfc":{"name":"init()","abstract":"
A default initializer for rules. All rules need to be trivially initializable.
","parent_name":"Rule"},"Protocols/Rule.html#/s:18SwiftLintFramework4RuleP13configurationxyp_tKcfc":{"name":"init(configuration:)","abstract":"
Creates a rule by applying its configuration.
","parent_name":"Rule"},"Protocols/Rule.html#/s:18SwiftLintFramework4RuleP8validate4file17compilerArgumentsSayAA14StyleViolationVGAA0aB4FileC_SaySSGtF":{"name":"validate(file:compilerArguments:)","abstract":"
Executes the rule on a file and returns any violations to the rule’s expectations.
","parent_name":"Rule"},"Protocols/Rule.html#/s:18SwiftLintFramework4RuleP8validate4fileSayAA14StyleViolationVGAA0aB4FileC_tF":{"name":"validate(file:)","abstract":"
Executes the rule on a file and returns any violations to the rule’s expectations.
","parent_name":"Rule"},"Protocols/Rule.html#/s:18SwiftLintFramework4RuleP9isEqualToySbAaB_pF":{"name":"isEqualTo(_:)","abstract":"
Whether or not the specified rule is equivalent to the current rule.
","parent_name":"Rule"},"Protocols/Rule.html#/s:18SwiftLintFramework4RuleP11collectInfo3for4into17compilerArgumentsyAA0aB4FileC_AA0D7StorageCSaySSGtF":{"name":"collectInfo(for:into:compilerArguments:)","abstract":"
Collects information for the specified file in a storage object, to be analyzed by a CollectedLinter .
","parent_name":"Rule"},"Protocols/Rule.html#/s:18SwiftLintFramework4RuleP8validate4file5using17compilerArgumentsSayAA14StyleViolationVGAA0aB4FileC_AA0D7StorageCSaySSGtF":{"name":"validate(file:using:compilerArguments:)","abstract":"
Executes the rule on a file after collecting file info for all files and returns any violations to the rule’s","parent_name":"Rule"},"Protocols/Reporter.html#/s:18SwiftLintFramework8ReporterP10identifierSSvpZ":{"name":"identifier","abstract":"
The unique identifier for this reporter.
","parent_name":"Reporter"},"Protocols/Reporter.html#/s:18SwiftLintFramework8ReporterP10isRealtimeSbvpZ":{"name":"isRealtime","abstract":"
Whether or not this reporter can output incrementally as violations are found or if all violations must be","parent_name":"Reporter"},"Protocols/Reporter.html#/s:18SwiftLintFramework8ReporterP14generateReportySSSayAA14StyleViolationVGFZ":{"name":"generateReport(_:)","abstract":"
Return a string with the report for the specified violations.
","parent_name":"Reporter"},"Protocols/ConfigurationProviderRule.html#/s:18SwiftLintFramework25ConfigurationProviderRuleP0D4TypeQa":{"name":"ConfigurationType","abstract":"
The type of configuration used to configure this rule.
","parent_name":"ConfigurationProviderRule"},"Protocols/ConfigurationProviderRule.html#/s:18SwiftLintFramework25ConfigurationProviderRuleP13configuration0D4TypeQzvp":{"name":"configuration","abstract":"
This rule’s configuration.
","parent_name":"ConfigurationProviderRule"},"Protocols/ConfigurationProviderRule.html#/s:18SwiftLintFramework4RuleP13configurationxyp_tKcfc":{"name":"init(configuration:)","parent_name":"ConfigurationProviderRule"},"Protocols/ConfigurationProviderRule.html#/s:18SwiftLintFramework4RuleP9isEqualToySbAaB_pF":{"name":"isEqualTo(_:)","parent_name":"ConfigurationProviderRule"},"Protocols/ConfigurationProviderRule.html#/s:18SwiftLintFramework4RuleP24configurationDescriptionSSvp":{"name":"configurationDescription","parent_name":"ConfigurationProviderRule"},"Protocols/CollectingRule.html#/s:18SwiftLintFramework14CollectingRuleP8FileInfoQa":{"name":"FileInfo","abstract":"
The kind of information to collect for each file being linted for this rule.
","parent_name":"CollectingRule"},"Protocols/CollectingRule.html#/s:18SwiftLintFramework14CollectingRuleP11collectInfo3for17compilerArguments04FileG0QzAA0abK0C_SaySSGtF":{"name":"collectInfo(for:compilerArguments:)","abstract":"
Collects information for the specified file, to be analyzed by a CollectedLinter .
","parent_name":"CollectingRule"},"Protocols/CollectingRule.html#/s:18SwiftLintFramework14CollectingRuleP11collectInfo3for04FileG0QzAA0abI0C_tF":{"name":"collectInfo(for:)","abstract":"
Collects information for the specified file, to be analyzed by a CollectedLinter .
","parent_name":"CollectingRule"},"Protocols/CollectingRule.html#/s:18SwiftLintFramework14CollectingRuleP8validate4file13collectedInfo17compilerArgumentsSayAA14StyleViolationVGAA0aB4FileC_SDyAL0nI0QzGSaySSGtF":{"name":"validate(file:collectedInfo:compilerArguments:)","abstract":"
Executes the rule on a file after collecting file info for all files and returns any violations to the rule’s","parent_name":"CollectingRule"},"Protocols/CollectingRule.html#/s:18SwiftLintFramework14CollectingRuleP8validate4file13collectedInfoSayAA14StyleViolationVGAA0aB4FileC_SDyAK0lI0QzGtF":{"name":"validate(file:collectedInfo:)","abstract":"
Executes the rule on a file after collecting file info for all files and returns any violations to the rule’s","parent_name":"CollectingRule"},"Protocols/CollectingRule.html#/s:18SwiftLintFramework4RuleP11collectInfo3for4into17compilerArgumentsyAA0aB4FileC_AA0D7StorageCSaySSGtF":{"name":"collectInfo(for:into:compilerArguments:)","parent_name":"CollectingRule"},"Protocols/CollectingRule.html#/s:18SwiftLintFramework4RuleP8validate4file5using17compilerArgumentsSayAA14StyleViolationVGAA0aB4FileC_AA0D7StorageCSaySSGtF":{"name":"validate(file:using:compilerArguments:)","parent_name":"CollectingRule"},"Protocols/CollectingRule.html#/s:18SwiftLintFramework4RuleP8validate4fileSayAA14StyleViolationVGAA0aB4FileC_tF":{"name":"validate(file:)","parent_name":"CollectingRule"},"Protocols/CollectingRule.html#/s:18SwiftLintFramework4RuleP8validate4file17compilerArgumentsSayAA14StyleViolationVGAA0aB4FileC_SaySSGtF":{"name":"validate(file:compilerArguments:)","parent_name":"CollectingRule"},"Protocols/ASTRule.html#/s:18SwiftLintFramework7ASTRuleP8KindTypeQa":{"name":"KindType","abstract":"
The kind of token being recursed over.
","parent_name":"ASTRule"},"Protocols/ASTRule.html#/s:18SwiftLintFramework7ASTRuleP8validate4file4kind10dictionarySayAA14StyleViolationVGAA0aB4FileC_8KindTypeQzAA22SourceKittenDictionaryVtF":{"name":"validate(file:kind:dictionary:)","abstract":"
Executes the rule on a file and a subset of its AST structure, returning any violations to the rule’s","parent_name":"ASTRule"},"Protocols/ASTRule.html#/s:18SwiftLintFramework7ASTRuleP4kind4from8KindTypeQzSgAA22SourceKittenDictionaryV_tF":{"name":"kind(from:)","abstract":"
Get the kind from the specified dictionary.
","parent_name":"ASTRule"},"Protocols/ASTRule.html#/s:18SwiftLintFramework4RuleP8validate4fileSayAA14StyleViolationVGAA0aB4FileC_tF":{"name":"validate(file:)","parent_name":"ASTRule"},"Protocols/ASTRule.html#/s:18SwiftLintFramework7ASTRulePAAE8validate4file10dictionarySayAA14StyleViolationVGAA0aB4FileC_AA22SourceKittenDictionaryVtF":{"name":"validate(file:dictionary:)","abstract":"
Executes the rule on a file and a subset of its AST structure, returning any violations to the rule’s","parent_name":"ASTRule"},"Protocols/LintableFileManager.html#/s:18SwiftLintFramework19LintableFileManagerP07filesToB06inPath13rootDirectorySaySSGSS_SSSgtF":{"name":"filesToLint(inPath:rootDirectory:)","abstract":"
Returns all files that can be linted in the specified path. If the path is relative, it will be appended to the","parent_name":"LintableFileManager"},"Protocols/LintableFileManager.html#/s:18SwiftLintFramework19LintableFileManagerP16modificationDate03forE6AtPath10Foundation0H0VSgSS_tF":{"name":"modificationDate(forFileAtPath:)","abstract":"
Returns the date when the file at the specified path was last modified. Returns nil if the file cannot be","parent_name":"LintableFileManager"},"Protocols/LintableFileManager.html":{"name":"LintableFileManager","abstract":"
An interface for enumerating files that can be linted by SwiftLint.
"},"Protocols/ASTRule.html":{"name":"ASTRule","abstract":"
A rule that leverages the Swift source’s pre-typechecked Abstract Syntax Tree to recurse into the source’s"},"Protocols.html#/s:18SwiftLintFramework17AnyCollectingRuleP":{"name":"AnyCollectingRule","abstract":"
Type-erased protocol used to check whether a rule is collectable.
"},"Protocols/CollectingRule.html":{"name":"CollectingRule","abstract":"
A rule that requires knowledge of all other files being linted.
"},"Protocols/ConfigurationProviderRule.html":{"name":"ConfigurationProviderRule","abstract":"
A rule that is user-configurable.
"},"Protocols/Reporter.html":{"name":"Reporter","abstract":"
An interface for reporting violations as strings.
"},"Protocols/Rule.html":{"name":"Rule","abstract":"
An executable value that can identify issues (violations) in Swift source code.
"},"Protocols.html#/s:18SwiftLintFramework9OptInRuleP":{"name":"OptInRule","abstract":"
A rule that is not enabled by default. Rules conforming to this need to be explicitly enabled by users.
"},"Protocols.html#/s:18SwiftLintFramework17SourceKitFreeRuleP":{"name":"SourceKitFreeRule","abstract":"
A rule that does not need SourceKit to operate and can still operate even after SourceKit has crashed.
"},"Protocols/AnalyzerRule.html":{"name":"AnalyzerRule","abstract":"
A rule that can operate on the post-typechecked AST using compiler arguments. Performs rules that are more like"},"Protocols/RuleConfiguration.html":{"name":"RuleConfiguration","abstract":"
A configuration value for a rule to allow users to modify its behavior.
"},"Protocols/SeverityBasedRuleConfiguration.html":{"name":"SeverityBasedRuleConfiguration","abstract":"
A configuration for a rule that allows to configure at least the severity.
"},"Protocols/ViolationsSyntaxRewriter.html":{"name":"ViolationsSyntaxRewriter","abstract":"
A SwiftSyntax SyntaxRewriter that produces absolute positions where corrections were applied.
"},"Protocols/SwiftSyntaxRule.html":{"name":"SwiftSyntaxRule","abstract":"
A SwiftLint Rule backed by SwiftSyntax that does not use SourceKit requests.
"},"Functions.html#/s:18SwiftLintFramework11queuedPrintyyxlF":{"name":"queuedPrint(_:)","abstract":"
A thread-safe version of Swift’s standard print().
"},"Functions.html#/s:18SwiftLintFramework16queuedPrintErroryySSF":{"name":"queuedPrintError(_:)","abstract":"
A thread-safe, newline-terminated version of fputs(..., stderr).
"},"Functions.html#/s:18SwiftLintFramework16queuedFatalError_4file4lines5NeverOSS_s12StaticStringVSutF":{"name":"queuedFatalError(_:file:line:)","abstract":"
A thread-safe, newline-terminated version of fatalError(...) that doesn’t leak"},"Functions.html#/s:18SwiftLintFramework12reporterFrom10identifierAA8Reporter_pXpSS_tF":{"name":"reporterFrom(identifier:)","abstract":"
Returns the reporter with the specified identifier. Traps if the specified identifier doesn’t correspond to any"},"Extensions/String.html#/s:SS18SwiftLintFrameworkE24absolutePathStandardizedSSyF":{"name":"absolutePathStandardized()","abstract":"
Returns a new string, converting the path to a canonical absolute path.
","parent_name":"String"},"Extensions/String.html#/s:SS18SwiftLintFrameworkE16countOccurrences2ofSiSJ_tF":{"name":"countOccurrences(of:)","abstract":"
Count the number of occurrences of the given character in self
","parent_name":"String"},"Extensions/String.html#/s:SS18SwiftLintFrameworkE4path10relativeToS2S_tF":{"name":"path(relativeTo:)","abstract":"
If self is a path, this method can be used to get a path expression relative to a root directory
","parent_name":"String"},"Extensions/FileManager.html#/s:18SwiftLintFramework19LintableFileManagerP07filesToB06inPath13rootDirectorySaySSGSS_SSSgtF":{"name":"filesToLint(inPath:rootDirectory:)","parent_name":"FileManager"},"Extensions/FileManager.html#/s:18SwiftLintFramework19LintableFileManagerP16modificationDate03forE6AtPath10Foundation0H0VSgSS_tF":{"name":"modificationDate(forFileAtPath:)","parent_name":"FileManager"},"Extensions/FileManager.html":{"name":"FileManager"},"Extensions/String.html":{"name":"String"},"Enums/ViolationSeverity.html#/s:18SwiftLintFramework17ViolationSeverityO7warningyA2CmF":{"name":"warning","abstract":"
Non-fatal. If using SwiftLint as an Xcode build phase, Xcode will mark the build as having succeeded.
","parent_name":"ViolationSeverity"},"Enums/ViolationSeverity.html#/s:18SwiftLintFramework17ViolationSeverityO5erroryA2CmF":{"name":"error","abstract":"
Fatal. If using SwiftLint as an Xcode build phase, Xcode will mark the build as having failed.
","parent_name":"ViolationSeverity"},"Enums/ViolationSeverity.html#/s:SL1loiySbx_xtFZ":{"name":"<(_:_:)","parent_name":"ViolationSeverity"},"Enums/RuleListError.html#/s:18SwiftLintFramework13RuleListErrorO24duplicatedConfigurationsyAcA0D0_pXp_tcACmF":{"name":"duplicatedConfigurations(rule:)","abstract":"
The rule list contains more than one configuration for the specified rule.
","parent_name":"RuleListError"},"Enums/RuleKind.html#/s:18SwiftLintFramework8RuleKindO4lintyA2CmF":{"name":"lint","abstract":"
Describes rules that validate Swift source conventions.
","parent_name":"RuleKind"},"Enums/RuleKind.html#/s:18SwiftLintFramework8RuleKindO9idiomaticyA2CmF":{"name":"idiomatic","abstract":"
Describes rules that validate common practices in the Swift community.
","parent_name":"RuleKind"},"Enums/RuleKind.html#/s:18SwiftLintFramework8RuleKindO5styleyA2CmF":{"name":"style","abstract":"
Describes rules that validate stylistic choices.
","parent_name":"RuleKind"},"Enums/RuleKind.html#/s:18SwiftLintFramework8RuleKindO7metricsyA2CmF":{"name":"metrics","abstract":"
Describes rules that validate magnitudes or measurements of Swift source.
","parent_name":"RuleKind"},"Enums/RuleKind.html#/s:18SwiftLintFramework8RuleKindO11performanceyA2CmF":{"name":"performance","abstract":"
Describes rules that validate that code patterns with poor performance are avoided.
","parent_name":"RuleKind"},"Enums/RuleIdentifier.html#/s:18SwiftLintFramework14RuleIdentifierO3allyA2CmF":{"name":"all","abstract":"
Special identifier that should be treated as referring to ‘all’ SwiftLint rules. One helpful usecase is in","parent_name":"RuleIdentifier"},"Enums/RuleIdentifier.html#/s:18SwiftLintFramework14RuleIdentifierO6singleyACSS_tcACmF":{"name":"single(identifier:)","abstract":"
Represents a single SwiftLint rule with the specified identifier.
","parent_name":"RuleIdentifier"},"Enums/RuleIdentifier.html#/s:18SwiftLintFramework14RuleIdentifierO20stringRepresentationSSvp":{"name":"stringRepresentation","abstract":"
The spelling of the string for this idenfitier.
","parent_name":"RuleIdentifier"},"Enums/RuleIdentifier.html#/s:18SwiftLintFramework14RuleIdentifierOyACSScfc":{"name":"init(_:)","abstract":"
Creates a RuleIdentifier by its string representation.
","parent_name":"RuleIdentifier"},"Enums/RuleIdentifier.html#/s:s26ExpressibleByStringLiteralP06stringD0x0cD4TypeQz_tcfc":{"name":"init(stringLiteral:)","parent_name":"RuleIdentifier"},"Enums/ConfigurationError.html#/s:18SwiftLintFramework18ConfigurationErrorO07unknownD0yA2CmF":{"name":"unknownConfiguration","abstract":"
The configuration didn’t match internal expectations.
","parent_name":"ConfigurationError"},"Enums/ConfigurationError.html#/s:18SwiftLintFramework18ConfigurationErrorO28ambiguousMatchKindParametersyA2CmF":{"name":"ambiguousMatchKindParameters","abstract":"
The configuration had both match_kind and excluded_match_kind parameters.
","parent_name":"ConfigurationError"},"Enums/ConfigurationError.html#/s:18SwiftLintFramework18ConfigurationErrorO7genericyACSScACmF":{"name":"generic(_:)","abstract":"
A generic configuration error specified by a string.
","parent_name":"ConfigurationError"},"Enums/ConfigurationError.html#/s:18SwiftLintFramework18ConfigurationErrorO19initialFileNotFoundyACSS_tcACmF":{"name":"initialFileNotFound(path:)","abstract":"
The initial configuration file was not found.
","parent_name":"ConfigurationError"},"Enums/AccessControlLevel.html#/s:18SwiftLintFramework18AccessControlLevelO7privateyA2CmF":{"name":"private","abstract":"
Accessible by the declaration’s immediate lexical scope.
","parent_name":"AccessControlLevel"},"Enums/AccessControlLevel.html#/s:18SwiftLintFramework18AccessControlLevelO11fileprivateyA2CmF":{"name":"fileprivate","abstract":"
Accessible by the declaration’s same file.
","parent_name":"AccessControlLevel"},"Enums/AccessControlLevel.html#/s:18SwiftLintFramework18AccessControlLevelO8internalyA2CmF":{"name":"internal","abstract":"
Accessible by the declaration’s same module, or modules importing it with the @testable attribute.
","parent_name":"AccessControlLevel"},"Enums/AccessControlLevel.html#/s:18SwiftLintFramework18AccessControlLevelO6publicyA2CmF":{"name":"public","abstract":"
Accessible by the declaration’s same program.
","parent_name":"AccessControlLevel"},"Enums/AccessControlLevel.html#/s:18SwiftLintFramework18AccessControlLevelO4openyA2CmF":{"name":"open","abstract":"
Accessible and customizable (via subclassing or overrides) by the declaration’s same program.
","parent_name":"AccessControlLevel"},"Enums/AccessControlLevel.html#/s:s23CustomStringConvertibleP11descriptionSSvp":{"name":"description","parent_name":"AccessControlLevel"},"Enums/AccessControlLevel.html#/s:SL1loiySbx_xtFZ":{"name":"<(_:_:)","parent_name":"AccessControlLevel"},"Enums/ExecutableInfo.html#/s:18SwiftLintFramework14ExecutableInfoO7buildIDSSSgvpZ":{"name":"buildID","abstract":"
A stable identifier for this executable. Uses the Mach-O header UUID on macOS. Nil on Linux.
","parent_name":"ExecutableInfo"},"Enums/SwiftExpressionKind.html#/s:18SwiftLintFramework0A14ExpressionKindO4callyA2CmF":{"name":"call","abstract":"
A call to a named function or closure.
","parent_name":"SwiftExpressionKind"},"Enums/SwiftExpressionKind.html#/s:18SwiftLintFramework0A14ExpressionKindO8argumentyA2CmF":{"name":"argument","abstract":"
An argument value for a function or closure.
","parent_name":"SwiftExpressionKind"},"Enums/SwiftExpressionKind.html#/s:18SwiftLintFramework0A14ExpressionKindO5arrayyA2CmF":{"name":"array","abstract":"
An Array expression.
","parent_name":"SwiftExpressionKind"},"Enums/SwiftExpressionKind.html#/s:18SwiftLintFramework0A14ExpressionKindO10dictionaryyA2CmF":{"name":"dictionary","abstract":"
A Dictionary expression.
","parent_name":"SwiftExpressionKind"},"Enums/SwiftExpressionKind.html#/s:18SwiftLintFramework0A14ExpressionKindO13objectLiteralyA2CmF":{"name":"objectLiteral","abstract":"
An object literal expression. https://developer.apple.com/swift/blog/?id=33
","parent_name":"SwiftExpressionKind"},"Enums/SwiftExpressionKind.html#/s:18SwiftLintFramework0A14ExpressionKindO7closureyA2CmF":{"name":"closure","abstract":"
A closure expression. https://docs.swift.org/swift-book/LanguageGuide/Closures.html
","parent_name":"SwiftExpressionKind"},"Enums/SwiftExpressionKind.html#/s:18SwiftLintFramework0A14ExpressionKindO5tupleyA2CmF":{"name":"tuple","abstract":"
A tuple expression. https://docs.swift.org/swift-book/ReferenceManual/Types.html#ID448
","parent_name":"SwiftExpressionKind"},"Enums/SwiftExpressionKind.html":{"name":"SwiftExpressionKind","abstract":"
The kind of expression for a contiguous set of Swift source tokens.
"},"Enums/ExecutableInfo.html":{"name":"ExecutableInfo","abstract":"
Information about this executable.
"},"Enums/AccessControlLevel.html":{"name":"AccessControlLevel","abstract":"
The accessibility of a Swift source declaration.
"},"Enums/ConfigurationError.html":{"name":"ConfigurationError","abstract":"
All possible configuration errors.
"},"Enums/RuleIdentifier.html":{"name":"RuleIdentifier","abstract":"
An identifier representing a SwiftLint rule, or all rules.
"},"Enums/RuleKind.html":{"name":"RuleKind","abstract":"
All the possible rule kinds (categories).
"},"Enums/RuleListError.html":{"name":"RuleListError","abstract":"
All possible rule list configuration errors.
"},"Enums/ViolationSeverity.html":{"name":"ViolationSeverity","abstract":"
The magnitude of a StyleViolation .
"},"Global%20Variables.html#/s:18SwiftLintFramework15primaryRuleListAA0eF0Vvp":{"name":"primaryRuleList","abstract":"
The rule list containing all available rules built into SwiftLint.
"},"Classes/ViolationsSyntaxVisitor.html#/s:18SwiftLintFramework23ViolationsSyntaxVisitorC5visity0aE00eF12ContinueKindOAE09ActorDeclE0VF":{"name":"visit(_:)","parent_name":"ViolationsSyntaxVisitor"},"Classes/ViolationsSyntaxVisitor.html#/s:18SwiftLintFramework23ViolationsSyntaxVisitorC5visity0aE00eF12ContinueKindOAE09ClassDeclE0VF":{"name":"visit(_:)","parent_name":"ViolationsSyntaxVisitor"},"Classes/ViolationsSyntaxVisitor.html#/s:18SwiftLintFramework23ViolationsSyntaxVisitorC5visity0aE00eF12ContinueKindOAE08EnumDeclE0VF":{"name":"visit(_:)","parent_name":"ViolationsSyntaxVisitor"},"Classes/ViolationsSyntaxVisitor.html#/s:18SwiftLintFramework23ViolationsSyntaxVisitorC5visity0aE00eF12ContinueKindOAE013ExtensionDeclE0VF":{"name":"visit(_:)","parent_name":"ViolationsSyntaxVisitor"},"Classes/ViolationsSyntaxVisitor.html#/s:18SwiftLintFramework23ViolationsSyntaxVisitorC5visity0aE00eF12ContinueKindOAE012FunctionDeclE0VF":{"name":"visit(_:)","parent_name":"ViolationsSyntaxVisitor"},"Classes/ViolationsSyntaxVisitor.html#/s:18SwiftLintFramework23ViolationsSyntaxVisitorC5visity0aE00eF12ContinueKindOAE012VariableDeclE0VF":{"name":"visit(_:)","parent_name":"ViolationsSyntaxVisitor"},"Classes/ViolationsSyntaxVisitor.html#/s:18SwiftLintFramework23ViolationsSyntaxVisitorC5visity0aE00eF12ContinueKindOAE012ProtocolDeclE0VF":{"name":"visit(_:)","parent_name":"ViolationsSyntaxVisitor"},"Classes/ViolationsSyntaxVisitor.html#/s:18SwiftLintFramework23ViolationsSyntaxVisitorC5visity0aE00eF12ContinueKindOAE010StructDeclE0VF":{"name":"visit(_:)","parent_name":"ViolationsSyntaxVisitor"},"Classes/RuleStorage.html#/s:s23CustomStringConvertibleP11descriptionSSvp":{"name":"description","parent_name":"RuleStorage"},"Classes/RuleStorage.html#/s:18SwiftLintFramework11RuleStorageCACycfc":{"name":"init()","abstract":"
Creates a RuleStorage with no initial stored data.
","parent_name":"RuleStorage"},"Classes/LinterCache.html#/s:18SwiftLintFramework11LinterCacheC13configuration11fileManagerAcA13ConfigurationV_AA012LintableFileH0_ptcfc":{"name":"init(configuration:fileManager:)","abstract":"
Creates a LinterCache by specifying a SwiftLint configuration and a file manager.
","parent_name":"LinterCache"},"Classes/LinterCache.html#/s:18SwiftLintFramework11LinterCacheC4saveyyKF":{"name":"save()","abstract":"
Persists the cache to disk.
","parent_name":"LinterCache"},"Classes/SwiftLintFile.html#/s:18SwiftLintFramework0aB4FileC4fileAC012SourceKittenC00D0C_tcfc":{"name":"init(file:)","abstract":"
Creates a SwiftLintFile with a SourceKitten File.
","parent_name":"SwiftLintFile"},"Classes/SwiftLintFile.html#/s:18SwiftLintFramework0aB4FileC4pathACSgSS_tcfc":{"name":"init(path:)","abstract":"
Creates a SwiftLintFile by specifying its path on disk.","parent_name":"SwiftLintFile"},"Classes/SwiftLintFile.html#/s:18SwiftLintFramework0aB4FileC20pathDeferringReadingACSS_tcfc":{"name":"init(pathDeferringReading:)","abstract":"
Creates a SwiftLintFile by specifying its path on disk. Unlike the SwiftLintFile(path:) initializer, this","parent_name":"SwiftLintFile"},"Classes/SwiftLintFile.html#/s:18SwiftLintFramework0aB4FileC8contentsACSS_tcfc":{"name":"init(contents:)","abstract":"
Creates a SwiftLintFile that is not backed by a file on disk by specifying its contents.
","parent_name":"SwiftLintFile"},"Classes/SwiftLintFile.html#/s:18SwiftLintFramework0aB4FileC4pathSSSgvp":{"name":"path","abstract":"
The path on disk for this file.
","parent_name":"SwiftLintFile"},"Classes/SwiftLintFile.html#/s:18SwiftLintFramework0aB4FileC8contentsSSvp":{"name":"contents","abstract":"
The file’s contents.
","parent_name":"SwiftLintFile"},"Classes/SwiftLintFile.html#/s:18SwiftLintFramework0aB4FileC10stringView012SourceKittenC006StringF0Vvp":{"name":"stringView","abstract":"
A string view into the contents of this file optimized for string manipulation operations.
","parent_name":"SwiftLintFile"},"Classes/SwiftLintFile.html#/s:18SwiftLintFramework0aB4FileC5linesSay012SourceKittenC04LineVGvp":{"name":"lines","abstract":"
The parsed lines for this file’s contents.
","parent_name":"SwiftLintFile"},"Classes/SwiftLintFile.html#/s:18SwiftLintFramework0aB4FileC15invalidateCacheyyF":{"name":"invalidateCache()","abstract":"
Invalidates all cached data for this file.
","parent_name":"SwiftLintFile"},"Classes/SwiftLintFile.html#/s:SQ2eeoiySbx_xtFZ":{"name":"==(_:_:)","parent_name":"SwiftLintFile"},"Classes/SwiftLintFile.html#/s:SH4hash4intoys6HasherVz_tF":{"name":"hash(into:)","parent_name":"SwiftLintFile"},"Classes/SwiftLintFile.html":{"name":"SwiftLintFile","abstract":"
A unit of Swift source code, either on disk or in memory.
"},"Classes/LinterCache.html":{"name":"LinterCache","abstract":"
A persisted cache for storing and retrieving linter results.
"},"Classes/RuleStorage.html":{"name":"RuleStorage","abstract":"
A storage mechanism for aggregating the results of CollectingRule s.
"},"Classes/ViolationsSyntaxVisitor.html":{"name":"ViolationsSyntaxVisitor","abstract":"
A SwiftSyntax SyntaxVisitor that produces absolute positions where violations should be reported.
"},"swift-syntax-dashboard.html":{"name":"Swift Syntax Dashboard"},"accessibility_label_for_image.html":{"name":"accessibility_label_for_image"},"accessibility_trait_for_button.html":{"name":"accessibility_trait_for_button"},"anonymous_argument_in_multiline_closure.html":{"name":"anonymous_argument_in_multiline_closure"},"anyobject_protocol.html":{"name":"anyobject_protocol"},"array_init.html":{"name":"array_init"},"attributes.html":{"name":"attributes"},"balanced_xctest_lifecycle.html":{"name":"balanced_xctest_lifecycle"},"block_based_kvo.html":{"name":"block_based_kvo"},"capture_variable.html":{"name":"capture_variable"},"class_delegate_protocol.html":{"name":"class_delegate_protocol"},"closing_brace.html":{"name":"closing_brace"},"closure_body_length.html":{"name":"closure_body_length"},"closure_end_indentation.html":{"name":"closure_end_indentation"},"closure_parameter_position.html":{"name":"closure_parameter_position"},"closure_spacing.html":{"name":"closure_spacing"},"collection_alignment.html":{"name":"collection_alignment"},"colon.html":{"name":"colon"},"comma.html":{"name":"comma"},"comma_inheritance.html":{"name":"comma_inheritance"},"comment_spacing.html":{"name":"comment_spacing"},"compiler_protocol_init.html":{"name":"compiler_protocol_init"},"computed_accessors_order.html":{"name":"computed_accessors_order"},"conditional_returns_on_newline.html":{"name":"conditional_returns_on_newline"},"contains_over_filter_count.html":{"name":"contains_over_filter_count"},"contains_over_filter_is_empty.html":{"name":"contains_over_filter_is_empty"},"contains_over_first_not_nil.html":{"name":"contains_over_first_not_nil"},"contains_over_range_nil_comparison.html":{"name":"contains_over_range_nil_comparison"},"control_statement.html":{"name":"control_statement"},"convenience_type.html":{"name":"convenience_type"},"custom_rules.html":{"name":"custom_rules"},"cyclomatic_complexity.html":{"name":"cyclomatic_complexity"},"deployment_target.html":{"name":"deployment_target"},"discarded_notification_center_observer.html":{"name":"discarded_notification_center_observer"},"discouraged_assert.html":{"name":"discouraged_assert"},"discouraged_direct_init.html":{"name":"discouraged_direct_init"},"discouraged_none_name.html":{"name":"discouraged_none_name"},"discouraged_object_literal.html":{"name":"discouraged_object_literal"},"discouraged_optional_boolean.html":{"name":"discouraged_optional_boolean"},"discouraged_optional_collection.html":{"name":"discouraged_optional_collection"},"duplicate_enum_cases.html":{"name":"duplicate_enum_cases"},"duplicate_imports.html":{"name":"duplicate_imports"},"duplicated_key_in_dictionary_literal.html":{"name":"duplicated_key_in_dictionary_literal"},"dynamic_inline.html":{"name":"dynamic_inline"},"empty_collection_literal.html":{"name":"empty_collection_literal"},"empty_count.html":{"name":"empty_count"},"empty_enum_arguments.html":{"name":"empty_enum_arguments"},"empty_parameters.html":{"name":"empty_parameters"},"empty_parentheses_with_trailing_closure.html":{"name":"empty_parentheses_with_trailing_closure"},"empty_string.html":{"name":"empty_string"},"empty_xctest_method.html":{"name":"empty_xctest_method"},"enum_case_associated_values_count.html":{"name":"enum_case_associated_values_count"},"expiring_todo.html":{"name":"expiring_todo"},"explicit_acl.html":{"name":"explicit_acl"},"explicit_enum_raw_value.html":{"name":"explicit_enum_raw_value"},"explicit_init.html":{"name":"explicit_init"},"explicit_self.html":{"name":"explicit_self"},"explicit_top_level_acl.html":{"name":"explicit_top_level_acl"},"explicit_type_interface.html":{"name":"explicit_type_interface"},"extension_access_modifier.html":{"name":"extension_access_modifier"},"fallthrough.html":{"name":"fallthrough"},"fatal_error_message.html":{"name":"fatal_error_message"},"file_header.html":{"name":"file_header"},"file_length.html":{"name":"file_length"},"file_name.html":{"name":"file_name"},"file_name_no_space.html":{"name":"file_name_no_space"},"file_types_order.html":{"name":"file_types_order"},"first_where.html":{"name":"first_where"},"flatmap_over_map_reduce.html":{"name":"flatmap_over_map_reduce"},"for_where.html":{"name":"for_where"},"force_cast.html":{"name":"force_cast"},"force_try.html":{"name":"force_try"},"force_unwrapping.html":{"name":"force_unwrapping"},"function_body_length.html":{"name":"function_body_length"},"function_default_parameter_at_end.html":{"name":"function_default_parameter_at_end"},"function_parameter_count.html":{"name":"function_parameter_count"},"generic_type_name.html":{"name":"generic_type_name"},"ibinspectable_in_extension.html":{"name":"ibinspectable_in_extension"},"identical_operands.html":{"name":"identical_operands"},"identifier_name.html":{"name":"identifier_name"},"implicit_getter.html":{"name":"implicit_getter"},"implicit_return.html":{"name":"implicit_return"},"implicitly_unwrapped_optional.html":{"name":"implicitly_unwrapped_optional"},"inclusive_language.html":{"name":"inclusive_language"},"indentation_width.html":{"name":"indentation_width"},"inert_defer.html":{"name":"inert_defer"},"is_disjoint.html":{"name":"is_disjoint"},"joined_default_parameter.html":{"name":"joined_default_parameter"},"large_tuple.html":{"name":"large_tuple"},"last_where.html":{"name":"last_where"},"leading_whitespace.html":{"name":"leading_whitespace"},"legacy_cggeometry_functions.html":{"name":"legacy_cggeometry_functions"},"legacy_constant.html":{"name":"legacy_constant"},"legacy_constructor.html":{"name":"legacy_constructor"},"legacy_hashing.html":{"name":"legacy_hashing"},"legacy_multiple.html":{"name":"legacy_multiple"},"legacy_nsgeometry_functions.html":{"name":"legacy_nsgeometry_functions"},"legacy_objc_type.html":{"name":"legacy_objc_type"},"legacy_random.html":{"name":"legacy_random"},"let_var_whitespace.html":{"name":"let_var_whitespace"},"line_length.html":{"name":"line_length"},"literal_expression_end_indentation.html":{"name":"literal_expression_end_indentation"},"local_doc_comment.html":{"name":"local_doc_comment"},"lower_acl_than_parent.html":{"name":"lower_acl_than_parent"},"mark.html":{"name":"mark"},"missing_docs.html":{"name":"missing_docs"},"modifier_order.html":{"name":"modifier_order"},"multiline_arguments.html":{"name":"multiline_arguments"},"multiline_arguments_brackets.html":{"name":"multiline_arguments_brackets"},"multiline_function_chains.html":{"name":"multiline_function_chains"},"multiline_literal_brackets.html":{"name":"multiline_literal_brackets"},"multiline_parameters.html":{"name":"multiline_parameters"},"multiline_parameters_brackets.html":{"name":"multiline_parameters_brackets"},"multiple_closures_with_trailing_closure.html":{"name":"multiple_closures_with_trailing_closure"},"nesting.html":{"name":"nesting"},"nimble_operator.html":{"name":"nimble_operator"},"no_extension_access_modifier.html":{"name":"no_extension_access_modifier"},"no_fallthrough_only.html":{"name":"no_fallthrough_only"},"no_grouping_extension.html":{"name":"no_grouping_extension"},"no_magic_numbers.html":{"name":"no_magic_numbers"},"no_space_in_method_call.html":{"name":"no_space_in_method_call"},"notification_center_detachment.html":{"name":"notification_center_detachment"},"ns_number_init_as_function_reference.html":{"name":"ns_number_init_as_function_reference"},"nslocalizedstring_key.html":{"name":"nslocalizedstring_key"},"nslocalizedstring_require_bundle.html":{"name":"nslocalizedstring_require_bundle"},"nsobject_prefer_isequal.html":{"name":"nsobject_prefer_isequal"},"number_separator.html":{"name":"number_separator"},"object_literal.html":{"name":"object_literal"},"opening_brace.html":{"name":"opening_brace"},"operator_usage_whitespace.html":{"name":"operator_usage_whitespace"},"operator_whitespace.html":{"name":"operator_whitespace"},"optional_enum_case_matching.html":{"name":"optional_enum_case_matching"},"orphaned_doc_comment.html":{"name":"orphaned_doc_comment"},"overridden_super_call.html":{"name":"overridden_super_call"},"override_in_extension.html":{"name":"override_in_extension"},"pattern_matching_keywords.html":{"name":"pattern_matching_keywords"},"prefer_nimble.html":{"name":"prefer_nimble"},"prefer_self_in_static_references.html":{"name":"prefer_self_in_static_references"},"prefer_self_type_over_type_of_self.html":{"name":"prefer_self_type_over_type_of_self"},"prefer_zero_over_explicit_init.html":{"name":"prefer_zero_over_explicit_init"},"prefixed_toplevel_constant.html":{"name":"prefixed_toplevel_constant"},"private_action.html":{"name":"private_action"},"private_outlet.html":{"name":"private_outlet"},"private_over_fileprivate.html":{"name":"private_over_fileprivate"},"private_subject.html":{"name":"private_subject"},"private_unit_test.html":{"name":"private_unit_test"},"prohibited_interface_builder.html":{"name":"prohibited_interface_builder"},"prohibited_super_call.html":{"name":"prohibited_super_call"},"protocol_property_accessors_order.html":{"name":"protocol_property_accessors_order"},"quick_discouraged_call.html":{"name":"quick_discouraged_call"},"quick_discouraged_focused_test.html":{"name":"quick_discouraged_focused_test"},"quick_discouraged_pending_test.html":{"name":"quick_discouraged_pending_test"},"raw_value_for_camel_cased_codable_enum.html":{"name":"raw_value_for_camel_cased_codable_enum"},"reduce_boolean.html":{"name":"reduce_boolean"},"reduce_into.html":{"name":"reduce_into"},"redundant_discardable_let.html":{"name":"redundant_discardable_let"},"redundant_nil_coalescing.html":{"name":"redundant_nil_coalescing"},"redundant_objc_attribute.html":{"name":"redundant_objc_attribute"},"redundant_optional_initialization.html":{"name":"redundant_optional_initialization"},"redundant_set_access_control.html":{"name":"redundant_set_access_control"},"redundant_string_enum_value.html":{"name":"redundant_string_enum_value"},"redundant_type_annotation.html":{"name":"redundant_type_annotation"},"redundant_void_return.html":{"name":"redundant_void_return"},"required_deinit.html":{"name":"required_deinit"},"required_enum_case.html":{"name":"required_enum_case"},"return_arrow_whitespace.html":{"name":"return_arrow_whitespace"},"return_value_from_void_function.html":{"name":"return_value_from_void_function"},"self_binding.html":{"name":"self_binding"},"self_in_property_initialization.html":{"name":"self_in_property_initialization"},"shorthand_operator.html":{"name":"shorthand_operator"},"shorthand_optional_binding.html":{"name":"shorthand_optional_binding"},"single_test_class.html":{"name":"single_test_class"},"sorted_first_last.html":{"name":"sorted_first_last"},"sorted_imports.html":{"name":"sorted_imports"},"statement_position.html":{"name":"statement_position"},"static_operator.html":{"name":"static_operator"},"strict_fileprivate.html":{"name":"strict_fileprivate"},"strong_iboutlet.html":{"name":"strong_iboutlet"},"superfluous_disable_command.html":{"name":"superfluous_disable_command"},"switch_case_alignment.html":{"name":"switch_case_alignment"},"switch_case_on_newline.html":{"name":"switch_case_on_newline"},"syntactic_sugar.html":{"name":"syntactic_sugar"},"test_case_accessibility.html":{"name":"test_case_accessibility"},"todo.html":{"name":"todo"},"toggle_bool.html":{"name":"toggle_bool"},"trailing_closure.html":{"name":"trailing_closure"},"trailing_comma.html":{"name":"trailing_comma"},"trailing_newline.html":{"name":"trailing_newline"},"trailing_semicolon.html":{"name":"trailing_semicolon"},"trailing_whitespace.html":{"name":"trailing_whitespace"},"type_body_length.html":{"name":"type_body_length"},"type_contents_order.html":{"name":"type_contents_order"},"type_name.html":{"name":"type_name"},"typesafe_array_init.html":{"name":"typesafe_array_init"},"unavailable_condition.html":{"name":"unavailable_condition"},"unavailable_function.html":{"name":"unavailable_function"},"unneeded_break_in_switch.html":{"name":"unneeded_break_in_switch"},"unneeded_parentheses_in_closure_argument.html":{"name":"unneeded_parentheses_in_closure_argument"},"unowned_variable_capture.html":{"name":"unowned_variable_capture"},"untyped_error_in_catch.html":{"name":"untyped_error_in_catch"},"unused_capture_list.html":{"name":"unused_capture_list"},"unused_closure_parameter.html":{"name":"unused_closure_parameter"},"unused_control_flow_label.html":{"name":"unused_control_flow_label"},"unused_declaration.html":{"name":"unused_declaration"},"unused_enumerated.html":{"name":"unused_enumerated"},"unused_import.html":{"name":"unused_import"},"unused_optional_binding.html":{"name":"unused_optional_binding"},"unused_setter_value.html":{"name":"unused_setter_value"},"valid_ibinspectable.html":{"name":"valid_ibinspectable"},"vertical_parameter_alignment.html":{"name":"vertical_parameter_alignment"},"vertical_parameter_alignment_on_call.html":{"name":"vertical_parameter_alignment_on_call"},"vertical_whitespace.html":{"name":"vertical_whitespace"},"vertical_whitespace_between_cases.html":{"name":"vertical_whitespace_between_cases"},"vertical_whitespace_closing_braces.html":{"name":"vertical_whitespace_closing_braces"},"vertical_whitespace_opening_braces.html":{"name":"vertical_whitespace_opening_braces"},"void_function_in_ternary.html":{"name":"void_function_in_ternary"},"void_return.html":{"name":"void_return"},"weak_delegate.html":{"name":"weak_delegate"},"xct_specific_matcher.html":{"name":"xct_specific_matcher"},"xctfail_message.html":{"name":"xctfail_message"},"yoda_condition.html":{"name":"yoda_condition"},"Structs/MarkdownReporter.html#/s:18SwiftLintFramework8ReporterP10identifierSSvpZ":{"name":"identifier","parent_name":"MarkdownReporter"},"Structs/MarkdownReporter.html#/s:18SwiftLintFramework8ReporterP10isRealtimeSbvpZ":{"name":"isRealtime","parent_name":"MarkdownReporter"},"Structs/MarkdownReporter.html#/s:s23CustomStringConvertibleP11descriptionSSvp":{"name":"description","parent_name":"MarkdownReporter"},"Structs/MarkdownReporter.html#/s:18SwiftLintFramework8ReporterP14generateReportySSSayAA14StyleViolationVGFZ":{"name":"generateReport(_:)","parent_name":"MarkdownReporter"},"Structs/JUnitReporter.html#/s:18SwiftLintFramework8ReporterP10identifierSSvpZ":{"name":"identifier","parent_name":"JUnitReporter"},"Structs/JUnitReporter.html#/s:18SwiftLintFramework8ReporterP10isRealtimeSbvpZ":{"name":"isRealtime","parent_name":"JUnitReporter"},"Structs/JUnitReporter.html#/s:s23CustomStringConvertibleP11descriptionSSvp":{"name":"description","parent_name":"JUnitReporter"},"Structs/JUnitReporter.html#/s:18SwiftLintFramework8ReporterP14generateReportySSSayAA14StyleViolationVGFZ":{"name":"generateReport(_:)","parent_name":"JUnitReporter"},"Structs/JSONReporter.html#/s:18SwiftLintFramework8ReporterP10identifierSSvpZ":{"name":"identifier","parent_name":"JSONReporter"},"Structs/JSONReporter.html#/s:18SwiftLintFramework8ReporterP10isRealtimeSbvpZ":{"name":"isRealtime","parent_name":"JSONReporter"},"Structs/JSONReporter.html#/s:s23CustomStringConvertibleP11descriptionSSvp":{"name":"description","parent_name":"JSONReporter"},"Structs/JSONReporter.html#/s:18SwiftLintFramework8ReporterP14generateReportySSSayAA14StyleViolationVGFZ":{"name":"generateReport(_:)","parent_name":"JSONReporter"},"Structs/HTMLReporter.html#/s:18SwiftLintFramework8ReporterP10identifierSSvpZ":{"name":"identifier","parent_name":"HTMLReporter"},"Structs/HTMLReporter.html#/s:18SwiftLintFramework8ReporterP10isRealtimeSbvpZ":{"name":"isRealtime","parent_name":"HTMLReporter"},"Structs/HTMLReporter.html#/s:s23CustomStringConvertibleP11descriptionSSvp":{"name":"description","parent_name":"HTMLReporter"},"Structs/HTMLReporter.html#/s:18SwiftLintFramework8ReporterP14generateReportySSSayAA14StyleViolationVGFZ":{"name":"generateReport(_:)","parent_name":"HTMLReporter"},"Structs/GitHubActionsLoggingReporter.html#/s:18SwiftLintFramework8ReporterP10identifierSSvpZ":{"name":"identifier","parent_name":"GitHubActionsLoggingReporter"},"Structs/GitHubActionsLoggingReporter.html#/s:18SwiftLintFramework8ReporterP10isRealtimeSbvpZ":{"name":"isRealtime","parent_name":"GitHubActionsLoggingReporter"},"Structs/GitHubActionsLoggingReporter.html#/s:s23CustomStringConvertibleP11descriptionSSvp":{"name":"description","parent_name":"GitHubActionsLoggingReporter"},"Structs/GitHubActionsLoggingReporter.html#/s:18SwiftLintFramework8ReporterP14generateReportySSSayAA14StyleViolationVGFZ":{"name":"generateReport(_:)","parent_name":"GitHubActionsLoggingReporter"},"Structs/EmojiReporter.html#/s:18SwiftLintFramework8ReporterP10identifierSSvpZ":{"name":"identifier","parent_name":"EmojiReporter"},"Structs/EmojiReporter.html#/s:18SwiftLintFramework8ReporterP10isRealtimeSbvpZ":{"name":"isRealtime","parent_name":"EmojiReporter"},"Structs/EmojiReporter.html#/s:s23CustomStringConvertibleP11descriptionSSvp":{"name":"description","parent_name":"EmojiReporter"},"Structs/EmojiReporter.html#/s:18SwiftLintFramework8ReporterP14generateReportySSSayAA14StyleViolationVGFZ":{"name":"generateReport(_:)","parent_name":"EmojiReporter"},"Structs/CodeClimateReporter.html#/s:18SwiftLintFramework8ReporterP10identifierSSvpZ":{"name":"identifier","parent_name":"CodeClimateReporter"},"Structs/CodeClimateReporter.html#/s:18SwiftLintFramework8ReporterP10isRealtimeSbvpZ":{"name":"isRealtime","parent_name":"CodeClimateReporter"},"Structs/CodeClimateReporter.html#/s:s23CustomStringConvertibleP11descriptionSSvp":{"name":"description","parent_name":"CodeClimateReporter"},"Structs/CodeClimateReporter.html#/s:18SwiftLintFramework8ReporterP14generateReportySSSayAA14StyleViolationVGFZ":{"name":"generateReport(_:)","parent_name":"CodeClimateReporter"},"Structs/CheckstyleReporter.html#/s:18SwiftLintFramework8ReporterP10identifierSSvpZ":{"name":"identifier","parent_name":"CheckstyleReporter"},"Structs/CheckstyleReporter.html#/s:18SwiftLintFramework8ReporterP10isRealtimeSbvpZ":{"name":"isRealtime","parent_name":"CheckstyleReporter"},"Structs/CheckstyleReporter.html#/s:s23CustomStringConvertibleP11descriptionSSvp":{"name":"description","parent_name":"CheckstyleReporter"},"Structs/CheckstyleReporter.html#/s:18SwiftLintFramework8ReporterP14generateReportySSSayAA14StyleViolationVGFZ":{"name":"generateReport(_:)","parent_name":"CheckstyleReporter"},"Structs/CSVReporter.html#/s:18SwiftLintFramework8ReporterP10identifierSSvpZ":{"name":"identifier","parent_name":"CSVReporter"},"Structs/CSVReporter.html#/s:18SwiftLintFramework8ReporterP10isRealtimeSbvpZ":{"name":"isRealtime","parent_name":"CSVReporter"},"Structs/CSVReporter.html#/s:s23CustomStringConvertibleP11descriptionSSvp":{"name":"description","parent_name":"CSVReporter"},"Structs/CSVReporter.html#/s:18SwiftLintFramework8ReporterP14generateReportySSSayAA14StyleViolationVGFZ":{"name":"generateReport(_:)","parent_name":"CSVReporter"},"Structs/CSVReporter.html":{"name":"CSVReporter","abstract":"
Reports violations as a newline-separated string of comma-separated values (CSV).
"},"Structs/CheckstyleReporter.html":{"name":"CheckstyleReporter","abstract":"
Reports violations as XML conforming to the Checkstyle specification, as defined here:"},"Structs/CodeClimateReporter.html":{"name":"CodeClimateReporter","abstract":"
Reports violations as a JSON array in Code Climate format.
"},"Structs/EmojiReporter.html":{"name":"EmojiReporter","abstract":"
Reports violations in the format that’s both fun and easy to read.
"},"Structs/GitHubActionsLoggingReporter.html":{"name":"GitHubActionsLoggingReporter","abstract":"
Reports violations in the format GitHub-hosted virtual machine for Actions can recognize as messages.
"},"Structs/HTMLReporter.html":{"name":"HTMLReporter","abstract":"
Reports violations as HTML.
"},"Structs/JSONReporter.html":{"name":"JSONReporter","abstract":"
Reports violations as a JSON array.
"},"Structs/JUnitReporter.html":{"name":"JUnitReporter","abstract":"
Reports violations as JUnit XML.
"},"Structs/MarkdownReporter.html":{"name":"MarkdownReporter","abstract":"
Reports violations as markdown formated (with tables).
"},"rule-directory.html":{"name":"Rule Directory"},"Rules.html":{"name":"Rules"},"Reporters.html":{"name":"Reporters"},"Guides.html":{"name":"Guides","abstract":"
The following guides are available globally.
"},"Classes.html":{"name":"Classes","abstract":"
The following classes are available globally.
"},"Global%20Variables.html":{"name":"Global Variables","abstract":"
The following global variables are available globally.
"},"Enums.html":{"name":"Enumerations","abstract":"
The following enumerations are available globally.
"},"Extensions.html":{"name":"Extensions","abstract":"
The following extensions are available globally.
"},"Functions.html":{"name":"Functions","abstract":"
The following functions are available globally.
"},"Protocols.html":{"name":"Protocols","abstract":"
The following protocols are available globally.
"},"Structs.html":{"name":"Structures","abstract":"
The following structures are available globally.
"}}
\ No newline at end of file
diff --git a/self_binding.html b/self_binding.html
new file mode 100644
index 000000000..877fc8378
--- /dev/null
+++ b/self_binding.html
@@ -0,0 +1,372 @@
+
+
+
+
self_binding Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SwiftLintFramework Reference
+
+ self_binding Reference
+
+
+
+
+
+
+
+
+
+
+
+
Self Binding
+
+
Re-bind self to a consistent identifier name.
+
+
+Identifier: self_binding
+Enabled by default: No
+Supports autocorrection: Yes
+Kind: style
+Analyzer rule: No
+Minimum Swift compiler version: 5.0.0
+Default configuration: warning, bindIdentifier: self
+
+
Non Triggering Examples
+
if let self = self { return }
+
+
guard let self = self else else { return }
+
+
if let this = this { return }
+
+
guard let this = this else else { return }
+
+
if let this = self { return }
+
+
guard let this = self else else { return }
+
+
Triggering Examples
+
if let ↓ ` self ` = self { return }
+
+
guard let ↓ ` self ` = self else else { return }
+
+
if let ↓ this = self { return }
+
+
guard let ↓ this = self else else { return }
+
+
if let ↓ self = self { return }
+
+
guard let ↓ self = self else { return }
+
+
if let ↓ self { return }
+
+
guard let ↓ self else { return }
+
+
+
+
+
+
+
+
+
+
+
diff --git a/self_in_property_initialization.html b/self_in_property_initialization.html
new file mode 100644
index 000000000..fde89c849
--- /dev/null
+++ b/self_in_property_initialization.html
@@ -0,0 +1,392 @@
+
+
+
+
self_in_property_initialization Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SwiftLintFramework Reference
+
+ self_in_property_initialization Reference
+
+
+
+
+
+
+
+
+
+
+
+
Self in Property Initialization
+
+
self refers to the unapplied NSObject.self() method, which is likely not expected. Make the variable lazy to be able to refer to the current instance or use ClassName.self.
+
+
+Identifier: self_in_property_initialization
+Enabled by default: Yes
+Supports autocorrection: No
+Kind: lint
+Analyzer rule: No
+Minimum Swift compiler version: 5.0.0
+Default configuration: warning
+
+
Non Triggering Examples
+
class View : UIView {
+ let button : UIButton = {
+ return UIButton ()
+ }()
+}
+
+
class View : UIView {
+ lazy var button : UIButton = {
+ let button = UIButton ()
+ button . addTarget ( self , action : #selector( didTapButton ) , for : . touchUpInside )
+ return button
+ }()
+}
+
+
class View : UIView {
+ var button : UIButton = {
+ let button = UIButton ()
+ button . addTarget ( otherObject , action : #selector( didTapButton ) , for : . touchUpInside )
+ return button
+ }()
+}
+
+
class View : UIView {
+ private let collectionView : UICollectionView = {
+ let layout = UICollectionViewFlowLayout ()
+ let collectionView = UICollectionView ( frame : . zero , collectionViewLayout : layout )
+ collectionView . registerReusable ( Cell . self )
+
+ return collectionView
+ }()
+}
+
+
Triggering Examples
+
class View : UIView {
+ ↓ var button : UIButton = {
+ let button = UIButton ()
+ button . addTarget ( self , action : #selector( didTapButton ) , for : . touchUpInside )
+ return button
+ }()
+}
+
+
class View : UIView {
+ ↓ let button : UIButton = {
+ let button = UIButton ()
+ button . addTarget ( self , action : #selector( didTapButton ) , for : . touchUpInside )
+ return button
+ }()
+}
+
+
+
+
+
+
+
+
+
+
+
diff --git a/shorthand_operator.html b/shorthand_operator.html
new file mode 100644
index 000000000..893bb0467
--- /dev/null
+++ b/shorthand_operator.html
@@ -0,0 +1,495 @@
+
+
+
+
shorthand_operator Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SwiftLintFramework Reference
+
+ shorthand_operator Reference
+
+
+
+
+
+
+
+
+
+
+
+
Shorthand Operator
+
+
Prefer shorthand operators (+=, -=, *=, /=) over doing the operation and assigning.
+
+
+Identifier: shorthand_operator
+Enabled by default: Yes
+Supports autocorrection: No
+Kind: style
+Analyzer rule: No
+Minimum Swift compiler version: 5.0.0
+Default configuration: error
+
+
Non Triggering Examples
+
foo -= 1
+
+
foo -= variable
+
+
foo -= bar . method ()
+
+
self . foo = foo - 1
+
+
foo = self . foo - 1
+
+
page = ceilf ( currentOffset - pageWidth )
+
+
foo = aMethod ( foo - bar )
+
+
foo = aMethod ( bar - foo )
+
+
public func -= ( lhs : inout Foo , rhs : Int ) {
+ lhs = lhs - rhs
+}
+
+
foo /= 1
+
+
foo /= variable
+
+
foo /= bar . method ()
+
+
self . foo = foo / 1
+
+
foo = self . foo / 1
+
+
page = ceilf ( currentOffset / pageWidth )
+
+
foo = aMethod ( foo / bar )
+
+
foo = aMethod ( bar / foo )
+
+
public func /= ( lhs : inout Foo , rhs : Int ) {
+ lhs = lhs / rhs
+}
+
+
foo += 1
+
+
foo += variable
+
+
foo += bar . method ()
+
+
self . foo = foo + 1
+
+
foo = self . foo + 1
+
+
page = ceilf ( currentOffset + pageWidth )
+
+
foo = aMethod ( foo + bar )
+
+
foo = aMethod ( bar + foo )
+
+
public func += ( lhs : inout Foo , rhs : Int ) {
+ lhs = lhs + rhs
+}
+
+
foo *= 1
+
+
foo *= variable
+
+
foo *= bar . method ()
+
+
self . foo = foo * 1
+
+
foo = self . foo * 1
+
+
page = ceilf ( currentOffset * pageWidth )
+
+
foo = aMethod ( foo * bar )
+
+
foo = aMethod ( bar * foo )
+
+
public func *= ( lhs : inout Foo , rhs : Int ) {
+ lhs = lhs * rhs
+}
+
+
var helloWorld = "world!"
+ helloWorld = "Hello, " + helloWorld
+
+
angle = someCheck ? angle : - angle
+
+
seconds = seconds * 60 + value
+
+
Triggering Examples
+
↓ foo = foo - 1
+
+
+
↓ foo = foo - aVariable
+
+
+
↓ foo = foo - bar . method ()
+
+
+
↓ foo . aProperty = foo . aProperty - 1
+
+
+
↓ self . aProperty = self . aProperty - 1
+
+
+
↓ foo = foo / 1
+
+
+
↓ foo = foo / aVariable
+
+
+
↓ foo = foo / bar . method ()
+
+
+
↓ foo . aProperty = foo . aProperty / 1
+
+
+
↓ self . aProperty = self . aProperty / 1
+
+
+
↓ foo = foo + 1
+
+
+
↓ foo = foo + aVariable
+
+
+
↓ foo = foo + bar . method ()
+
+
+
↓ foo . aProperty = foo . aProperty + 1
+
+
+
↓ self . aProperty = self . aProperty + 1
+
+
+
↓ foo = foo * 1
+
+
+
↓ foo = foo * aVariable
+
+
+
↓ foo = foo * bar . method ()
+
+
+
↓ foo . aProperty = foo . aProperty * 1
+
+
+
↓ self . aProperty = self . aProperty * 1
+
+
+
↓ n = n + i / outputLength
+
+
↓ n = n - i / outputLength
+
+
+
+
+
+
+
+
+
+
+
diff --git a/shorthand_optional_binding.html b/shorthand_optional_binding.html
new file mode 100644
index 000000000..71d68f620
--- /dev/null
+++ b/shorthand_optional_binding.html
@@ -0,0 +1,366 @@
+
+
+
+
shorthand_optional_binding Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SwiftLintFramework Reference
+
+ shorthand_optional_binding Reference
+
+
+
+
+
+
+
+
+
+
+
+
Shorthand Optional Binding
+
+
Use shorthand syntax for optional binding
+
+
+Identifier: shorthand_optional_binding
+Enabled by default: No
+Supports autocorrection: Yes
+Kind: idiomatic
+Analyzer rule: No
+Minimum Swift compiler version: 5.7.0
+Default configuration: warning
+
+
Non Triggering Examples
+
if let i {}
+ if let i = a {}
+ guard let i = f () else {}
+ if var i = i () {}
+ if let i = i as? Foo {}
+ guard let ` self ` = self else {}
+ while var i { i = nil }
+
+
Triggering Examples
+
if ↓ let i = i {}
+ if ↓ let self = self {}
+ if ↓ var ` self ` = ` self ` {}
+ if i > 0 , ↓ let j = j {}
+ if ↓ let i = i , ↓ var j = j {}
+
+
guard ↓ let i = i else {}
+ guard ↓ let self = self else {}
+ guard ↓ var ` self ` = ` self ` else {}
+ guard i > 0 , ↓ let j = j else {}
+ guard ↓ let i = i , ↓ var j = j else {}
+
+
while ↓ var i = i { i = nil }
+
+
+
+
+
+
+
+
+
+
+
diff --git a/single_test_class.html b/single_test_class.html
new file mode 100644
index 000000000..5eed2254a
--- /dev/null
+++ b/single_test_class.html
@@ -0,0 +1,378 @@
+
+
+
+
single_test_class Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SwiftLintFramework Reference
+
+ single_test_class Reference
+
+
+
+
+
+
+
+
+
+
+
+
Single Test Class
+
+
Test files should contain a single QuickSpec or XCTestCase class.
+
+
+Identifier: single_test_class
+Enabled by default: No
+Supports autocorrection: No
+Kind: style
+Analyzer rule: No
+Minimum Swift compiler version: 5.0.0
+Default configuration: warning, test_parent_classes: [“QuickSpec”, “XCTestCase”]
+
+
Non Triggering Examples
+
class FooTests { }
+
+
+
class FooTests : QuickSpec { }
+
+
+
class FooTests : XCTestCase { }
+
+
+
Triggering Examples
+
↓ class FooTests : QuickSpec { }
+↓ class BarTests : QuickSpec { }
+
+
↓ class FooTests : QuickSpec { }
+↓ class BarTests : QuickSpec { }
+↓ class TotoTests : QuickSpec { }
+
+
↓ class FooTests : XCTestCase { }
+↓ class BarTests : XCTestCase { }
+
+
↓ class FooTests : XCTestCase { }
+↓ class BarTests : XCTestCase { }
+↓ class TotoTests : XCTestCase { }
+
+
↓ class FooTests : QuickSpec { }
+↓ class BarTests : XCTestCase { }
+
+
↓ class FooTests : QuickSpec { }
+↓ class BarTests : XCTestCase { }
+class TotoTests { }
+
+
final ↓ class FooTests : QuickSpec { }
+↓ class BarTests : XCTestCase { }
+class TotoTests { }
+
+
+
+
+
+
+
+
+
+
+
diff --git a/sorted_first_last.html b/sorted_first_last.html
new file mode 100644
index 000000000..44b096ca5
--- /dev/null
+++ b/sorted_first_last.html
@@ -0,0 +1,414 @@
+
+
+
+
sorted_first_last Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SwiftLintFramework Reference
+
+ sorted_first_last Reference
+
+
+
+
+
+
+
+
+
+
+
+
Min or Max over Sorted First or Last
+
+
Prefer using min() or max() over sorted().first or sorted().last
+
+
+Identifier: sorted_first_last
+Enabled by default: No
+Supports autocorrection: No
+Kind: performance
+Analyzer rule: No
+Minimum Swift compiler version: 5.0.0
+Default configuration: warning
+
+
Non Triggering Examples
+
let min = myList . min ()
+
+
+
let min = myList . min ( by : { $0 < $1 })
+
+
+
let min = myList . min ( by : > )
+
+
+
let max = myList . max ()
+
+
+
let max = myList . max ( by : { $0 < $1 })
+
+
+
let message = messages . sorted ( byKeyPath : #keyPath( Message.timestamp ) ) . last
+
+
let message = messages . sorted ( byKeyPath : "timestamp" , ascending : false ) . first
+
+
myList . sorted () . firstIndex ( of : key )
+
+
myList . sorted () . lastIndex ( of : key )
+
+
myList . sorted () . firstIndex ( where : someFunction )
+
+
myList . sorted () . lastIndex ( where : someFunction )
+
+
myList . sorted () . firstIndex { $0 == key }
+
+
myList . sorted () . lastIndex { $0 == key }
+
+
Triggering Examples
+
↓ myList . sorted () . first
+
+
+
↓ myList . sorted ( by : { $0 . description < $1 . description }) . first
+
+
+
↓ myList . sorted ( by : > ) . first
+
+
+
↓ myList . map { $0 + 1 } . sorted () . first
+
+
+
↓ myList . sorted ( by : someFunction ) . first
+
+
+
↓ myList . map { $0 + 1 } . sorted { $0 . description < $1 . description } . first
+
+
+
↓ myList . sorted () . last
+
+
+
↓ myList . sorted () . last ? . something ()
+
+
+
↓ myList . sorted ( by : { $0 . description < $1 . description }) . last
+
+
+
↓ myList . map { $0 + 1 } . sorted () . last
+
+
+
↓ myList . sorted ( by : someFunction ) . last
+
+
+
↓ myList . map { $0 + 1 } . sorted { $0 . description < $1 . description } . last
+
+
+
↓ myList . map { $0 + 1 } . sorted { $0 . first < $1 . first } . last
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/sorted_imports.html b/sorted_imports.html
new file mode 100644
index 000000000..2a47968a8
--- /dev/null
+++ b/sorted_imports.html
@@ -0,0 +1,406 @@
+
+
+
+
sorted_imports Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SwiftLintFramework Reference
+
+ sorted_imports Reference
+
+
+
+
+
+
+
+
+
+
+
+
Sorted Imports
+
+
Imports should be sorted.
+
+
+Identifier: sorted_imports
+Enabled by default: No
+Supports autocorrection: Yes
+Kind: style
+Analyzer rule: No
+Minimum Swift compiler version: 5.0.0
+Default configuration: warning
+
+
Non Triggering Examples
+
import AAA
+import BBB
+import CCC
+import DDD
+
+
import Alamofire
+import API
+
+
import labc
+import Ldef
+
+
import BBB
+// comment
+import AAA
+import CCC
+
+
@testable import AAA
+import CCC
+
+
import AAA
+@testable import CCC
+
+
import EEE . A
+import FFF . B
+#if os(Linux)
+import DDD . A
+import EEE . B
+#else
+import CCC
+import DDD . B
+#endif
+import AAA
+import BBB
+
+
Triggering Examples
+
import AAA
+import ZZZ
+import ↓ BBB
+import CCC
+
+
import DDD
+// comment
+import CCC
+import ↓ AAA
+
+
@testable import CCC
+import ↓ AAA
+
+
import CCC
+@testable import ↓ AAA
+
+
import FFF . B
+import ↓ EEE . A
+#if os(Linux)
+import DDD . A
+import EEE . B
+#else
+import DDD . B
+import ↓ CCC
+#endif
+import AAA
+import BBB
+
+
+
+
+
+
+
+
+
+
+
diff --git a/statement_position.html b/statement_position.html
new file mode 100644
index 000000000..1fb8974c6
--- /dev/null
+++ b/statement_position.html
@@ -0,0 +1,372 @@
+
+
+
+
statement_position Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SwiftLintFramework Reference
+
+ statement_position Reference
+
+
+
+
+
+
+
+
+
+
+
+
Statement Position
+
+
Else and catch should be on the same line, one space after the previous declaration.
+
+
+Identifier: statement_position
+Enabled by default: Yes
+Supports autocorrection: Yes
+Kind: style
+Analyzer rule: No
+Minimum Swift compiler version: 5.0.0
+Default configuration: (statement_mode) default, (severity) warning
+
+
Non Triggering Examples
+
} else if {
+
+
} else {
+
+
} catch {
+
+
"}else{"
+
+
struct A { let catchphrase : Int }
+let a = A (
+ catchphrase : 0
+)
+
+
struct A { let ` catch `: Int }
+let a = A (
+ ` catch `: 0
+)
+
+
Triggering Examples
+
↓ } else if {
+
+
↓ } else {
+
+
↓ }
+catch {
+
+
↓ }
+ catch {
+
+
+
+
+
+
+
+
+
+
+
diff --git a/static_operator.html b/static_operator.html
new file mode 100644
index 000000000..e20af9ac7
--- /dev/null
+++ b/static_operator.html
@@ -0,0 +1,398 @@
+
+
+
+
static_operator Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SwiftLintFramework Reference
+
+ static_operator Reference
+
+
+
+
+
+
+
+
+
+
+
+
Static Operator
+
+
Operators should be declared as static functions, not free functions.
+
+
+Identifier: static_operator
+Enabled by default: No
+Supports autocorrection: No
+Kind: idiomatic
+Analyzer rule: No
+Minimum Swift compiler version: 5.0.0
+Default configuration: warning
+
+
Non Triggering Examples
+
class A : Equatable {
+ static func == ( lhs : A , rhs : A ) -> Bool {
+ return false
+ }
+
+
class A < T > : Equatable {
+ static func == < T > ( lhs : A < T > , rhs : A < T > ) -> Bool {
+ return false
+ }
+
+
public extension Array where Element == Rule {
+ static func == ( lhs : Array , rhs : Array ) -> Bool {
+ if lhs . count != rhs . count { return false }
+ return ! zip ( lhs , rhs ) . contains { ! $0 . 0 . isEqualTo ( $0 . 1 ) }
+ }
+}
+
+
private extension Optional where Wrapped : Comparable {
+ static func < ( lhs : Optional , rhs : Optional ) -> Bool {
+ switch ( lhs , rhs ) {
+ case let ( lhs ? , rhs ? ):
+ return lhs < rhs
+ case ( nil , _ ?):
+ return true
+ default :
+ return false
+ }
+ }
+}
+
+
Triggering Examples
+
↓ func == ( lhs : A , rhs : A ) -> Bool {
+ return false
+}
+
+
↓ func == < T > ( lhs : A < T > , rhs : A < T > ) -> Bool {
+ return false
+}
+
+
↓ func == ( lhs : [ Rule ], rhs : [ Rule ]) -> Bool {
+ if lhs . count != rhs . count { return false }
+ return ! zip ( lhs , rhs ) . contains { ! $0 . 0 . isEqualTo ( $0 . 1 ) }
+}
+
+
private ↓ func < < T : Comparable > ( lhs : T ?, rhs : T ?) -> Bool {
+ switch ( lhs , rhs ) {
+ case let ( lhs ? , rhs ? ):
+ return lhs < rhs
+ case ( nil , _ ?):
+ return true
+ default :
+ return false
+ }
+}
+
+
+
+
+
+
+
+
+
+
+
diff --git a/strict_fileprivate.html b/strict_fileprivate.html
new file mode 100644
index 000000000..f1ed9e4b4
--- /dev/null
+++ b/strict_fileprivate.html
@@ -0,0 +1,382 @@
+
+
+
+
strict_fileprivate Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SwiftLintFramework Reference
+
+ strict_fileprivate Reference
+
+
+
+
+
+
+
+
+
+
+
+
Strict fileprivate
+
+
fileprivate should be avoided.
+
+
+Identifier: strict_fileprivate
+Enabled by default: No
+Supports autocorrection: No
+Kind: idiomatic
+Analyzer rule: No
+Minimum Swift compiler version: 5.0.0
+Default configuration: warning
+
+
Non Triggering Examples
+
extension String {}
+
+
private extension String {}
+
+
public
+extension String {}
+
+
open extension
+ String {}
+
+
internal extension String {}
+
+
Triggering Examples
+
↓ fileprivate extension String {}
+
+
↓ fileprivate
+ extension String {}
+
+
↓ fileprivate extension
+ String {}
+
+
extension String {
+ ↓ fileprivate func Something (){}
+}
+
+
class MyClass {
+ ↓ fileprivate let myInt = 4
+}
+
+
class MyClass {
+ ↓ fileprivate ( set ) var myInt = 4
+}
+
+
struct Outter {
+ struct Inter {
+ ↓ fileprivate struct Inner {}
+ }
+}
+
+
+
+
+
+
+
+
+
+
+
diff --git a/strong_iboutlet.html b/strong_iboutlet.html
new file mode 100644
index 000000000..ad59812f6
--- /dev/null
+++ b/strong_iboutlet.html
@@ -0,0 +1,364 @@
+
+
+
+
strong_iboutlet Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SwiftLintFramework Reference
+
+ strong_iboutlet Reference
+
+
+
+
+
+
+
+
+
+
+
+
Strong IBOutlet
+
+
@IBOutlets shouldn’t be declared as weak.
+
+
+Identifier: strong_iboutlet
+Enabled by default: No
+Supports autocorrection: Yes
+Kind: lint
+Analyzer rule: No
+Minimum Swift compiler version: 5.0.0
+Default configuration: warning
+
+
Non Triggering Examples
+
class ViewController : UIViewController {
+ @IBOutlet var label : UILabel ?
+}
+
+
class ViewController : UIViewController {
+ weak var label : UILabel ?
+}
+
+
Triggering Examples
+
class ViewController : UIViewController {
+ @IBOutlet ↓ weak var label : UILabel ?
+}
+
+
class ViewController : UIViewController {
+ @IBOutlet ↓ unowned var label : UILabel !
+}
+
+
class ViewController : UIViewController {
+ @IBOutlet ↓ weak var textField : UITextField ?
+}
+
+
+
+
+
+
+
+
+
+
+
diff --git a/superfluous_disable_command.html b/superfluous_disable_command.html
new file mode 100644
index 000000000..431253af8
--- /dev/null
+++ b/superfluous_disable_command.html
@@ -0,0 +1,342 @@
+
+
+
+
superfluous_disable_command Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SwiftLintFramework Reference
+
+ superfluous_disable_command Reference
+
+
+
+
+
+
+
+
+
+
+
+
Superfluous Disable Command
+
+
SwiftLint ‘disable’ commands are superfluous when the disabled rule would not have triggered a violation in the disabled region. Use “ - ” if you wish to document a command.
+
+
+Identifier: superfluous_disable_command
+Enabled by default: Yes
+Supports autocorrection: No
+Kind: lint
+Analyzer rule: No
+Minimum Swift compiler version: 5.0.0
+Default configuration: warning
+
+
+
+
+
+
+
+
+
+
+
diff --git a/swift-syntax-dashboard.html b/swift-syntax-dashboard.html
new file mode 100644
index 000000000..a8c4a53f7
--- /dev/null
+++ b/swift-syntax-dashboard.html
@@ -0,0 +1,571 @@
+
+
+
+
Swift Syntax Dashboard Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SwiftLintFramework Reference
+
+ Swift Syntax Dashboard Reference
+
+
+
+
+
+
+
+
+
+
+
+
Swift Syntax Dashboard
+
+
Efforts are actively under way to migrate most rules off SourceKit to use SwiftSyntax instead.
+
+
Rules written using SwiftSyntax tend to be significantly faster and have fewer false positives
+than rules that use SourceKit to get source structure information.
+
+
47 out of 215 (21%)
+of SwiftLint’s linter rules use SourceKit.
+
Rules Using SourceKit
+
Enabled By Default (16)
+
+
+
Opt-In (31)
+
+
+
Rules Not Using SourceKit
+
Enabled By Default (75)
+
+
+
Opt-In (93)
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/switch_case_alignment.html b/switch_case_alignment.html
new file mode 100644
index 000000000..5c40e28c0
--- /dev/null
+++ b/switch_case_alignment.html
@@ -0,0 +1,420 @@
+
+
+
+
switch_case_alignment Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SwiftLintFramework Reference
+
+ switch_case_alignment Reference
+
+
+
+
+
+
+
+
+
+
+
+
Switch and Case Statement Alignment
+
+
Case statements should vertically align with their enclosing switch statement, or indented if configured otherwise.
+
+
+Identifier: switch_case_alignment
+Enabled by default: Yes
+Supports autocorrection: No
+Kind: style
+Analyzer rule: No
+Minimum Swift compiler version: 5.0.0
+Default configuration: warning, indented_cases: false
+
+
Non Triggering Examples
+
switch someBool {
+case true : // case 1
+ print ( ' red ' )
+case false :
+ /*
+ case 2
+ */
+ if case let . someEnum ( val ) = someFunc () {
+ print ( ' blue ' )
+ }
+}
+enum SomeEnum {
+ case innocent
+}
+
+
if aBool {
+ switch someBool {
+ case true :
+ print ( ' red ' )
+ case false :
+ print ( ' blue ' )
+ }
+}
+
+
switch someInt {
+// comments ignored
+case 0 :
+ // zero case
+ print ( ' Zero ' )
+case 1 :
+ print ( ' One ' )
+default :
+ print ( ' Some other number ' )
+}
+
+
Triggering Examples
+
switch someBool {
+ ↓ case true :
+ print ( "red" )
+ ↓ case false :
+ print ( "blue" )
+}
+
+
if aBool {
+ switch someBool {
+ ↓ case true :
+ print ( ' red ' )
+ ↓ case false :
+ print ( ' blue ' )
+ }
+}
+
+
switch someInt {
+ ↓ case 0 :
+ print ( ' Zero ' )
+ ↓ case 1 :
+ print ( ' One ' )
+ ↓ default :
+ print ( ' Some other number ' )
+}
+
+
switch someBool {
+case true :
+ print ( ' red ' )
+ ↓ case false :
+ print ( ' blue ' )
+}
+
+
if aBool {
+ switch someBool {
+ ↓ case true :
+ print ( ' red ' )
+ case false :
+ print ( ' blue ' )
+ }
+}
+
+
+
+
+
+
+
+
+
+
+
diff --git a/switch_case_on_newline.html b/switch_case_on_newline.html
new file mode 100644
index 000000000..6786256af
--- /dev/null
+++ b/switch_case_on_newline.html
@@ -0,0 +1,458 @@
+
+
+
+
switch_case_on_newline Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SwiftLintFramework Reference
+
+ switch_case_on_newline Reference
+
+
+
+
+
+
+
+
+
+
+
+
Switch Case on Newline
+
+
Cases inside a switch should always be on a newline
+
+
+Identifier: switch_case_on_newline
+Enabled by default: No
+Supports autocorrection: No
+Kind: style
+Analyzer rule: No
+Minimum Swift compiler version: 5.0.0
+Default configuration: warning
+
+
Non Triggering Examples
+
/*case 1: */ return true
+
+
//case 1:
+ return true
+
+
let x = [ caseKey : value ]
+
+
let x = [ key : . default ]
+
+
if case let . someEnum ( value ) = aFunction ([ key : 2 ]) { }
+
+
guard case let . someEnum ( value ) = aFunction ([ key : 2 ]) { }
+
+
for case let . someEnum ( value ) = aFunction ([ key : 2 ]) { }
+
+
enum Environment {
+ case development
+}
+
+
enum Environment {
+ case development ( url : URL )
+}
+
+
enum Environment {
+ case development ( url : URL ) // staging
+}
+
+
switch foo {
+ case 1 :
+ return true
+}
+
+
switch foo {
+ default :
+ return true
+}
+
+
switch foo {
+ case let value :
+ return true
+}
+
+
switch foo {
+ case . myCase : // error from network
+ return true
+}
+
+
switch foo {
+ case let . myCase ( value ) where value > 10 :
+ return false
+}
+
+
switch foo {
+ case let . myCase ( value )
+ where value > 10 :
+ return false
+}
+
+
switch foo {
+ case let . myCase ( code : lhsErrorCode , description : _ )
+ where lhsErrorCode > 10 :
+return false
+}
+
+
switch foo {
+ case #selector( aFunction(_:) ) :
+ return false
+
+}
+
+
do {
+ let loadedToken = try tokenManager . decodeToken ( from : response )
+ return loadedToken
+} catch { throw error }
+
+
Triggering Examples
+
switch foo {
+ ↓ case 1 : return true
+}
+
+
switch foo {
+ ↓ case let value : return true
+}
+
+
switch foo {
+ ↓ default : return true
+}
+
+
switch foo {
+ ↓ case "a string" : return false
+}
+
+
switch foo {
+ ↓ case . myCase : return false // error from network
+}
+
+
switch foo {
+ ↓ case let . myCase ( value ) where value > 10 : return false
+}
+
+
switch foo {
+ ↓ case #selector( aFunction(_:) ) : return false
+
+}
+
+
switch foo {
+ ↓ case let . myCase ( value )
+ where value > 10 : return false
+}
+
+
switch foo {
+ ↓ case . first ,
+ . second : return false
+}
+
+
+
+
+
+
+
+
+
+
+
diff --git a/syntactic_sugar.html b/syntactic_sugar.html
new file mode 100644
index 000000000..7df8d27b7
--- /dev/null
+++ b/syntactic_sugar.html
@@ -0,0 +1,424 @@
+
+
+
+
syntactic_sugar Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SwiftLintFramework Reference
+
+ syntactic_sugar Reference
+
+
+
+
+
+
+
+
+
+
+
+
Syntactic Sugar
+
+
Shorthand syntactic sugar should be used, i.e. [Int] instead of Array.
+
+
+Identifier: syntactic_sugar
+Enabled by default: Yes
+Supports autocorrection: Yes
+Kind: idiomatic
+Analyzer rule: No
+Minimum Swift compiler version: 5.0.0
+Default configuration: warning
+
+
Non Triggering Examples
+
let x : [ Int ]
+
+
let x : [ Int : String ]
+
+
let x : Int ?
+
+
func x ( a : [ Int ], b : Int ) -> [ Int : Any ]
+
+
let x : Int !
+
+
extension Array {
+ func x () { }
+}
+
+
extension Dictionary {
+ func x () { }
+}
+
+
let x : CustomArray < String >
+
+
var currentIndex : Array < OnboardingPage >. Index ?
+
+
func x ( a : [ Int ], b : Int ) -> Array < Int >. Index
+
+
unsafeBitCast ( nonOptionalT , to : Optional < T >. self )
+
+
unsafeBitCast ( someType , to : Swift . Array < T >. self )
+
+
IndexingIterator < Array < Dictionary < String , AnyObject >>>. self
+
+
let y = Optional < String >. Type
+
+
type is Optional < String >. Type
+
+
let x : Foo . Optional < String >
+
+
let x = case Optional < Any >. none = obj
+
+
let a = Swift . Optional < String ? >. none
+
+
Triggering Examples
+
let x : ↓ Array < String >
+
+
let x : ↓ Dictionary < Int , String >
+
+
let x : ↓ Optional < Int >
+
+
let x : ↓ Swift . Array < String >
+
+
func x ( a : ↓ Array < Int > , b : Int ) -> [ Int : Any ]
+
+
func x ( a : ↓ Swift . Array < Int > , b : Int ) -> [ Int : Any ]
+
+
func x ( a : [ Int ], b : Int ) -> ↓ Dictionary < Int , String >
+
+
let x = y as? ↓ Array < [ String : Any ] >
+
+
let x = Box < Array < T >> ()
+
+
func x () -> Box < ↓ Array < T >>
+
+
func x () -> ↓ Dictionary < String , Any > ?
+
+
typealias Document = ↓ Dictionary < String , T ? >
+
+
func x ( _ y : inout ↓ Array < T > )
+
+
let x : ↓ Dictionary < String , ↓ Dictionary < Int , Int >>
+
+
func x () -> Any { return ↓ Dictionary < Int , String > ()}
+
+
let x = ↓ Array < String >. array ( of : object )
+
+
let x = ↓ Swift . Array < String >. array ( of : object )
+
+
@_specialize ( where S == ↓ Array < Character > )
+public init < S : Sequence > ( _ elements : S )
+
+
let dict : [ String : Any ] = [:]
+_ = dict [ "key" ] as? ↓ Optional < String ? > ?? Optional < String ? >. none
+
+
+
+
+
+
+
+
+
+
+
diff --git a/test_case_accessibility.html b/test_case_accessibility.html
new file mode 100644
index 000000000..beae792c3
--- /dev/null
+++ b/test_case_accessibility.html
@@ -0,0 +1,438 @@
+
+
+
+
test_case_accessibility Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SwiftLintFramework Reference
+
+ test_case_accessibility Reference
+
+
+
+
+
+
+
+
+
+
+
+
Test case accessibility
+
+
Test cases should only contain private non-test members.
+
+
+Identifier: test_case_accessibility
+Enabled by default: No
+Supports autocorrection: Yes
+Kind: lint
+Analyzer rule: No
+Minimum Swift compiler version: 5.0.0
+Default configuration: warning, allowed_prefixes: [], test_parent_classes: [“QuickSpec”, “XCTestCase”]
+
+
Non Triggering Examples
+
let foo : String ?
+
+
let foo : String ?
+
+class FooTests : XCTestCase {
+ static let allTests : [ String ] = []
+
+ private let foo : String {
+ let nestedMember = "hi"
+ return nestedMember
+ }
+
+ override static func setUp () {
+ super . setUp ()
+ }
+
+ override func setUp () {
+ super . setUp ()
+ }
+
+ override func setUpWithError () throws {
+ try super . setUpWithError ()
+ }
+
+ override static func tearDown () {
+ super . tearDown ()
+ }
+
+ override func tearDown () {
+ super . tearDown ()
+ }
+
+ override func tearDownWithError () {
+ try super . tearDownWithError ()
+ }
+
+ override func someFutureXCTestFunction () {
+ super . someFutureXCTestFunction ()
+ }
+
+ func testFoo () {
+ XCTAssertTrue ( true )
+ }
+
+ func testBar () {
+ func nestedFunc () {}
+ }
+
+ private someFunc ( hasParam : Bool ) {}
+}
+
+
class FooTests : XCTestCase {
+ private struct MockSomething : Something {}
+}
+
+
class FooTests : XCTestCase {
+ func allowedPrefixTestFoo () {}
+}
+
+
class Foobar {
+ func setUp () {}
+
+ func tearDown () {}
+
+ func testFoo () {}
+}
+
+
Triggering Examples
+
class FooTests : XCTestCase {
+ ↓ typealias Bar = Foo . Bar
+
+ ↓ var foo : String ?
+ ↓ let bar : String ?
+
+ ↓ static func foo () {}
+
+ ↓ func setUp ( withParam : String ) {}
+
+ ↓ func foobar () {}
+
+ ↓ func not_testBar () {}
+
+ ↓ enum Nested {}
+
+ ↓ static func testFoo () {}
+
+ ↓ static func allTests () {}
+
+ ↓ func testFoo ( hasParam : Bool ) {}
+}
+
+final class BarTests : XCTestCase {
+ ↓ class Nested {}
+}
+
+
+
+
+
+
+
+
+
+
+
diff --git a/todo.html b/todo.html
new file mode 100644
index 000000000..38020ab42
--- /dev/null
+++ b/todo.html
@@ -0,0 +1,374 @@
+
+
+
+
todo Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SwiftLintFramework Reference
+
+ todo Reference
+
+
+
+
+
+
+
+
+
+
+
+
Todo
+
+
TODOs and FIXMEs should be resolved.
+
+
+Identifier: todo
+Enabled by default: Yes
+Supports autocorrection: No
+Kind: lint
+Analyzer rule: No
+Minimum Swift compiler version: 5.0.0
+Default configuration: warning
+
+
Non Triggering Examples
+
// notaTODO:
+
+
+
// notaFIXME:
+
+
+
Triggering Examples
+
// ↓TODO:
+
+
+
// ↓FIXME:
+
+
+
// ↓TODO(note)
+
+
+
// ↓FIXME(note)
+
+
+
/* ↓FIXME: */
+
+
+
/* ↓TODO: */
+
+
+
/** ↓FIXME: */
+
+
+
/** ↓TODO: */
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/toggle_bool.html b/toggle_bool.html
new file mode 100644
index 000000000..5aa60189e
--- /dev/null
+++ b/toggle_bool.html
@@ -0,0 +1,368 @@
+
+
+
+
toggle_bool Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SwiftLintFramework Reference
+
+ toggle_bool Reference
+
+
+
+
+
+
+
+
+
+
+
+
Toggle Bool
+
+
Prefer someBool.toggle() over someBool = !someBool.
+
+
+Identifier: toggle_bool
+Enabled by default: No
+Supports autocorrection: Yes
+Kind: idiomatic
+Analyzer rule: No
+Minimum Swift compiler version: 5.0.0
+Default configuration: warning
+
+
Non Triggering Examples
+
isHidden . toggle ()
+
+
+
view . clipsToBounds . toggle ()
+
+
+
func foo () { abc . toggle () }
+
+
view . clipsToBounds = ! clipsToBounds
+
+
+
disconnected = ! connected
+
+
+
result = ! result . toggle ()
+
+
Triggering Examples
+
↓ isHidden = ! isHidden
+
+
+
↓ view . clipsToBounds = ! view . clipsToBounds
+
+
+
func foo () { ↓ abc = ! abc }
+
+
+
+
+
+
+
+
+
+
+
diff --git a/trailing_closure.html b/trailing_closure.html
new file mode 100644
index 000000000..3ab6c1ac0
--- /dev/null
+++ b/trailing_closure.html
@@ -0,0 +1,380 @@
+
+
+
+
trailing_closure Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SwiftLintFramework Reference
+
+ trailing_closure Reference
+
+
+
+
+
+
+
+
+
+
+
+
Trailing Closure
+
+
Trailing closure syntax should be used whenever possible.
+
+
+Identifier: trailing_closure
+Enabled by default: No
+Supports autocorrection: No
+Kind: style
+Analyzer rule: No
+Minimum Swift compiler version: 5.0.0
+Default configuration: warning, only_single_muted_parameter: false
+
+
Non Triggering Examples
+
foo . map { $0 + 1 }
+
+
+
foo . bar ()
+
+
+
foo . reduce ( 0 ) { $0 + 1 }
+
+
+
if let foo = bar . map ({ $0 + 1 }) { }
+
+
+
foo . something ( param1 : { $0 }, param2 : { $0 + 1 })
+
+
+
offsets . sorted { $0 . offset < $1 . offset }
+
+
+
foo . something ({ return 1 }())
+
+
foo . something ({ return $0 }( 1 ))
+
+
foo . something ( 0 , { return 1 }())
+
+
Triggering Examples
+
↓ foo . map ({ $0 + 1 })
+
+
+
↓ foo . reduce ( 0 , combine : { $0 + 1 })
+
+
+
↓ offsets . sorted ( by : { $0 . offset < $1 . offset })
+
+
+
↓ foo . something ( 0 , { $0 + 1 })
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/trailing_comma.html b/trailing_comma.html
new file mode 100644
index 000000000..d20565865
--- /dev/null
+++ b/trailing_comma.html
@@ -0,0 +1,409 @@
+
+
+
+
trailing_comma Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SwiftLintFramework Reference
+
+ trailing_comma Reference
+
+
+
+
+
+
+
+
+
+
+
+
Trailing Comma
+
+
Trailing commas in arrays and dictionaries should be avoided/enforced.
+
+
+Identifier: trailing_comma
+Enabled by default: Yes
+Supports autocorrection: Yes
+Kind: style
+Analyzer rule: No
+Minimum Swift compiler version: 5.0.0
+Default configuration: warning, mandatory_comma: false
+
+
Non Triggering Examples
+
let foo = [ 1 , 2 , 3 ]
+
+
+
let foo = []
+
+
+
let foo = [:]
+
+
+
let foo = [ 1 : 2 , 2 : 3 ]
+
+
+
let foo = [ Void ]()
+
+
+
let example = [ 1 ,
+ 2
+ // 3,
+]
+
+
foo ([ 1 : " \( error ) " ])
+
+
+
let foo = [ Int ]()
+
+
+
Triggering Examples
+
let foo = [ 1 , 2 , 3 ↓ ,]
+
+
+
let foo = [ 1 , 2 , 3 ↓ , ]
+
+
+
let foo = [ 1 , 2 , 3 ↓ ,]
+
+
+
let foo = [ 1 : 2 , 2 : 3 ↓ , ]
+
+
+
struct Bar {
+ let foo = [ 1 : 2 , 2 : 3 ↓ , ]
+}
+
+
+
let foo = [ 1 , 2 , 3 ↓ ,] + [ 4 , 5 , 6 ↓ ,]
+
+
+
let example = [ 1 ,
+2 ↓ ,
+ // 3,
+]
+
+
let foo = [ "אבג" , "αβγ" , "🇺🇸" ↓ ,]
+
+
+
class C {
+ #if true
+ func f () {
+ let foo = [ 1 , 2 , 3 ↓ ,]
+ }
+ #endif
+}
+
+
foo ([ 1 : " \( error ) " ↓ ,])
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/trailing_newline.html b/trailing_newline.html
new file mode 100644
index 000000000..ae1ec6400
--- /dev/null
+++ b/trailing_newline.html
@@ -0,0 +1,353 @@
+
+
+
+
trailing_newline Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SwiftLintFramework Reference
+
+ trailing_newline Reference
+
+
+
+
+
+
+
+
+
+
+
+
Trailing Newline
+
+
Files should have a single trailing newline.
+
+
+Identifier: trailing_newline
+Enabled by default: Yes
+Supports autocorrection: Yes
+Kind: style
+Analyzer rule: No
+Minimum Swift compiler version: 5.0.0
+Default configuration: warning
+
+
Non Triggering Examples
+
let a = 0
+
+
+
Triggering Examples
+
let a = 0
+
+
let a = 0
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/trailing_semicolon.html b/trailing_semicolon.html
new file mode 100644
index 000000000..c1dde716a
--- /dev/null
+++ b/trailing_semicolon.html
@@ -0,0 +1,356 @@
+
+
+
+
trailing_semicolon Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SwiftLintFramework Reference
+
+ trailing_semicolon Reference
+
+
+
+
+
+
+
+
+
+
+
+
Trailing Semicolon
+
+
Lines should not have trailing semicolons.
+
+
+Identifier: trailing_semicolon
+Enabled by default: Yes
+Supports autocorrection: Yes
+Kind: idiomatic
+Analyzer rule: No
+Minimum Swift compiler version: 5.0.0
+Default configuration: warning
+
+
Non Triggering Examples
+
let a = 0
+
+
+
let a = 0 ; let b = 0
+
+
Triggering Examples
+
let a = 0 ↓ ;
+
+
+
let a = 0 ↓ ;
+let b = 1
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/trailing_whitespace.html b/trailing_whitespace.html
new file mode 100644
index 000000000..5e384d110
--- /dev/null
+++ b/trailing_whitespace.html
@@ -0,0 +1,365 @@
+
+
+
+
trailing_whitespace Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SwiftLintFramework Reference
+
+ trailing_whitespace Reference
+
+
+
+
+
+
+
+
+
+
+
+
Trailing Whitespace
+
+
Lines should not have trailing whitespace.
+
+
+Identifier: trailing_whitespace
+Enabled by default: Yes
+Supports autocorrection: Yes
+Kind: style
+Analyzer rule: No
+Minimum Swift compiler version: 5.0.0
+Default configuration: warning, ignores_empty_lines: false, ignores_comments: true
+
+
Non Triggering Examples
+
let name : String
+
+
+
//
+
+
+
//
+
+
+
let name : String //
+
+
+
let name : String //
+
+
+
Triggering Examples
+
let name : String
+
+
+
/* */ let name : String
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/type_body_length.html b/type_body_length.html
new file mode 100644
index 000000000..8bef98734
--- /dev/null
+++ b/type_body_length.html
@@ -0,0 +1,5444 @@
+
+
+
+
type_body_length Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SwiftLintFramework Reference
+
+ type_body_length Reference
+
+
+
+
+
+
+
+
+
+
+
+
Type Body Length
+
+
Type bodies should not span too many lines.
+
+
+Identifier: type_body_length
+Enabled by default: Yes
+Supports autocorrection: No
+Kind: metrics
+Analyzer rule: No
+Minimum Swift compiler version: 5.0.0
+Default configuration: warning: 250, error: 350
+
+
Non Triggering Examples
+
class Abc {
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+}
+
+
+
class Abc {
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+}
+
+
+
class Abc {
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+}
+
+
+
class Abc {
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+
+/* this is
+a multiline comment
+*/
+}
+
+
+
struct Abc {
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+}
+
+
+
struct Abc {
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+}
+
+
+
struct Abc {
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+}
+
+
+
struct Abc {
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+
+/* this is
+a multiline comment
+*/
+}
+
+
+
enum Abc {
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+}
+
+
+
enum Abc {
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+}
+
+
+
enum Abc {
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+}
+
+
+
enum Abc {
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+
+/* this is
+a multiline comment
+*/
+}
+
+
+
actor Abc {
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+}
+
+
+
actor Abc {
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+}
+
+
+
actor Abc {
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+// this is a comment
+}
+
+
+
actor Abc {
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+
+/* this is
+a multiline comment
+*/
+}
+
+
+
Triggering Examples
+
↓ class Abc {
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+}
+
+
+
↓ struct Abc {
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+}
+
+
+
↓ enum Abc {
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+}
+
+
+
↓ actor Abc {
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+let abc = 0
+}
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/type_contents_order.html b/type_contents_order.html
new file mode 100644
index 000000000..382700d9c
--- /dev/null
+++ b/type_contents_order.html
@@ -0,0 +1,565 @@
+
+
+
+
type_contents_order Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SwiftLintFramework Reference
+
+ type_contents_order Reference
+
+
+
+
+
+
+
+
+
+
+
+
Type Contents Order
+
+
Specifies the order of subtypes, properties, methods & more within a type.
+
+
+Identifier: type_contents_order
+Enabled by default: No
+Supports autocorrection: No
+Kind: style
+Analyzer rule: No
+Minimum Swift compiler version: 5.0.0
+Default configuration: warning, order: [[SwiftLintFramework.TypeContent.case], [SwiftLintFramework.TypeContent.typeAlias, SwiftLintFramework.TypeContent.associatedType], [SwiftLintFramework.TypeContent.subtype], [SwiftLintFramework.TypeContent.typeProperty], [SwiftLintFramework.TypeContent.instanceProperty], [SwiftLintFramework.TypeContent.ibInspectable], [SwiftLintFramework.TypeContent.ibOutlet], [SwiftLintFramework.TypeContent.initializer], [SwiftLintFramework.TypeContent.typeMethod], [SwiftLintFramework.TypeContent.viewLifeCycleMethod], [SwiftLintFramework.TypeContent.ibAction], [SwiftLintFramework.TypeContent.otherMethod], [SwiftLintFramework.TypeContent.subscript], [SwiftLintFramework.TypeContent.deinitializer]]
+
+
Non Triggering Examples
+
class TestViewController : UIViewController {
+ // Type Aliases
+ typealias CompletionHandler = (( TestEnum ) -> Void )
+
+ // Subtypes
+ class TestClass {
+ // 10 lines
+ }
+
+ struct TestStruct {
+ // 3 lines
+ }
+
+ enum TestEnum {
+ // 5 lines
+ }
+
+ // Type Properties
+ static let cellIdentifier : String = "AmazingCell"
+
+ // Instance Properties
+ var shouldLayoutView1 : Bool !
+ weak var delegate : TestViewControllerDelegate ?
+ private var hasLayoutedView1 : Bool = false
+ private var hasLayoutedView2 : Bool = false
+
+ private var hasAnyLayoutedView : Bool {
+ return hasLayoutedView1 || hasLayoutedView2
+ }
+
+ // IBOutlets
+ @IBOutlet private var view1 : UIView !
+ @IBOutlet private var view2 : UIView !
+
+ // Initializers
+ override init ( nibName nibNameOrNil : String ?, bundle nibBundleOrNil : Bundle ?) {
+ super . init ( nibName : nibNameOrNil , bundle : nibBundleOrNil )
+ }
+
+ required init ?( coder aDecoder : NSCoder ) {
+ fatalError ( "init(coder:) has not been implemented" )
+ }
+
+ // Type Methods
+ static func makeViewController () -> TestViewController {
+ // some code
+ }
+
+ // View Life-Cycle Methods
+ override func viewDidLoad () {
+ super . viewDidLoad ()
+
+ view1 . setNeedsLayout ()
+ view1 . layoutIfNeeded ()
+ hasLayoutedView1 = true
+ }
+
+ override func willMove ( toParent parent : UIViewController ?) {
+ super . willMove ( toParent : parent )
+ if parent == nil {
+ viewModel . willMoveToParent ()
+ }
+ }
+
+ override func viewDidLayoutSubviews () {
+ super . viewDidLayoutSubviews ()
+
+ view2 . setNeedsLayout ()
+ view2 . layoutIfNeeded ()
+ hasLayoutedView2 = true
+ }
+
+ // IBActions
+ @IBAction func goNextButtonPressed () {
+ goToNextVc ()
+ delegate ? . didPressTrackedButton ()
+ }
+
+ // Other Methods
+ func goToNextVc () { /* TODO */ }
+
+ func goToInfoVc () { /* TODO */ }
+
+ func goToRandomVc () {
+ let viewCtrl = getRandomVc ()
+ present ( viewCtrl , animated : true )
+ }
+
+ private func getRandomVc () -> UIViewController { return UIViewController () }
+
+ // Subscripts
+ subscript ( _ someIndexThatIsNotEvenUsed : Int ) -> String {
+ get {
+ return "This is just a test"
+ }
+
+ set {
+ log . warning ( "Just a test" , newValue )
+ }
+ }
+
+ deinit {
+ log . debug ( "deinit" )
+ },
+}
+
+
Triggering Examples
+
class TestViewController : UIViewController {
+ // Subtypes
+ ↓ class TestClass {
+ // 10 lines
+ }
+
+ // Type Aliases
+ typealias CompletionHandler = (( TestEnum ) -> Void )
+}
+
+
class TestViewController : UIViewController {
+ // Stored Type Properties
+ ↓ static let cellIdentifier : String = "AmazingCell"
+
+ // Subtypes
+ class TestClass {
+ // 10 lines
+ }
+}
+
+
class TestViewController : UIViewController {
+ // Stored Instance Properties
+ ↓ var shouldLayoutView1 : Bool !
+
+ // Stored Type Properties
+ static let cellIdentifier : String = "AmazingCell"
+}
+
+
class TestViewController : UIViewController {
+ // IBOutlets
+ @IBOutlet private ↓ var view1 : UIView !
+
+ // Computed Instance Properties
+ private var hasAnyLayoutedView : Bool {
+ return hasLayoutedView1 || hasLayoutedView2
+ }
+}
+
+
class TestViewController : UIViewController {
+
+ // deinitializer
+ ↓ deinit {
+ log . debug ( "deinit" )
+ }
+
+ // Initializers
+ override ↓ init ( nibName nibNameOrNil : String ?, bundle nibBundleOrNil : Bundle ?) {
+ super . init ( nibName : nibNameOrNil , bundle : nibBundleOrNil )
+ }
+
+ // IBOutlets
+ @IBOutlet private var view1 : UIView !
+ @IBOutlet private var view2 : UIView !
+}
+
+
class TestViewController : UIViewController {
+ // View Life-Cycle Methods
+ override ↓ func viewDidLoad () {
+ super . viewDidLoad ()
+
+ view1 . setNeedsLayout ()
+ view1 . layoutIfNeeded ()
+ hasLayoutedView1 = true
+ }
+
+ // Type Methods
+ static func makeViewController () -> TestViewController {
+ // some code
+ }
+}
+
+
class TestViewController : UIViewController {
+ // IBActions
+ @IBAction ↓ func goNextButtonPressed () {
+ goToNextVc ()
+ delegate ? . didPressTrackedButton ()
+ }
+
+ // View Life-Cycle Methods
+ override func viewDidLoad () {
+ super . viewDidLoad ()
+
+ view1 . setNeedsLayout ()
+ view1 . layoutIfNeeded ()
+ hasLayoutedView1 = true
+ }
+}
+
+
class TestViewController : UIViewController {
+ // Other Methods
+ ↓ func goToNextVc () { /* TODO */ }
+
+ // IBActions
+ @IBAction func goNextButtonPressed () {
+ goToNextVc ()
+ delegate ? . didPressTrackedButton ()
+ }
+}
+
+
class TestViewController : UIViewController {
+ // Subscripts
+ ↓ subscript ( _ someIndexThatIsNotEvenUsed : Int ) -> String {
+ get {
+ return "This is just a test"
+ }
+
+ set {
+ log . warning ( "Just a test" , newValue )
+ }
+ }
+
+ // MARK: Other Methods
+ func goToNextVc () { /* TODO */ }
+}
+
+
+
+
+
+
+
+
+
+
+
diff --git a/type_name.html b/type_name.html
new file mode 100644
index 000000000..cf9877a2f
--- /dev/null
+++ b/type_name.html
@@ -0,0 +1,411 @@
+
+
+
+
type_name Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SwiftLintFramework Reference
+
+ type_name Reference
+
+
+
+
+
+
+
+
+
+
+
+
Type Name
+
+
Type name should only contain alphanumeric characters, start with an uppercase character and span between 3 and 40 characters in length.
+Private types may start with an underscore.
+
+
+Identifier: type_name
+Enabled by default: Yes
+Supports autocorrection: No
+Kind: idiomatic
+Analyzer rule: No
+Minimum Swift compiler version: 5.0.0
+Default configuration: (min_length) w/e: 3/0, (max_length) w/e: 40/1000, excluded: [], allowed_symbols: [], validates_start_with_lowercase: true, validate_protocols: true
+
+
Non Triggering Examples
+
class MyType {}
+
+
private struct _MyType {}
+
+
enum AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA {}
+
+
typealias Foo = Void
+
+
private typealias Foo = Void
+
+
protocol Foo {
+ associatedtype Bar
+}
+
+
protocol Foo {
+ associatedtype Bar : Equatable
+}
+
+
enum MyType {
+case value
+}
+
+
protocol P {}
+
+
struct SomeStruct {
+ enum ` Type ` {
+ case x , y , z
+ }
+}
+
+
Triggering Examples
+
class ↓ myType {}
+
+
enum ↓ _MyType {}
+
+
private struct ↓ MyType_ {}
+
+
struct ↓ My {}
+
+
struct ↓ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA {}
+
+
class ↓ MyView_Previews
+
+
private struct ↓ _MyView_Previews
+
+
typealias ↓ X = Void
+
+
private typealias ↓ Foo_Bar = Void
+
+
private typealias ↓ foo = Void
+
+
typealias ↓ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA = Void
+
+
protocol Foo {
+ associatedtype ↓ X
+}
+
+
protocol Foo {
+ associatedtype ↓ Foo_Bar : Equatable
+}
+
+
protocol Foo {
+ associatedtype ↓ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+}
+
+
protocol ↓ X {}
+
+
+
+
+
+
+
+
+
+
+
diff --git a/typesafe_array_init.html b/typesafe_array_init.html
new file mode 100644
index 000000000..039efa9c1
--- /dev/null
+++ b/typesafe_array_init.html
@@ -0,0 +1,372 @@
+
+
+
+
typesafe_array_init Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SwiftLintFramework Reference
+
+ typesafe_array_init Reference
+
+
+
+
+
+
+
+
+
+
+
+
Type-safe Array Init
+
+
Prefer using Array(seq) over seq.map { $0 } to convert a sequence into an Array.
+
+
+Identifier: typesafe_array_init
+Enabled by default: No
+Supports autocorrection: No
+Kind: lint
+Analyzer rule: Yes
+Minimum Swift compiler version: 5.0.0
+Default configuration: warning
+
+
Non Triggering Examples
+
enum MyError : Error {}
+ let myResult : Result < String , MyError > = . success ( "" )
+ let result : Result < Any , MyError > = myResult . map { $0 }
+
+
struct IntArray {
+ let elements = [ 1 , 2 , 3 ]
+ func map < T > ( _ transformer : ( Int ) throws -> T ) rethrows -> [ T ] {
+ try elements . map ( transformer )
+ }
+ }
+ let ints = IntArray ()
+ let intsCopy = ints . map { $0 }
+
+
Triggering Examples
+
func f < Seq : Sequence > ( s : Seq ) -> [ Seq . Element ] {
+ s . ↓ map ({ $0 })
+ }
+
+
func f ( array : [ Int ]) -> [ Int ] {
+ array . ↓ map { $0 }
+ }
+
+
let myInts = [ 1 , 2 , 3 ] . ↓ map { return $0 }
+
+
struct Generator : Sequence , IteratorProtocol {
+ func next () -> Int ? { nil }
+ }
+ let array = Generator () . ↓ map { i in i }
+
+
+
+
+
+
+
+
+
+
+
diff --git a/unavailable_condition.html b/unavailable_condition.html
new file mode 100644
index 000000000..8d0e01035
--- /dev/null
+++ b/unavailable_condition.html
@@ -0,0 +1,382 @@
+
+
+
+
unavailable_condition Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SwiftLintFramework Reference
+
+ unavailable_condition Reference
+
+
+
+
+
+
+
+
+
+
+
+
Unavailable Condition
+
+
Use #unavailable/#available instead of #available/#unavailable with an empty body.
+
+
+Identifier: unavailable_condition
+Enabled by default: Yes
+Supports autocorrection: No
+Kind: idiomatic
+Analyzer rule: No
+Minimum Swift compiler version: 5.6.0
+Default configuration: warning
+
+
Non Triggering Examples
+
if # unavailable ( iOS 13 ) {
+ loadMainWindow ()
+}
+
+
if #available(iOS 9.0, *) {
+ doSomething ()
+} else {
+ legacyDoSomething ()
+}
+
+
if #available(macOS 11.0, *) {
+ // Do nothing
+} else if #available(macOS 10.15, *) {
+ print ( "do some stuff" )
+}
+
+
Triggering Examples
+
if ↓ #available(iOS 14.0) {
+
+} else {
+ oldIos13TrackingLogic ( isEnabled : ASIdentifierManager . shared () . isAdvertisingTrackingEnabled )
+}
+
+
if ↓ #available(iOS 14.0) {
+ // we don't need to do anything here
+} else {
+ oldIos13TrackingLogic ( isEnabled : ASIdentifierManager . shared () . isAdvertisingTrackingEnabled )
+}
+
+
if ↓ #available(iOS 13, *) {} else {
+ loadMainWindow ()
+}
+
+
if ↓# unavailable ( iOS 13 ) {
+ // Do nothing
+} else if i < 2 {
+ loadMainWindow ()
+}
+
+
+
+
+
+
+
+
+
+
+
diff --git a/unavailable_function.html b/unavailable_function.html
new file mode 100644
index 000000000..f06b4cc94
--- /dev/null
+++ b/unavailable_function.html
@@ -0,0 +1,393 @@
+
+
+
+
unavailable_function Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SwiftLintFramework Reference
+
+ unavailable_function Reference
+
+
+
+
+
+
+
+
+
+
+
+
Unavailable Function
+
+
Unimplemented functions should be marked as unavailable.
+
+
+Identifier: unavailable_function
+Enabled by default: No
+Supports autocorrection: No
+Kind: idiomatic
+Analyzer rule: No
+Minimum Swift compiler version: 5.0.0
+Default configuration: warning
+
+
Non Triggering Examples
+
class ViewController : UIViewController {
+ @available ( * , unavailable )
+ public required init ?( coder aDecoder : NSCoder ) {
+ preconditionFailure ( "init(coder:) has not been implemented" )
+ }
+}
+
+
func jsonValue ( _ jsonString : String ) -> NSObject {
+ let data = jsonString . data ( using : . utf8 ) !
+ let result = try! JSONSerialization . jsonObject ( with : data , options : [])
+ if let dict = ( result as? [ String : Any ])? . bridge () {
+ return dict
+ } else if let array = ( result as? [ Any ])? . bridge () {
+ return array
+ }
+ fatalError ()
+}
+
+
func resetOnboardingStateAndCrash () -> Never {
+ resetUserDefaults ()
+ // Crash the app to re-start the onboarding flow.
+ fatalError ( "Onboarding re-start crash." )
+}
+
+
Triggering Examples
+
class ViewController : UIViewController {
+ public required ↓ init ?( coder aDecoder : NSCoder ) {
+ fatalError ( "init(coder:) has not been implemented" )
+ }
+}
+
+
class ViewController : UIViewController {
+ public required ↓ init ?( coder aDecoder : NSCoder ) {
+ let reason = "init(coder:) has not been implemented"
+ fatalError ( reason )
+ }
+}
+
+
class ViewController : UIViewController {
+ public required ↓ init ?( coder aDecoder : NSCoder ) {
+ preconditionFailure ( "init(coder:) has not been implemented" )
+ }
+}
+
+
↓ func resetOnboardingStateAndCrash () {
+ resetUserDefaults ()
+ // Crash the app to re-start the onboarding flow.
+ fatalError ( "Onboarding re-start crash." )
+}
+
+
+
+
+
+
+
+
+
+
+
diff --git a/undocumented.json b/undocumented.json
new file mode 100644
index 000000000..ec7e65616
--- /dev/null
+++ b/undocumented.json
@@ -0,0 +1,6 @@
+{
+ "warnings": [
+
+ ],
+ "source_directory": "/Users/runner/work/1/s"
+}
\ No newline at end of file
diff --git a/unneeded_break_in_switch.html b/unneeded_break_in_switch.html
new file mode 100644
index 000000000..6c221706e
--- /dev/null
+++ b/unneeded_break_in_switch.html
@@ -0,0 +1,405 @@
+
+
+
+
unneeded_break_in_switch Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SwiftLintFramework Reference
+
+ unneeded_break_in_switch Reference
+
+
+
+
+
+
+
+
+
+
+
+
Unneeded Break in Switch
+
+
Avoid using unneeded break statements.
+
+
+Identifier: unneeded_break_in_switch
+Enabled by default: Yes
+Supports autocorrection: No
+Kind: idiomatic
+Analyzer rule: No
+Minimum Swift compiler version: 5.0.0
+Default configuration: warning
+
+
Non Triggering Examples
+
switch foo {
+case . bar :
+ break
+}
+
+
switch foo {
+default :
+ break
+}
+
+
switch foo {
+case . bar :
+ for i in [ 0 , 1 , 2 ] { break }
+}
+
+
switch foo {
+case . bar :
+ if true { break }
+}
+
+
switch foo {
+case . bar :
+ something ()
+}
+
+
let items = [ Int ]()
+for item in items {
+ if bar () {
+ do {
+ try foo ()
+ } catch {
+ bar ()
+ break
+ }
+ }
+}
+
+
Triggering Examples
+
switch foo {
+case . bar :
+ something ()
+ ↓ break
+}
+
+
switch foo {
+case . bar :
+ something ()
+ ↓ break // comment
+}
+
+
switch foo {
+default :
+ something ()
+ ↓ break
+}
+
+
switch foo {
+case . foo , . foo2 where condition :
+ something ()
+ ↓ break
+}
+
+
+
+
+
+
+
+
+
+
+
diff --git a/unneeded_parentheses_in_closure_argument.html b/unneeded_parentheses_in_closure_argument.html
new file mode 100644
index 000000000..464a6cab7
--- /dev/null
+++ b/unneeded_parentheses_in_closure_argument.html
@@ -0,0 +1,395 @@
+
+
+
+
unneeded_parentheses_in_closure_argument Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SwiftLintFramework Reference
+
+ unneeded_parentheses_in_closure_argument Reference
+
+
+
+
+
+
+
+
+
+
+
+
Unneeded Parentheses in Closure Argument
+
+
Parentheses are not needed when declaring closure arguments.
+
+
+Identifier: unneeded_parentheses_in_closure_argument
+Enabled by default: No
+Supports autocorrection: Yes
+Kind: style
+Analyzer rule: No
+Minimum Swift compiler version: 5.0.0
+Default configuration: warning
+
+
Non Triggering Examples
+
let foo = { ( bar : Int ) in }
+
+
+
let foo = { bar , _ in }
+
+
+
let foo = { bar in }
+
+
+
let foo = { bar -> Bool in return true }
+
+
+
DispatchQueue . main . async { () -> Void in
+ doSomething ()
+}
+
+
Triggering Examples
+
call ( arg : { ↓ ( bar ) in })
+
+
+
call ( arg : { ↓ ( bar , _ ) in })
+
+
+
let foo = { ↓ ( bar ) -> Bool in return true }
+
+
+
foo . map { ( $0 , $0 ) } . forEach { ↓ ( x , y ) in }
+
+
foo . bar { [ weak self ] ↓ ( x , y ) in }
+
+
[] . first { ↓ ( temp ) in
+ [] . first { ↓ ( temp ) in
+ [] . first { ↓ ( temp ) in
+ _ = temp
+ return false
+ }
+ return false
+ }
+ return false
+}
+
+
[] . first { temp in
+ [] . first { ↓ ( temp ) in
+ [] . first { ↓ ( temp ) in
+ _ = temp
+ return false
+ }
+ return false
+ }
+ return false
+}
+
+
+
+
+
+
+
+
+
+
+
diff --git a/unowned_variable_capture.html b/unowned_variable_capture.html
new file mode 100644
index 000000000..8b420ea49
--- /dev/null
+++ b/unowned_variable_capture.html
@@ -0,0 +1,362 @@
+
+
+
+
unowned_variable_capture Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SwiftLintFramework Reference
+
+ unowned_variable_capture Reference
+
+
+
+
+
+
+
+
+
+
+
+
Unowned Variable Capture
+
+
Prefer capturing references as weak to avoid potential crashes.
+
+
+Identifier: unowned_variable_capture
+Enabled by default: No
+Supports autocorrection: No
+Kind: lint
+Analyzer rule: No
+Minimum Swift compiler version: 5.0.0
+Default configuration: warning
+
+
Non Triggering Examples
+
foo { [ weak self ] in _ }
+
+
foo { [ weak self ] param in _ }
+
+
foo { [ weak bar ] in _ }
+
+
foo { [ weak bar ] param in _ }
+
+
foo { bar in _ }
+
+
foo { $0 }
+
+
Triggering Examples
+
foo { [ ↓ unowned self ] in _ }
+
+
foo { [ ↓ unowned bar ] in _ }
+
+
foo { [ bar , ↓ unowned self ] in _ }
+
+
+
+
+
+
+
+
+
+
+
diff --git a/untyped_error_in_catch.html b/untyped_error_in_catch.html
new file mode 100644
index 000000000..0e260ab61
--- /dev/null
+++ b/untyped_error_in_catch.html
@@ -0,0 +1,399 @@
+
+
+
+
untyped_error_in_catch Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SwiftLintFramework Reference
+
+ untyped_error_in_catch Reference
+
+
+
+
+
+
+
+
+
+
+
+
Untyped Error in Catch
+
+
Catch statements should not declare error variables without type casting.
+
+
+Identifier: untyped_error_in_catch
+Enabled by default: No
+Supports autocorrection: Yes
+Kind: idiomatic
+Analyzer rule: No
+Minimum Swift compiler version: 5.0.0
+Default configuration: warning
+
+
Non Triggering Examples
+
do {
+ try foo ()
+} catch {}
+
+
do {
+ try foo ()
+} catch Error . invalidOperation {
+} catch {}
+
+
do {
+ try foo ()
+} catch let error as MyError {
+} catch {}
+
+
do {
+ try foo ()
+} catch var error as MyError {
+} catch {}
+
+
do {
+ try something ()
+} catch let e where e . code == . fileError {
+ // can be ignored
+} catch {
+ print ( error )
+}
+
+
Triggering Examples
+
do {
+ try foo ()
+} ↓ catch var error {}
+
+
do {
+ try foo ()
+} ↓ catch let error {}
+
+
do {
+ try foo ()
+} ↓ catch let someError {}
+
+
do {
+ try foo ()
+} ↓ catch var someError {}
+
+
do {
+ try foo ()
+} ↓ catch let e {}
+
+
do {
+ try foo ()
+} ↓ catch ( let error ) {}
+
+
do {
+ try foo ()
+} ↓ catch ( let error ) {}
+
+
+
+
+
+
+
+
+
+
+
diff --git a/unused_capture_list.html b/unused_capture_list.html
new file mode 100644
index 000000000..47033fc0d
--- /dev/null
+++ b/unused_capture_list.html
@@ -0,0 +1,434 @@
+
+
+
+
unused_capture_list Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SwiftLintFramework Reference
+
+ unused_capture_list Reference
+
+
+
+
+
+
+
+
+
+
+
+
Unused Capture List
+
+
Unused reference in a capture list should be removed.
+
+
+Identifier: unused_capture_list
+Enabled by default: Yes
+Supports autocorrection: No
+Kind: lint
+Analyzer rule: No
+Minimum Swift compiler version: 5.0.0
+Default configuration: warning
+
+
Non Triggering Examples
+
[ 1 , 2 ] . map {
+ [ weak
+ delegate ,
+ unowned
+ self
+ ] num in
+ delegate . handle ( num )
+}
+
+
[ 1 , 2 ] . map { [ weak self ] num in
+ self ? . handle ( num )
+}
+
+
let failure : Failure = { [ weak self , unowned delegate = self . delegate ! ] foo in
+ delegate . handle ( foo , self )
+}
+
+
numbers . forEach ({
+ [ weak handler ] in
+ handler ? . handle ( $0 )
+})
+
+
withEnvironment ( apiService : MockService ( fetchProjectResponse : project )) {
+ [ Device . phone4_7inch , Device . phone5_8inch , Device . pad ] . forEach { device in
+ device . handle ()
+ }
+}
+
+
{ [ foo ] _ in foo . bar () }()
+
+
sizes . max () . flatMap { [( offset : offset , size : $0 )] } ?? []
+
+
[ 1 , 2 ] . map { [ self ] num in
+ handle ( num )
+}
+
+
[ 1 , 2 ] . map { [ unowned self ] num in
+ handle ( num )
+}
+
+
[ 1 , 2 ] . map { [ self , unowned delegate = self . delegate ! ] num in
+ delegate . handle ( num )
+}
+
+
[ 1 , 2 ] . map { [ unowned self , unowned delegate = self . delegate ! ] num in
+ delegate . handle ( num )
+}
+
+
[ 1 , 2 ] . map {
+ [ weak
+ delegate ,
+ self
+ ] num in
+ delegate . handle ( num )
+}
+
+
rx . onViewDidAppear . subscribe ( onNext : { [ unowned self ] in
+ doSomething ()
+}) . disposed ( by : disposeBag )
+
+
Triggering Examples
+
[ 1 , 2 ] . map { [ ↓ weak self ] num in
+ print ( num )
+}
+
+
let failure : Failure = { [ weak self , ↓ unowned delegate = self . delegate ! ] foo in
+ self ? . handle ( foo )
+}
+
+
let failure : Failure = { [ ↓ weak self , ↓ unowned delegate = self . delegate ! ] foo in
+ print ( foo )
+}
+
+
numbers . forEach ({
+ [ weak handler ] in
+ print ( $0 )
+})
+
+
numbers . forEach ({
+ [ self , ↓ weak handler ] in
+ print ( $0 )
+})
+
+
withEnvironment ( apiService : MockService ( fetchProjectResponse : project )) { [ ↓ foo ] in
+ [ Device . phone4_7inch , Device . phone5_8inch , Device . pad ] . forEach { device in
+ device . handle ()
+ }
+}
+
+
{ [ ↓ foo ] in _ }()
+
+
+
+
+
+
+
+
+
+
+
diff --git a/unused_closure_parameter.html b/unused_closure_parameter.html
new file mode 100644
index 000000000..33d1e43a6
--- /dev/null
+++ b/unused_closure_parameter.html
@@ -0,0 +1,482 @@
+
+
+
+
unused_closure_parameter Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SwiftLintFramework Reference
+
+ unused_closure_parameter Reference
+
+
+
+
+
+
+
+
+
+
+
+
Unused Closure Parameter
+
+
Unused parameter in a closure should be replaced with _.
+
+
+Identifier: unused_closure_parameter
+Enabled by default: Yes
+Supports autocorrection: Yes
+Kind: lint
+Analyzer rule: No
+Minimum Swift compiler version: 5.0.0
+Default configuration: warning
+
+
Non Triggering Examples
+
[ 1 , 2 ] . map { $0 + 1 }
+
+
+
[ 1 , 2 ] . map ({ $0 + 1 })
+
+
+
[ 1 , 2 ] . map { number in
+ number + 1
+}
+
+
+
[ 1 , 2 ] . map { _ in
+ 3
+}
+
+
+
[ 1 , 2 ] . something { number , idx in
+ return number * idx
+}
+
+
+
let isEmpty = [ 1 , 2 ] . isEmpty ()
+
+
+
violations . sorted ( by : { lhs , rhs in
+ return lhs . location > rhs . location
+})
+
+
+
rlmConfiguration . migrationBlock . map { rlmMigration in
+return { migration , schemaVersion in
+rlmMigration ( migration . rlmMigration , schemaVersion )
+}
+}
+
+
genericsFunc { ( a : Type , b ) in
+a + b
+}
+
+
+
var label : UILabel = { ( lbl : UILabel ) -> UILabel in
+ lbl . backgroundColor = . red
+ return lbl
+}( UILabel ())
+
+
+
hoge ( arg : num ) { num in
+ return num
+}
+
+
+
({ ( manager : FileManager ) in
+ print ( manager )
+})( FileManager . default )
+
+
withPostSideEffect { input in
+ if true { print ( " \( input ) " ) }
+}
+
+
viewModel ? . profileImage . didSet ( weak : self ) { ( self , profileImage ) in
+ self . profileImageView . image = profileImage
+}
+
+
let failure : Failure = { task , error in
+ observer . sendFailed ( error , task )
+}
+
+
List ( $ names ) { $ name in
+ Text ( name )
+}
+
+
List ( $ names ) { $ name in
+ TextField ( $ name )
+}
+
+
_ = [ "a" ] . filter { ` class ` in ` class ` . hasPrefix ( "a" ) }
+
+
let closure : ( Int ) -> Void = { ` foo ` in _ = foo }
+
+
let closure : ( Int ) -> Void = { foo in _ = ` foo ` }
+
+
Triggering Examples
+
[ 1 , 2 ] . map { ↓ number in
+ return 3
+}
+
+
+
[ 1 , 2 ] . map { ↓ number in
+ return numberWithSuffix
+}
+
+
+
[ 1 , 2 ] . map { ↓ number in
+ return 3 // number
+}
+
+
+
[ 1 , 2 ] . map { ↓ number in
+ return 3 "number"
+}
+
+
+
[ 1 , 2 ] . something { number , ↓ idx in
+ return number
+}
+
+
+
genericsFunc { ( ↓ number : TypeA , idx : TypeB ) in return idx
+}
+
+
+
hoge ( arg : num ) { ↓ num in
+}
+
+
+
fooFunc { ↓ 아 in
+ }
+
+
func foo () {
+ bar { ↓ number in
+ return 3
+}
+
+
+
viewModel ? . profileImage . didSet ( weak : self ) { ( ↓ self , profileImage ) in
+ profileImageView . image = profileImage
+}
+
+
let failure : Failure = { ↓ task , error in
+ observer . sendFailed ( error )
+}
+
+
List ( $ names ) { ↓$ name in
+ Text ( "Foo" )
+}
+
+
let class1 = "a"
+_ = [ "a" ] . filter { ↓ ` class ` in ` class1 ` . hasPrefix ( "a" ) }
+
+
+
+
+
+
+
+
+
+
+
diff --git a/unused_control_flow_label.html b/unused_control_flow_label.html
new file mode 100644
index 000000000..4d4aa76dc
--- /dev/null
+++ b/unused_control_flow_label.html
@@ -0,0 +1,387 @@
+
+
+
+
unused_control_flow_label Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SwiftLintFramework Reference
+
+ unused_control_flow_label Reference
+
+
+
+
+
+
+
+
+
+
+
+
Unused Control Flow Label
+
+
Unused control flow label should be removed.
+
+
+Identifier: unused_control_flow_label
+Enabled by default: Yes
+Supports autocorrection: Yes
+Kind: lint
+Analyzer rule: No
+Minimum Swift compiler version: 5.0.0
+Default configuration: warning
+
+
Non Triggering Examples
+
loop : while true { break loop }
+
+
loop : while true { continue loop }
+
+
loop :
+ while true { break loop }
+
+
while true { break }
+
+
loop : for x in array { break loop }
+
+
label : switch number {
+case 1 : print ( "1" )
+case 2 : print ( "2" )
+default : break label
+}
+
+
loop : repeat {
+ if x == 10 {
+ break loop
+ }
+} while true
+
+
Triggering Examples
+
↓ loop : while true { break }
+
+
↓ loop : while true { break loop1 }
+
+
↓ loop : while true { break outerLoop }
+
+
↓ loop : for x in array { break }
+
+
↓ label : switch number {
+case 1 : print ( "1" )
+case 2 : print ( "2" )
+default : break
+}
+
+
↓ loop : repeat {
+ if x == 10 {
+ break
+ }
+} while true
+
+
+
+
+
+
+
+
+
+
+
diff --git a/unused_declaration.html b/unused_declaration.html
new file mode 100644
index 000000000..b615776ff
--- /dev/null
+++ b/unused_declaration.html
@@ -0,0 +1,604 @@
+
+
+
+
unused_declaration Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SwiftLintFramework Reference
+
+ unused_declaration Reference
+
+
+
+
+
+
+
+
+
+
+
+
Unused Declaration
+
+
Declarations should be referenced at least once within all files linted.
+
+
+Identifier: unused_declaration
+Enabled by default: No
+Supports autocorrection: No
+Kind: lint
+Analyzer rule: Yes
+Minimum Swift compiler version: 5.0.0
+Default configuration: severity: error, include_public_and_open: false, related_usrs_to_skip: [“s:7SwiftUI15PreviewProviderP”]
+
+
Non Triggering Examples
+
let kConstant = 0
+_ = kConstant
+
+
enum Change < T > {
+ case insert ( T )
+ case delete ( T )
+}
+
+extension Sequence {
+ func deletes < T > () -> [ T ] where Element == Change < T > {
+ return compactMap { operation in
+ if case . delete ( let value ) = operation {
+ return value
+ } else {
+ return nil
+ }
+ }
+ }
+}
+
+let changes = [ Change . insert ( 0 ), . delete ( 0 )]
+_ = changes . deletes ()
+
+
struct Item : Codable {}
+struct ResponseModel : Codable {
+ let items : [ Item ]
+
+ enum CodingKeys : String , CodingKey {
+ case items = "ResponseItems"
+ }
+}
+
+_ = ResponseModel ( items : [ Item ()]) . items
+
+
class ResponseModel {
+ @objc func foo () {
+ }
+}
+_ = ResponseModel ()
+
+
public func foo () {}
+
+
protocol Foo {}
+
+extension Foo {
+ func bar () {}
+}
+
+struct MyStruct : Foo {}
+MyStruct () . bar ()
+
+
import XCTest
+class MyTests : XCTestCase {
+ func testExample () {}
+}
+
+
import XCTest
+open class BestTestCase : XCTestCase {}
+class MyTests : BestTestCase {
+ func testExample () {}
+}
+
+
enum Component {
+ case string ( StaticString )
+ indirect case array ([ Component ])
+ indirect case optional ( Component ?)
+}
+
+@resultBuilder
+struct ComponentBuilder {
+ static func buildBlock ( _ components : Component ... ) -> Component {
+ return . array ( components )
+ }
+
+ static func buildExpression ( _ string : StaticString ) -> Component {
+ return . string ( string )
+ }
+
+ static func buildOptional ( _ component : Component ?) -> Component {
+ return . optional ( component )
+ }
+
+ static func buildEither ( first component : Component ) -> Component {
+ return component
+ }
+
+ static func buildEither ( second component : Component ) -> Component {
+ return component
+ }
+
+ static func buildArray ( _ components : [ Component ]) -> Component {
+ return . array ( components )
+ }
+
+ static func buildLimitedAvailability ( _ component : Component ) -> Component {
+ return component
+ }
+
+ static func buildFinalResult ( _ component : Component ) -> Component {
+ return component
+ }
+
+ static func buildPartialBlock ( first component : Component ) -> Component {
+ return component
+ }
+
+ static func buildPartialBlock ( accumulated component : Component , next : Component ) -> Component {
+ return component
+ }
+}
+
+func acceptComponentBuilder ( @ComponentBuilder _ body : () -> Component ) {
+ print ( body ())
+}
+
+acceptComponentBuilder {
+ "hello"
+}
+
+
import Cocoa
+
+@NSApplicationMain
+final class AppDelegate : NSObject , NSApplicationDelegate {
+ func applicationWillFinishLaunching ( _ notification : Notification ) {}
+ func applicationWillBecomeActive ( _ notification : Notification ) {}
+}
+
+
import Foundation
+
+public final class Foo : NSObject {
+ @IBAction private func foo () {}
+}
+
+
import Foundation
+
+public final class Foo : NSObject {
+ @objc func foo () {}
+}
+
+
import Foundation
+
+public final class Foo : NSObject {
+ @IBInspectable private var innerPaddingWidth : Int {
+ set { self . backgroundView . innerPaddingWidth = newValue }
+ get { return self . backgroundView . innerPaddingWidth }
+ }
+}
+
+
import Foundation
+
+public final class Foo : NSObject {
+ @IBOutlet private var bar : NSObject ! {
+ set { fatalError () }
+ get { fatalError () }
+ }
+
+ @IBOutlet private var baz : NSObject ! {
+ willSet { print ( "willSet" ) }
+ }
+
+ @IBOutlet private var buzz : NSObject ! {
+ didSet { print ( "didSet" ) }
+ }
+}
+
+
Triggering Examples
+
let ↓ kConstant = 0
+
+
struct Item {}
+struct ↓ ResponseModel : Codable {
+ let ↓ items : [ Item ]
+
+ enum ↓ CodingKeys : String {
+ case items = "ResponseItems"
+ }
+}
+
+
class ↓ ResponseModel {
+ func ↓ foo () {
+ }
+}
+
+
public func ↓ foo () {}
+
+
protocol Foo {
+ func ↓ bar1 ()
+}
+
+extension Foo {
+ func bar1 () {}
+ func ↓ bar2 () {}
+}
+
+struct MyStruct : Foo {}
+_ = MyStruct ()
+
+
import XCTest
+class ↓ MyTests : NSObject {
+ func ↓ testExample () {}
+}
+
+
enum Component {
+ case string ( StaticString )
+ indirect case array ([ Component ])
+ indirect case optional ( Component ?)
+}
+
+struct ComponentBuilder {
+ func ↓ buildExpression ( _ string : StaticString ) -> Component {
+ return . string ( string )
+ }
+
+ func ↓ buildBlock ( _ components : Component ... ) -> Component {
+ return . array ( components )
+ }
+
+ func ↓ buildIf ( _ value : Component ?) -> Component {
+ return . optional ( value )
+ }
+
+ static func ↓ buildABear ( _ components : Component ... ) -> Component {
+ return . array ( components )
+ }
+}
+
+_ = ComponentBuilder ()
+
+
import Cocoa
+
+@NSApplicationMain
+final class AppDelegate : NSObject , NSApplicationDelegate {
+ func ↓ appWillFinishLaunching ( _ notification : Notification ) {}
+ func applicationWillBecomeActive ( _ notification : Notification ) {}
+}
+
+
import Cocoa
+
+final class ↓ AppDelegate : NSObject , NSApplicationDelegate {
+ func applicationWillFinishLaunching ( _ notification : Notification ) {}
+ func applicationWillBecomeActive ( _ notification : Notification ) {}
+}
+
+
import Foundation
+
+public final class Foo : NSObject {
+ @IBOutlet var ↓ bar : NSObject !
+}
+
+
import Foundation
+
+public final class Foo : NSObject {
+ @IBInspectable var ↓ bar : String !
+}
+
+
import Foundation
+
+final class Foo : NSObject {}
+final class ↓ Bar {
+ var ↓ foo = Foo ()
+}
+
+
+
+
+
+
+
+
+
+
+
diff --git a/unused_enumerated.html b/unused_enumerated.html
new file mode 100644
index 000000000..5b76d8c70
--- /dev/null
+++ b/unused_enumerated.html
@@ -0,0 +1,383 @@
+
+
+
+
unused_enumerated Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SwiftLintFramework Reference
+
+ unused_enumerated Reference
+
+
+
+
+
+
+
+
+
+
+
+
Unused Enumerated
+
+
When the index or the item is not used, .enumerated() can be removed.
+
+
+Identifier: unused_enumerated
+Enabled by default: Yes
+Supports autocorrection: No
+Kind: idiomatic
+Analyzer rule: No
+Minimum Swift compiler version: 5.0.0
+Default configuration: warning
+
+
Non Triggering Examples
+
for ( idx , foo ) in bar . enumerated () { }
+
+
+
for ( _ , foo ) in bar . enumerated () . something () { }
+
+
+
for ( _ , foo ) in bar . something () { }
+
+
+
for foo in bar . enumerated () { }
+
+
+
for foo in bar { }
+
+
+
for ( idx , _ ) in bar . enumerated () . something () { }
+
+
+
for ( idx , _ ) in bar . something () { }
+
+
+
for idx in bar . indices { }
+
+
+
for ( section , ( event , _ )) in data . enumerated () {}
+
+
+
Triggering Examples
+
for ( ↓ _ , foo ) in bar . enumerated () { }
+
+
+
for ( ↓ _ , foo ) in abc . bar . enumerated () { }
+
+
+
for ( ↓ _ , foo ) in abc . something () . enumerated () { }
+
+
+
for ( idx , ↓ _ ) in bar . enumerated () { }
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/unused_import.html b/unused_import.html
new file mode 100644
index 000000000..98f6a0e8a
--- /dev/null
+++ b/unused_import.html
@@ -0,0 +1,391 @@
+
+
+
+
unused_import Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SwiftLintFramework Reference
+
+ unused_import Reference
+
+
+
+
+
+
+
+
+
+
+
+
Unused Import
+
+
All imported modules should be required to make the file compile.
+
+
+Identifier: unused_import
+Enabled by default: No
+Supports autocorrection: Yes
+Kind: lint
+Analyzer rule: Yes
+Minimum Swift compiler version: 5.0.0
+Default configuration: severity: warning, require_explicit_imports: false, allowed_transitive_imports: [], always_keep_imports: []
+
+
Non Triggering Examples
+
import Dispatch // This is used
+dispatchMain ()
+
+
@testable import Dispatch
+dispatchMain ()
+
+
import Foundation
+@objc
+class A {}
+
+
import UnknownModule
+func foo ( error : Swift . Error ) {}
+
+
import Foundation
+import ObjectiveC
+let 👨 👩 👧 👦 = #selector( NSArray.contains(_:) )
+👨 👩 👧 👦 == 👨 👩 👧 👦
+
+
Triggering Examples
+
↓ import Dispatch
+struct A {
+ static func dispatchMain () {}
+}
+A . dispatchMain ()
+
+
↓ import Foundation // This is unused
+struct A {
+ static func dispatchMain () {}
+}
+A . dispatchMain ()
+↓ import Dispatch
+
+
+
↓ import Foundation
+dispatchMain ()
+
+
↓ import Foundation
+// @objc
+class A {}
+
+
↓ import Foundation
+import UnknownModule
+func foo ( error : Swift . Error ) {}
+
+
↓ import Swift
+↓ import SwiftShims
+func foo ( error : Swift . Error ) {}
+
+
+
+
+
+
+
+
+
+
+
diff --git a/unused_optional_binding.html b/unused_optional_binding.html
new file mode 100644
index 000000000..4bf31c059
--- /dev/null
+++ b/unused_optional_binding.html
@@ -0,0 +1,399 @@
+
+
+
+
unused_optional_binding Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SwiftLintFramework Reference
+
+ unused_optional_binding Reference
+
+
+
+
+
+
+
+
+
+
+
+
Unused Optional Binding
+
+
Prefer != nil over let _ =
+
+
+Identifier: unused_optional_binding
+Enabled by default: Yes
+Supports autocorrection: No
+Kind: style
+Analyzer rule: No
+Minimum Swift compiler version: 5.0.0
+Default configuration: warning, ignore_optional_try: false
+
+
Non Triggering Examples
+
if let bar = Foo . optionalValue {
+}
+
+
+
if let ( _ , second ) = getOptionalTuple () {
+}
+
+
+
if let ( _ , asd , _ ) = getOptionalTuple (), let bar = Foo . optionalValue {
+}
+
+
+
if foo () { let _ = bar () }
+
+
+
if foo () { _ = bar () }
+
+
+
if case . some ( _ ) = self {}
+
+
if let point = state . find ({ _ in true }) {}
+
+
Triggering Examples
+
if let ↓ _ = Foo . optionalValue {
+}
+
+
+
if let a = Foo . optionalValue , let ↓ _ = Foo . optionalValue2 {
+}
+
+
+
guard let a = Foo . optionalValue , let ↓ _ = Foo . optionalValue2 {
+}
+
+
+
if let ( first , second ) = getOptionalTuple (), let ↓ _ = Foo . optionalValue {
+}
+
+
+
if let ( first , _ ) = getOptionalTuple (), let ↓ _ = Foo . optionalValue {
+}
+
+
+
if let ( _ , second ) = getOptionalTuple (), let ↓ _ = Foo . optionalValue {
+}
+
+
+
if let ↓ ( _ , _ , _ ) = getOptionalTuple (), let bar = Foo . optionalValue {
+}
+
+
+
func foo () {
+if let ↓ _ = bar {
+}
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/unused_setter_value.html b/unused_setter_value.html
new file mode 100644
index 000000000..046bde4af
--- /dev/null
+++ b/unused_setter_value.html
@@ -0,0 +1,433 @@
+
+
+
+
unused_setter_value Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SwiftLintFramework Reference
+
+ unused_setter_value Reference
+
+
+
+
+
+
+
+
+
+
+
+
Unused Setter Value
+
+
Setter value is not used.
+
+
+Identifier: unused_setter_value
+Enabled by default: Yes
+Supports autocorrection: No
+Kind: lint
+Analyzer rule: No
+Minimum Swift compiler version: 5.0.0
+Default configuration: warning
+
+
Non Triggering Examples
+
var aValue : String {
+ get {
+ return Persister . shared . aValue
+ }
+ set {
+ Persister . shared . aValue = newValue
+ }
+}
+
+
var aValue : String {
+ set {
+ Persister . shared . aValue = newValue
+ }
+ get {
+ return Persister . shared . aValue
+ }
+}
+
+
var aValue : String {
+ get {
+ return Persister . shared . aValue
+ }
+ set ( value ) {
+ Persister . shared . aValue = value
+ }
+}
+
+
override var aValue : String {
+ get {
+ return Persister . shared . aValue
+ }
+ set { }
+}
+
+
Triggering Examples
+
var aValue : String {
+ get {
+ return Persister . shared . aValue
+ }
+ ↓ set {
+ Persister . shared . aValue = aValue
+ }
+}
+
+
var aValue : String {
+ ↓ set {
+ Persister . shared . aValue = aValue
+ }
+ get {
+ return Persister . shared . aValue
+ }
+}
+
+
var aValue : String {
+ get {
+ return Persister . shared . aValue
+ }
+ ↓ set {
+ Persister . shared . aValue = aValue
+ }
+}
+
+
var aValue : String {
+ get {
+ let newValue = Persister . shared . aValue
+ return newValue
+ }
+ ↓ set {
+ Persister . shared . aValue = aValue
+ }
+}
+
+
var aValue : String {
+ get {
+ return Persister . shared . aValue
+ }
+ ↓ set ( value ) {
+ Persister . shared . aValue = aValue
+ }
+}
+
+
override var aValue : String {
+ get {
+ return Persister . shared . aValue
+ }
+ ↓ set {
+ Persister . shared . aValue = aValue
+ }
+}
+
+
+
+
+
+
+
+
+
+
+
diff --git a/valid_ibinspectable.html b/valid_ibinspectable.html
new file mode 100644
index 000000000..6760cca26
--- /dev/null
+++ b/valid_ibinspectable.html
@@ -0,0 +1,420 @@
+
+
+
+
valid_ibinspectable Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SwiftLintFramework Reference
+
+ valid_ibinspectable Reference
+
+
+
+
+
+
+
+
+
+
+
+
Valid IBInspectable
+
+
@IBInspectable should be applied to variables only, have its type explicit and be of a supported type
+
+
+Identifier: valid_ibinspectable
+Enabled by default: Yes
+Supports autocorrection: No
+Kind: lint
+Analyzer rule: No
+Minimum Swift compiler version: 5.0.0
+Default configuration: warning
+
+
Non Triggering Examples
+
class Foo {
+ @IBInspectable private var x : Int
+}
+
+
class Foo {
+ @IBInspectable private var x : String ?
+}
+
+
class Foo {
+ @IBInspectable private var x : String !
+}
+
+
class Foo {
+ @IBInspectable private var count : Int = 0
+}
+
+
class Foo {
+ private var notInspectable = 0
+}
+
+
class Foo {
+ private let notInspectable : Int
+}
+
+
class Foo {
+ private let notInspectable : UInt8
+}
+
+
extension Foo {
+ @IBInspectable var color : UIColor {
+ set {
+ self . bar . textColor = newValue
+ }
+
+ get {
+ return self . bar . textColor
+ }
+ }
+}
+
+
class Foo {
+ @IBInspectable var borderColor : UIColor ? = nil {
+ didSet {
+ updateAppearance ()
+ }
+ }
+}
+
+
Triggering Examples
+
class Foo {
+ @IBInspectable private ↓ let count : Int
+}
+
+
class Foo {
+ @IBInspectable private ↓ var insets : UIEdgeInsets
+}
+
+
class Foo {
+ @IBInspectable private ↓ var count = 0
+}
+
+
class Foo {
+ @IBInspectable private ↓ var count : Int ?
+}
+
+
class Foo {
+ @IBInspectable private ↓ var count : Int !
+}
+
+
class Foo {
+ @IBInspectable private ↓ var count : Optional < Int >
+}
+
+
class Foo {
+ @IBInspectable private ↓ var x : Optional < String >
+}
+
+
+
+
+
+
+
+
+
+
+
diff --git a/vertical_parameter_alignment.html b/vertical_parameter_alignment.html
new file mode 100644
index 000000000..6028bf299
--- /dev/null
+++ b/vertical_parameter_alignment.html
@@ -0,0 +1,409 @@
+
+
+
+
vertical_parameter_alignment Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SwiftLintFramework Reference
+
+ vertical_parameter_alignment Reference
+
+
+
+
+
+
+
+
+
+
+
+
Vertical Parameter Alignment
+
+
Function parameters should be aligned vertically if they’re in multiple lines in a declaration.
+
+
+Identifier: vertical_parameter_alignment
+Enabled by default: Yes
+Supports autocorrection: No
+Kind: style
+Analyzer rule: No
+Minimum Swift compiler version: 5.0.0
+Default configuration: warning
+
+
Non Triggering Examples
+
func validateFunction ( _ file : SwiftLintFile , kind : SwiftDeclarationKind ,
+ dictionary : SourceKittenDictionary ) { }
+
+
func validateFunction ( _ file : SwiftLintFile , kind : SwiftDeclarationKind ,
+ dictionary : SourceKittenDictionary ) -> [ StyleViolation ]
+
+
func foo ( bar : Int )
+
+
func foo ( bar : Int ) -> String
+
+
func validateFunction ( _ file : SwiftLintFile , kind : SwiftDeclarationKind ,
+ dictionary : SourceKittenDictionary )
+ -> [ StyleViolation ]
+
+
func validateFunction (
+ _ file : SwiftLintFile , kind : SwiftDeclarationKind ,
+ dictionary : SourceKittenDictionary ) -> [ StyleViolation ]
+
+
func validateFunction (
+ _ file : SwiftLintFile , kind : SwiftDeclarationKind ,
+ dictionary : SourceKittenDictionary
+) -> [ StyleViolation ]
+
+
func regex ( _ pattern : String ,
+ options : NSRegularExpression . Options = [ . anchorsMatchLines ,
+ . dotMatchesLineSeparators ]) -> NSRegularExpression
+
+
func foo ( a : Void ,
+ b : [ String : String ] =
+ [:]) {
+}
+
+
func foo ( data : ( size : CGSize ,
+ identifier : String )) {}
+
+
func foo ( data : Data ,
+ @ViewBuilder content : @escaping ( Data . Element . IdentifiedValue ) -> Content ) {}
+
+
class A {
+ init ( bar : Int )
+}
+
+
class A {
+ init ( foo : Int ,
+ bar : String )
+}
+
+
Triggering Examples
+
func validateFunction ( _ file : SwiftLintFile , kind : SwiftDeclarationKind ,
+ ↓ dictionary : SourceKittenDictionary ) { }
+
+
func validateFunction ( _ file : SwiftLintFile , kind : SwiftDeclarationKind ,
+ ↓ dictionary : SourceKittenDictionary ) { }
+
+
func validateFunction ( _ file : SwiftLintFile ,
+ ↓ kind : SwiftDeclarationKind ,
+ ↓ dictionary : SourceKittenDictionary ) { }
+
+
func foo ( data : Data ,
+ ↓ @ViewBuilder content : @escaping ( Data . Element . IdentifiedValue ) -> Content ) {}
+
+
class A {
+ init ( data : Data ,
+ ↓ @ViewBuilder content : @escaping ( Data . Element . IdentifiedValue ) -> Content ) {}
+}
+
+
+
+
+
+
+
+
+
+
+
diff --git a/vertical_parameter_alignment_on_call.html b/vertical_parameter_alignment_on_call.html
new file mode 100644
index 000000000..7058a03f9
--- /dev/null
+++ b/vertical_parameter_alignment_on_call.html
@@ -0,0 +1,413 @@
+
+
+
+
vertical_parameter_alignment_on_call Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SwiftLintFramework Reference
+
+ vertical_parameter_alignment_on_call Reference
+
+
+
+
+
+
+
+
+
+
+
+
Vertical Parameter Alignment On Call
+
+
Function parameters should be aligned vertically if they’re in multiple lines in a method call.
+
+
+Identifier: vertical_parameter_alignment_on_call
+Enabled by default: No
+Supports autocorrection: No
+Kind: style
+Analyzer rule: No
+Minimum Swift compiler version: 5.0.0
+Default configuration: warning
+
+
Non Triggering Examples
+
foo ( param1 : 1 , param2 : bar
+ param3 : false , param4 : true )
+
+
foo ( param1 : 1 , param2 : bar )
+
+
foo ( param1 : 1 , param2 : bar
+ param3 : false ,
+ param4 : true )
+
+
foo (
+ param1 : 1
+) { _ in }
+
+
UIView . animate ( withDuration : 0.4 , animations : {
+ blurredImageView . alpha = 1
+}, completion : { _ in
+ self . hideLoading ()
+})
+
+
UIView . animate ( withDuration : 0.4 , animations : {
+ blurredImageView . alpha = 1
+},
+completion : { _ in
+ self . hideLoading ()
+})
+
+
foo ( param1 : 1 , param2 : { _ in },
+ param3 : false , param4 : true )
+
+
foo ({ _ in
+ bar ()
+ },
+ completion : { _ in
+ baz ()
+ }
+)
+
+
foo ( param1 : 1 , param2 : [
+ 0 ,
+ 1
+], param3 : 0 )
+
+
myFunc ( foo : 0 ,
+ bar : baz == 0 )
+
+
Triggering Examples
+
foo ( param1 : 1 , param2 : bar
+ ↓ param3 : false , param4 : true )
+
+
foo ( param1 : 1 , param2 : bar
+ ↓ param3 : false , param4 : true )
+
+
foo ( param1 : 1 , param2 : bar
+ ↓ param3 : false ,
+ ↓ param4 : true )
+
+
foo ( param1 : 1 ,
+ ↓ param2 : { _ in })
+
+
foo ( param1 : 1 ,
+ param2 : { _ in
+}, param3 : 2 ,
+ ↓ param4 : 0 )
+
+
foo ( param1 : 1 , param2 : { _ in },
+ ↓ param3 : false , param4 : true )
+
+
myFunc ( foo : 0 ,
+ ↓ bar : baz == 0 )
+
+
+
+
+
+
+
+
+
+
+
diff --git a/vertical_whitespace.html b/vertical_whitespace.html
new file mode 100644
index 000000000..5d9a58f14
--- /dev/null
+++ b/vertical_whitespace.html
@@ -0,0 +1,377 @@
+
+
+
+
vertical_whitespace Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SwiftLintFramework Reference
+
+ vertical_whitespace Reference
+
+
+
+
+
+
+
+
+
+
+
+
Vertical Whitespace
+
+
Limit vertical whitespace to a single empty line.
+
+
+Identifier: vertical_whitespace
+Enabled by default: Yes
+Supports autocorrection: Yes
+Kind: style
+Analyzer rule: No
+Minimum Swift compiler version: 5.0.0
+Default configuration: warning, max_empty_lines: 1
+
+
Non Triggering Examples
+
let abc = 0
+
+
+
let abc = 0
+
+
+
+
/* bcs
+
+
+
+*/
+
+
// bca
+
+
+
+
Triggering Examples
+
let aaaa = 0
+
+
+
+
+
struct AAAA {}
+
+
+
+
+
+
class BBBB {}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/vertical_whitespace_between_cases.html b/vertical_whitespace_between_cases.html
new file mode 100644
index 000000000..42634e063
--- /dev/null
+++ b/vertical_whitespace_between_cases.html
@@ -0,0 +1,431 @@
+
+
+
+
vertical_whitespace_between_cases Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SwiftLintFramework Reference
+
+ vertical_whitespace_between_cases Reference
+
+
+
+
+
+
+
+
+
+
+
+
Vertical Whitespace Between Cases
+
+
Include a single empty line between switch cases.
+
+
+Identifier: vertical_whitespace_between_cases
+Enabled by default: No
+Supports autocorrection: Yes
+Kind: style
+Analyzer rule: No
+Minimum Swift compiler version: 5.0.0
+Default configuration: warning
+
+
Non Triggering Examples
+
switch x {
+ case . valid :
+ print ( "multiple ..." )
+ print ( "... lines" )
+
+ case . invalid :
+ print ( "multiple ..." )
+ print ( "... lines" )
+ }
+
+
switch x {
+ case . valid :
+ print ( "x is valid" )
+
+ case . invalid :
+ print ( "x is invalid" )
+ }
+
+
switch x {
+ case 0 ..< 5 :
+ print ( "x is valid" )
+
+ default :
+ print ( "x is invalid" )
+ }
+
+
switch x {
+
+case 0 ..< 5 :
+ print ( "x is low" )
+
+case 5 ..< 10 :
+ print ( "x is high" )
+
+default :
+ print ( "x is invalid" )
+
+}
+
+
switch x {
+case 0 ..< 5 :
+ print ( "x is low" )
+
+case 5 ..< 10 :
+ print ( "x is high" )
+
+default :
+ print ( "x is invalid" )
+}
+
+
switch x {
+case 0 ..< 5 : print ( "x is low" )
+case 5 ..< 10 : print ( "x is high" )
+default : print ( "x is invalid" )
+}
+
+
switch x {
+case 1 :
+ print ( "one" )
+
+default :
+ print ( "not one" )
+}
+
+
Triggering Examples
+
switch x {
+ case . valid :
+ print ( "multiple ..." )
+ print ( "... lines" )
+↓ case . invalid :
+ print ( "multiple ..." )
+ print ( "... lines" )
+ }
+
+
switch x {
+ case . valid :
+ print ( "x is valid" )
+↓ case . invalid :
+ print ( "x is invalid" )
+ }
+
+
switch x {
+ case 0 ..< 5 :
+ print ( "x is valid" )
+↓ default :
+ print ( "x is invalid" )
+ }
+
+
+
+
+
+
+
+
+
+
+
diff --git a/vertical_whitespace_closing_braces.html b/vertical_whitespace_closing_braces.html
new file mode 100644
index 000000000..d1a644eb0
--- /dev/null
+++ b/vertical_whitespace_closing_braces.html
@@ -0,0 +1,468 @@
+
+
+
+
vertical_whitespace_closing_braces Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SwiftLintFramework Reference
+
+ vertical_whitespace_closing_braces Reference
+
+
+
+
+
+
+
+
+
+
+
+
Vertical Whitespace before Closing Braces
+
+
Don’t include vertical whitespace (empty line) before closing braces.
+
+
+Identifier: vertical_whitespace_closing_braces
+Enabled by default: No
+Supports autocorrection: Yes
+Kind: style
+Analyzer rule: No
+Minimum Swift compiler version: 5.0.0
+Default configuration: warning, only_enforce_before_trivial_lines: false
+
+
Non Triggering Examples
+
print ([
+ 1
+])
+
+
do {
+ print ( "x is 5" )
+}
+
+
func foo () {
+ run ( 5 ) { x in
+ print ( x )
+ }
+}
+
+
foo (
+ x : 5 ,
+ y : 6
+)
+
+
do {
+ print ( "x is 5" )
+}
+
+
do {
+ print ( "x is 5" )
+}
+
+
print ([ foo {
+ var sum = 0
+ for i in 1 ... 5 { sum += i }
+ return sum
+
+}, foo {
+ var mul = 1
+ for i in 1 ... 5 { mul *= i }
+ return mul
+}])
+
+
[
+1 ,
+2 ,
+3
+]
+
+
[ 1 , 2 ] . map { $0 } . filter { true }
+
+
[ 1 , 2 ] . map { $0 } . filter { num in true }
+
+
/*
+ class X {
+
+ let x = 5
+
+ }
+*/
+
+
if bool1 {
+ // do something
+ // do something
+
+} else if bool2 {
+ // do something
+ // do something
+ // do something
+
+} else {
+ // do something
+ // do something
+}
+
+
Triggering Examples
+
print ([
+ 1
+↓
+])
+
+
do {
+ print ( "x is 5" )
+↓
+
+}
+
+
func foo () {
+ run ( 5 ) { x in
+ print ( x )
+ }
+↓
+}
+
+
foo (
+ x : 5 ,
+ y : 6
+↓
+)
+
+
do {
+ print ( "x is 5" )
+↓
+
+}
+
+
do {
+ print ( "x is 5" )
+↓
+}
+
+
print ([ foo {
+ var sum = 0
+ for i in 1 ... 5 { sum += i }
+ return sum
+
+}, foo {
+ var mul = 1
+ for i in 1 ... 5 { mul *= i }
+ return mul
+↓
+}])
+
+
[
+1 ,
+2 ,
+3
+↓
+]
+
+
+
+
+
+
+
+
+
+
+
diff --git a/vertical_whitespace_opening_braces.html b/vertical_whitespace_opening_braces.html
new file mode 100644
index 000000000..d64253837
--- /dev/null
+++ b/vertical_whitespace_opening_braces.html
@@ -0,0 +1,458 @@
+
+
+
+
vertical_whitespace_opening_braces Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SwiftLintFramework Reference
+
+ vertical_whitespace_opening_braces Reference
+
+
+
+
+
+
+
+
+
+
+
+
Vertical Whitespace after Opening Braces
+
+
Don’t include vertical whitespace (empty line) after opening braces.
+
+
+Identifier: vertical_whitespace_opening_braces
+Enabled by default: No
+Supports autocorrection: Yes
+Kind: style
+Analyzer rule: No
+Minimum Swift compiler version: 5.0.0
+Default configuration: warning
+
+
Non Triggering Examples
+
/*
+ class X {
+
+ let x = 5
+
+ }
+*/
+
+
// [1, 2].map { $0 }.filter { num in true }
+
+
KingfisherManager . shared . retrieveImage ( with : url , options : nil , progressBlock : nil ) { image , _ , _ , _ in
+ guard let img = image else { return }
+}
+
+
[
+1 ,
+2 ,
+3
+]
+
+
[ 1 , 2 ] . map { $0 } . filter { num in true }
+
+
[ 1 , 2 ] . map { $0 } . foo ()
+
+
class X {
+ struct Y {
+ class Z {
+ }
+ }
+}
+
+
foo (
+ x : 5 ,
+ y : 6
+)
+
+
foo ({ }) { _ in
+ self . dismiss ( animated : false , completion : {
+ })
+}
+
+
func foo () {
+ run ( 5 ) { x in
+ print ( x )
+ }
+}
+
+
if x == 5 {
+ print ( "x is 5" )
+}
+
+
if x == 5 {
+ print ( "x is 5" )
+}
+
+
struct MyStruct {
+ let x = 5
+}
+
+
Triggering Examples
+
KingfisherManager . shared . retrieveImage ( with : url , options : nil , progressBlock : nil ) { image , _ , _ , _ in
+↓
+ guard let img = image else { return }
+}
+
+
[
+↓
+1 ,
+2 ,
+3
+]
+
+
class X {
+ struct Y {
+↓
+ class Z {
+ }
+ }
+}
+
+
foo (
+↓
+ x : 5 ,
+ y : 6
+)
+
+
foo ({ }) { _ in
+↓
+ self . dismiss ( animated : false , completion : {
+ })
+}
+
+
func foo () {
+↓
+ run ( 5 ) { x in
+ print ( x )
+ }
+}
+
+
if x == 5 {
+↓
+
+ print ( "x is 5" )
+}
+
+
if x == 5 {
+↓
+ print ( "x is 5" )
+}
+
+
struct MyStruct {
+↓
+ let x = 5
+}
+
+
+
+
+
+
+
+
+
+
+
diff --git a/void_function_in_ternary.html b/void_function_in_ternary.html
new file mode 100644
index 000000000..2a46d9601
--- /dev/null
+++ b/void_function_in_ternary.html
@@ -0,0 +1,423 @@
+
+
+
+
void_function_in_ternary Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SwiftLintFramework Reference
+
+ void_function_in_ternary Reference
+
+
+
+
+
+
+
+
+
+
+
+
Void Function in Ternary
+
+
Using ternary to call Void functions should be avoided.
+
+
+Identifier: void_function_in_ternary
+Enabled by default: Yes
+Supports autocorrection: No
+Kind: idiomatic
+Analyzer rule: No
+Minimum Swift compiler version: 5.1.0
+Default configuration: warning
+
+
Non Triggering Examples
+
let result = success ? foo () : bar ()
+
+
if success {
+ askQuestion ()
+} else {
+ exit ()
+}
+
+
var price : Double {
+ return hasDiscount ? calculatePriceWithDiscount () : calculateRegularPrice ()
+}
+
+
foo ( x == 2 ? a () : b ())
+
+
chevronView . image = collapsed ? . icon ( . mediumChevronDown ) : . icon ( . mediumChevronUp )
+
+
array . map { elem in
+ elem . isEmpty () ? . emptyValue () : . number ( elem )
+}
+
+
func compute ( data : [ Int ]) -> Int {
+ data . isEmpty ? 0 : expensiveComputation ( data )
+}
+
+
var value : Int {
+ mode == . fast ? fastComputation () : expensiveComputation ()
+}
+
+
var value : Int {
+ get {
+ mode == . fast ? fastComputation () : expensiveComputation ()
+ }
+}
+
+
subscript ( index : Int ) -> Int {
+ get {
+ index == 0 ? defaultValue () : compute ( index )
+ }
+
+
subscript ( index : Int ) -> Int {
+ index == 0 ? defaultValue () : compute ( index )
+
+
Triggering Examples
+
success ↓ ? askQuestion () : exit ()
+
+
perform { elem in
+ elem . isEmpty () ↓ ? . emptyValue () : . number ( elem )
+ return 1
+}
+
+
DispatchQueue . main . async {
+ self . sectionViewModels [ section ] . collapsed . toggle ()
+ self . sectionViewModels [ section ] . collapsed
+ ↓ ? self . tableView . deleteRows ( at : [ IndexPath ( row : 0 , section : section )], with : . automatic )
+ : self . tableView . insertRows ( at : [ IndexPath ( row : 0 , section : section )], with : . automatic )
+ self . tableView . scrollToRow ( at : IndexPath ( row : NSNotFound , section : section ), at : . top , animated : true )
+}
+
+
subscript ( index : Int ) -> Int {
+ index == 0 ↓ ? something () : somethingElse ( index )
+ return index
+
+
var value : Int {
+ mode == . fast ↓ ? something () : somethingElse ()
+ return 0
+}
+
+
var value : Int {
+ get {
+ mode == . fast ↓ ? something () : somethingElse ()
+ return 0
+ }
+}
+
+
subscript ( index : Int ) -> Int {
+ get {
+ index == 0 ↓ ? something () : somethingElse ( index )
+ return index
+ }
+
+
+
+
+
+
+
+
+
+
+
diff --git a/void_return.html b/void_return.html
new file mode 100644
index 000000000..e0851924d
--- /dev/null
+++ b/void_return.html
@@ -0,0 +1,386 @@
+
+
+
+
void_return Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SwiftLintFramework Reference
+
+ void_return Reference
+
+
+
+
+
+
+
+
+
+
+
+
Void Return
+
+
Prefer -> Void over -> ().
+
+
+Identifier: void_return
+Enabled by default: Yes
+Supports autocorrection: Yes
+Kind: style
+Analyzer rule: No
+Minimum Swift compiler version: 5.0.0
+Default configuration: warning
+
+
Non Triggering Examples
+
let abc : () -> Void = {}
+
+
+
let abc : () -> ( VoidVoid ) = {}
+
+
+
func foo ( completion : () -> Void )
+
+
+
let foo : ( ConfigurationTests ) -> () throws -> Void
+
+
+
let foo : ( ConfigurationTests ) -> () throws -> Void
+
+
+
let foo : ( ConfigurationTests ) -> () throws -> Void
+
+
+
let foo : ( ConfigurationTests ) -> () -> Void
+
+
+
Triggering Examples
+
let abc : () -> ↓ () = {}
+
+
+
let abc : () -> ↓ ( Void ) = {}
+
+
+
let abc : () -> ↓ ( Void ) = {}
+
+
+
func foo ( completion : () -> ↓ ())
+
+
+
func foo ( completion : () -> ↓ ( ))
+
+
+
func foo ( completion : () -> ↓ ( Void ))
+
+
+
let foo : ( ConfigurationTests ) -> () throws -> ↓ ()
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/weak_delegate.html b/weak_delegate.html
new file mode 100644
index 000000000..946c7003a
--- /dev/null
+++ b/weak_delegate.html
@@ -0,0 +1,435 @@
+
+
+
+
weak_delegate Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SwiftLintFramework Reference
+
+ weak_delegate Reference
+
+
+
+
+
+
+
+
+
+
+
+
Weak Delegate
+
+
Delegates should be weak to avoid reference cycles.
+
+
+Identifier: weak_delegate
+Enabled by default: No
+Supports autocorrection: No
+Kind: lint
+Analyzer rule: No
+Minimum Swift compiler version: 5.0.0
+Default configuration: warning
+
+
Non Triggering Examples
+
class Foo {
+ weak var delegate : SomeProtocol ?
+}
+
+
+
class Foo {
+ weak var someDelegate : SomeDelegateProtocol ?
+}
+
+
+
class Foo {
+ weak var delegateScroll : ScrollDelegate ?
+}
+
+
+
class Foo {
+ var scrollHandler : ScrollDelegate ?
+}
+
+
+
func foo () {
+ var delegate : SomeDelegate
+}
+
+
+
class Foo {
+ var delegateNotified : Bool ?
+}
+
+
+
protocol P {
+ var delegate : AnyObject ? { get set }
+}
+
+
+
class Foo {
+ protocol P {
+ var delegate : AnyObject ? { get set }
+}
+}
+
+
+
class Foo {
+ var computedDelegate : ComputedDelegate {
+ return bar ()
+}
+}
+
+
class Foo {
+ var computedDelegate : ComputedDelegate {
+ get {
+ return bar ()
+ }
+ }
+
+
struct Foo {
+ @UIApplicationDelegateAdaptor ( AppDelegate . self ) var appDelegate
+}
+
+
struct Foo {
+ @NSApplicationDelegateAdaptor ( AppDelegate . self ) var appDelegate
+}
+
+
struct Foo {
+ @WKExtensionDelegateAdaptor ( ExtensionDelegate . self ) var extensionDelegate
+}
+
+
class Foo {
+ func makeDelegate () -> SomeDelegate {
+ let delegate = SomeDelegate ()
+ return delegate
+ }
+}
+
+
Triggering Examples
+
class Foo {
+ ↓ var delegate : SomeProtocol ?
+}
+
+
+
class Foo {
+ ↓ var scrollDelegate : ScrollDelegate ?
+}
+
+
+
class Foo {
+ ↓ var delegate : SomeProtocol ? {
+ didSet {
+ print ( "Updated delegate" )
+ }
+ }
+
+
+
+
+
+
+
+
+
+
+
diff --git a/xct_specific_matcher.html b/xct_specific_matcher.html
new file mode 100644
index 000000000..6b5c5337a
--- /dev/null
+++ b/xct_specific_matcher.html
@@ -0,0 +1,488 @@
+
+
+
+
xct_specific_matcher Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SwiftLintFramework Reference
+
+ xct_specific_matcher Reference
+
+
+
+
+
+
+
+
+
+
+
+
XCTest Specific Matcher
+
+
Prefer specific XCTest matchers over XCTAssertEqual and XCTAssertNotEqual
+
+
+Identifier: xct_specific_matcher
+Enabled by default: No
+Supports autocorrection: No
+Kind: idiomatic
+Analyzer rule: No
+Minimum Swift compiler version: 5.0.0
+Default configuration: warning
+
+
Non Triggering Examples
+
XCTAssertFalse ( foo )
+
+
XCTAssertTrue ( foo )
+
+
XCTAssertNil ( foo )
+
+
XCTAssertNotNil ( foo )
+
+
XCTAssertEqual ( foo , 2 )
+
+
XCTAssertNotEqual ( foo , "false" )
+
+
XCTAssertEqual ( foo , [ 1 , 2 , 3 , true ])
+
+
XCTAssertEqual ( foo , [ 1 , 2 , 3 , false ])
+
+
XCTAssertEqual ( foo , [ 1 , 2 , 3 , nil ])
+
+
XCTAssertEqual ( foo , [ true , nil , true , nil ])
+
+
XCTAssertEqual ([ 1 , 2 , 3 , true ], foo )
+
+
XCTAssertEqual ([ 1 , 2 , 3 , false ], foo )
+
+
XCTAssertEqual ([ 1 , 2 , 3 , nil ], foo )
+
+
XCTAssertEqual ([ true , nil , true , nil ], foo )
+
+
XCTAssertEqual ( 2 , foo )
+
+
XCTAssertNotEqual ( "false" ), foo )
+
+
XCTAssertEqual ( false , foo ? . bar )
+
+
XCTAssertEqual ( true , foo ? . bar )
+
+
XCTAssertFalse ( foo )
+
+
XCTAssertTrue ( foo )
+
+
XCTAssertNil ( foo )
+
+
XCTAssertNotNil ( foo )
+
+
XCTAssertEqual ( foo , 2 )
+
+
XCTAssertNotEqual ( foo , "false" )
+
+
XCTAssertEqual ( foo ? . bar , false )
+
+
XCTAssertEqual ( foo ? . bar , true )
+
+
XCTAssertNil ( foo ? . bar )
+
+
XCTAssertNotNil ( foo ? . bar )
+
+
XCTAssertEqual ( foo ? . bar , 2 )
+
+
XCTAssertNotEqual ( foo ? . bar , "false" )
+
+
XCTAssertEqual ( foo ? . bar , toto ())
+
+
XCTAssertEqual ( foo ? . bar , . toto ( . zoo ))
+
+
XCTAssertEqual ( toto (), foo ? . bar )
+
+
XCTAssertEqual ( . toto ( . zoo ), foo ? . bar )
+
+
Triggering Examples
+
↓ XCTAssertEqual ( foo , true )
+
+
↓ XCTAssertEqual ( foo , false )
+
+
↓ XCTAssertEqual ( foo , nil )
+
+
↓ XCTAssertNotEqual ( foo , true )
+
+
↓ XCTAssertNotEqual ( foo , false )
+
+
↓ XCTAssertNotEqual ( foo , nil )
+
+
↓ XCTAssertEqual ( true , foo )
+
+
↓ XCTAssertEqual ( false , foo )
+
+
↓ XCTAssertEqual ( nil , foo )
+
+
↓ XCTAssertNotEqual ( true , foo )
+
+
↓ XCTAssertNotEqual ( false , foo )
+
+
↓ XCTAssertNotEqual ( nil , foo )
+
+
↓ XCTAssertEqual ( foo , true , "toto" )
+
+
↓ XCTAssertEqual ( foo , false , "toto" )
+
+
↓ XCTAssertEqual ( foo , nil , "toto" )
+
+
↓ XCTAssertNotEqual ( foo , true , "toto" )
+
+
↓ XCTAssertNotEqual ( foo , false , "toto" )
+
+
↓ XCTAssertNotEqual ( foo , nil , "toto" )
+
+
↓ XCTAssertEqual ( true , foo , "toto" )
+
+
↓ XCTAssertEqual ( false , foo , "toto" )
+
+
↓ XCTAssertEqual ( nil , foo , "toto" )
+
+
↓ XCTAssertNotEqual ( true , foo , "toto" )
+
+
↓ XCTAssertNotEqual ( false , foo , "toto" )
+
+
↓ XCTAssertNotEqual ( nil , foo , "toto" )
+
+
↓ XCTAssertEqual ( foo , true )
+
+
↓ XCTAssertEqual ( foo , false )
+
+
↓ XCTAssertEqual ( foo , nil )
+
+
↓ XCTAssertEqual ( true , [ 1 , 2 , 3 , true ] . hasNumbers ())
+
+
↓ XCTAssertEqual ([ 1 , 2 , 3 , true ] . hasNumbers (), true )
+
+
↓ XCTAssertEqual ( foo ? . bar , nil )
+
+
↓ XCTAssertNotEqual ( foo ? . bar , nil )
+
+
↓ XCTAssertEqual ( nil , true )
+
+
↓ XCTAssertEqual ( nil , false )
+
+
↓ XCTAssertEqual ( true , nil )
+
+
↓ XCTAssertEqual ( false , nil )
+
+
↓ XCTAssertEqual ( nil , nil )
+
+
↓ XCTAssertEqual ( true , true )
+
+
↓ XCTAssertEqual ( false , false )
+
+
+
+
+
+
+
+
+
+
+
diff --git a/xctfail_message.html b/xctfail_message.html
new file mode 100644
index 000000000..69ca46ef6
--- /dev/null
+++ b/xctfail_message.html
@@ -0,0 +1,360 @@
+
+
+
+
xctfail_message Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SwiftLintFramework Reference
+
+ xctfail_message Reference
+
+
+
+
+
+
+
+
+
+
+
+
XCTFail Message
+
+
An XCTFail call should include a description of the assertion.
+
+
+Identifier: xctfail_message
+Enabled by default: Yes
+Supports autocorrection: No
+Kind: idiomatic
+Analyzer rule: No
+Minimum Swift compiler version: 5.0.0
+Default configuration: warning
+
+
Non Triggering Examples
+
func testFoo () {
+ XCTFail ( "bar" )
+}
+
+
func testFoo () {
+ XCTFail ( bar )
+}
+
+
Triggering Examples
+
func testFoo () {
+ ↓ XCTFail ()
+}
+
+
func testFoo () {
+ ↓ XCTFail ( "" )
+}
+
+
+
+
+
+
+
+
+
+
+
diff --git a/yoda_condition.html b/yoda_condition.html
new file mode 100644
index 000000000..0947f3317
--- /dev/null
+++ b/yoda_condition.html
@@ -0,0 +1,390 @@
+
+
+
+
yoda_condition Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SwiftLintFramework Reference
+
+ yoda_condition Reference
+
+
+
+
+
+
+
+
+
+
+
+
Yoda condition rule
+
+
The constant literal should be placed on the right-hand side of the comparison operator.
+
+
+Identifier: yoda_condition
+Enabled by default: No
+Supports autocorrection: No
+Kind: lint
+Analyzer rule: No
+Minimum Swift compiler version: 5.0.0
+Default configuration: warning
+
+
Non Triggering Examples
+
if foo == 42 {}
+
+
+
if foo <= 42.42 {}
+
+
+
guard foo >= 42 else { return }
+
+
+
guard foo != "str str" else { return }
+
+
while foo < 10 { }
+
+
+
while foo > 1 { }
+
+
+
while foo + 1 == 2 {}
+
+
if optionalValue ? . property ?? 0 == 2 {}
+
+
if foo == nil {}
+
+
if flags & 1 == 1 {}
+
+
Triggering Examples
+
if ↓ 42 == foo {}
+
+
+
if ↓ 42.42 >= foo {}
+
+
+
guard ↓ 42 <= foo else { return }
+
+
+
guard ↓ "str str" != foo else { return }
+
+
while ↓ 10 > foo { }
+
+
while ↓ 1 < foo { }
+
+
if ↓ nil == foo {}
+
+
while ↓ 1 > i + 5 {}
+
+
if ↓ 200 <= i && i <= 299 || ↓ 600 <= i {}
+
+
+
+
+
+
+
+
+
+
+