Commit Graph

2160 Commits

Author SHA1 Message Date
Norio Nomura ea171fbbf2 Add SWIFTLINT_DISABLE_SOURCEKIT environment variable (#2473)
This can be used for avoid "Test::Unit::AssertionFailedError" error in `libxpc.dylib` on calling `sourcekitd_send_request_sync` in sandbox environment.
2018-11-21 17:03:42 -08:00
JP Simard db2fbad7fd Use CommonCrypto if available to compute MD5 hash (#2474)
It's significantly faster than CryptoSwift: 3% vs 19% of cached lint time for Lyft's iOS codebase.

### Before (CryptoSwift)

![CryptoSwift](https://user-images.githubusercontent.com/474794/48873531-3f2a7780-eda3-11e8-9cd9-c0ef796b061b.png)

### After (CommonCrypto)

![CommonCrypto](https://user-images.githubusercontent.com/474794/48873539-481b4900-eda3-11e8-8605-4fd009da3eb1.png)
2018-11-21 16:19:10 -08:00
Marcelo Fabri fb9d8df8a3 Add back MARK 2018-11-20 10:32:20 -08:00
Marcelo Fabri cf0c7b7b21 Use default Equatable and Hashable implementations 2018-11-19 09:51:12 -08:00
JP Simard 5901d3075f Require Swift 4.2 (#2466)
This bumps the minimum version required to build SwiftLint to 4.2. The primary motivating factor to drop support for Swift 4.0-4.1.x is that SwiftLint now uses CryptoSwift, which requires 4.2.

* Add changelog entry

* Remove --allow-warnings flag from CocoaPods commands

* Update CryptoSwift to 0.13.0

* Migrate to Swift 4.2

* Remove CircleCI tests for Swift < 4.2

* Update English and Chinese README

Korean README doesn't yet have a version table like this.

* Update gems

* Add changelog entry for fixed compiler warnings

* Update CocoaPods to 1.6.0.beta.2

To work around https://github.com/CocoaPods/CocoaPods/issues/7708
2018-11-18 17:32:25 -08:00
JP Simard 4955c173a0 release 0.28.1 2018-11-18 15:41:26 -08:00
JP Simard d768897f1d Improve performance of collecting files to lint and lint cache lookups (#2465)
Performance has gotten pretty bad for complex SwiftLint configurations like the one used for Lyft's iOS code base involving lots of files in the directories being linted, large configuration files and many nested configuration files.

Two main areas were particularly ripe for improvement were:

1. Collecting which files to lint
2. Lint cache lookups

### Collecting which files to lint

Improve this by:

* using an NSOrderedSet to remove excluded paths instead of `Array.filter`
* parallelizing calls to `filesToLint` for all paths to lint and exclude
* using `FileManager.subpaths(atPath:)` instead of `enumerator(atPath:)`

|Change|Before|After|Speed up|
|-|-|-|-|
|NSOrderedSet|2.438s|0.917s|2.659x|
|Parallel Flat Map|2.438s|2.248s|1.085x|
|Subpaths|0.939s|0.867s|1.083x|
|**Total**|**2.438s**|**0.720s**|**3.386x**|

### Lint cache lookups

By using an MD5 hash of the Configuration description from CryptoSwift as the cache key instead of instead the full description, we can drastically speed up cache lookups for projects with complex SwiftLint configurations. I think the dictionary lookup for very large string keys doesn't perform very well.

---

* Speed up Configuration.lintablePaths

* Improve cache lookup performance by up to 10x

By using an MD5 hash of the Configuration description from CryptoSwift
as the cache key instead of instead the full description.

* Add changelog entries

* Swift 4.0 & Linux compatibility

* os(Darwin) isn't a thing

* Allow warnings in pod lib lint

SwiftLint supports building with Swift 4.0 to 4.2.

There is no version of CryptoSwift to support both Swift 4.0 and
Swift 4.2.

So allow warnings for now. We'll make one more Swift 4.0 compatible
release, then we'll bump the build requirements to Swift 4.2 and
remove the `--allow-warnings` flag.
2018-11-18 14:39:02 -08:00
JP Simard 94dd8b4772 release 0.28.0 2018-11-13 22:41:00 -08:00
JP Simard 09cb3bae2d Remove unused Foundation import (#2463) 2018-11-13 22:28:28 -08:00
Marcelo Fabri 83a2ca4be7 Merge pull request #2419 from yhkaplan/random
New Rule - Legacy Random
2018-10-13 22:58:50 -07:00
Joshua Kaplan 44b57ded29 Offset already proven to be not nil 2018-10-14 13:28:29 +09:00
Joshua Kaplan 1adb275050 Set is more efficient 2018-10-14 13:27:45 +09:00
Joshua Kaplan d40cfc0c90 Refactor rule to be AST rule 2018-10-06 16:03:37 +09:00
Joshua Kaplan 8b12806e9e Correct rule kind from 'lint' to 'idiomatic' 2018-10-06 12:04:28 +09:00
Joshua Kaplan 6eda1396d8 Rename random rule to legacy random rule 2018-10-06 12:02:21 +09:00
Marcelo Fabri 2c59827850 Merge pull request #2407 from marcelofabri/enable-static-operator
Enable static_operator opt-in rule in SwiftLint
2018-10-02 14:40:18 -07:00
Timofey Solonin e9d2552888 #2423 - Fix EmptyCountRule for binary, octal and hexadecimal integer literals 2018-10-02 19:47:52 +03:00
Timofey Solonin 22be71e677 #2422 - Replace ruleDescription change with a StyleViolation reason field in CompilerProtocolInitRule 2018-10-01 18:28:52 +03:00
Timofey Solonin 5bf50c8920 #2422 - Specify which compiler protocol initialization rule was violated 2018-10-01 12:32:43 +03:00
Joshua Kaplan b173350969 Automatic changes to documentation, MasterRuleList, and tests 2018-09-30 14:55:29 +09:00
Joshua Kaplan 3d6030dfc0 Change rule implementation to use regex 2018-09-30 14:54:20 +09:00
yhkaplan 9acf8ba9a0 Delete unneeded todo 2018-09-27 23:55:59 +09:00
yhkaplan 1cedd0ccc6 Add Foundation import explicitly to get build working on Linux 2018-09-27 23:55:07 +09:00
Joshua Kaplan 71b6def313 Add random rule 2018-09-27 00:21:36 +09:00
Marcelo Fabri 1f121b1ef7 Enable static_operator opt-in rule in SwiftLint 2018-09-16 20:33:28 -07:00
Marcelo Fabri bf85625ed8 Merge pull request #2396 from marcelofabri/static_operator
Add static_operator opt-in rule
2018-09-14 10:44:28 -07:00
Marcelo Fabri b92b236a5e Add static_operator opt-in rule
Fixes #2395
2018-09-11 09:34:10 -07:00
Marcelo Fabri dfb447490e Enable collection_alignment on SwiftLint 2018-09-11 09:31:54 -07:00
Dalton Claybrook b20424426c Add updates based on PR feedback 2018-09-10 23:45:56 -04:00
Dalton Claybrook 9f74749473 Add shared non-triggering examples to the tests 2018-09-10 23:45:56 -04:00
Dalton Claybrook 74f7c1481d Update collection alignment rule name 2018-09-10 23:45:56 -04:00
Dalton Claybrook dfa92dc07d Add bridge to NSString to fix linux issue 2018-09-10 23:45:56 -04:00
Dalton Claybrook 81746c6507 Make collection alignment rule opt-in 2018-09-10 23:45:56 -04:00
Dalton Claybrook 4e27bf9f87 Collection alignment rule is no longer an automatic testable 2018-09-10 23:45:56 -04:00
Dalton Claybrook a71bb4dd48 Add more triggering and non-triggering examples 2018-09-10 23:45:56 -04:00
Dalton Claybrook 0597df5b8c Add support for colon alignment 2018-09-10 23:45:56 -04:00
Dalton Claybrook 31995f916f Clean up collection alignment rule to mimic other alignment rules 2018-09-10 23:45:56 -04:00
Dalton Claybrook d8a043f84b Create CollectionAlignmentConfiguration 2018-09-10 23:45:56 -04:00
Dalton Claybrook 45b0881f1d Add Collection Alignment rule and implement basic left-alignment case 2018-09-10 23:45:56 -04:00
Marcelo Fabri c9f315a798 Merge pull request #2372 from marcelofabri/identical_operands
Add identical_operands opt-in rule
2018-09-09 20:47:49 -07:00
JP Simard 53d8a3aba9 Add UnusedPrivateDeclarationRule (#2385)
* Add UnusedPrivateDeclarationRule

* Temporarily disable UnusedPrivateDeclarationRule tests on Xcode 10

So we can merge UnusedPrivateDeclarationRule without having to wait
for CircleCI to update its Xcode 10 version.
2018-09-05 21:59:45 -07:00
JP Simard 8d734366fb Remove unused private declarations (#2386) 2018-09-03 16:45:02 -07:00
Marcelo Fabri fad73d36f4 Use File.syntaxMap instead of making a request (#2384) 2018-09-03 10:39:11 -07:00
JP Simard e460c5ef9c Add Unused Import analyzer rule (#2381) 2018-09-02 14:45:02 -07:00
JP Simard dcc85fb0f3 Remove unused imports (#2382) 2018-09-02 14:09:04 -07:00
JP Simard 2bcea4b04d Add ability for SwiftLint to lint files with full type-checked AST awareness (#2379)
* Add LintableFilesVisitor

* Move LintCommand logic into LintOrAnalyzeCommand

to prepare for the upcoming analyze command

* Add AnalyzeCommand (not fully implemented yet in SwiftLintFramework)

* Add analyzerRules configuration member

* Add AnalyzerRule protocol

* Pass compiler arguments to validate/correct

* Add requiresFileOnDisk member to RuleDescription

This will be used by AnalyzerRules because they need a file on disk
to pass in the compiler arguments to SourceKit.

* Exclusively run AnalyzerRules when the Linter has compiler arguments

* Enable testing AnalyzerRules in TestHelpers

* Add ExplicitSelfRule

* Update documentation

* Fix `analyze --autocorrect`

* Improve performance of CompilerArgumentsExtractor

* Fix lint command actually running analyze

* Move File operations in TestHelpers into a private extension

* Add analyzer column to rules command and markdown documentation

* Use a Set literal

* Make AnalyzerRule inherit from OptInRule

* Mention analyzer_rules in readme

* Mention that analyzer rules are slow
2018-09-02 00:13:27 -07:00
Marcelo Fabri be60504dad Enable identical_operands rule on the project 2018-08-30 23:12:44 -07:00
Marcelo Fabri 5bb483d72b Add identical_operands opt-in rule 2018-08-30 23:12:19 -07:00
Dalton Claybrook 0c20003179 Improve description strings for Toggle Bool rule 2018-08-30 17:10:58 -04:00
Dalton Claybrook 585b9ab950 Fix incorrect triggering markers 2018-08-30 15:55:52 -04:00