Commit Graph

2723 Commits

Author SHA1 Message Date
Paul Taykalo e00a8bf11a That day when regex can be faster than code 2019-11-12 20:36:47 +02:00
Paul Taykalo d181cb0fd2 Speedup let var whitespace rule a bit 2019-11-12 03:03:22 +02:00
Paul Taykalo 3a36b6998b Fix false-positive identical operands rule 2019-11-10 21:54:34 +02:00
JP Simard 36775cce86 release 0.37.0 2019-11-09 14:31:56 -08:00
JP Simard 4aad7e14b4 Space between ':' and 'inout' 2019-11-09 14:19:01 -08:00
JP Simard 067b1e075f Docstring edits 2019-11-09 13:39:05 -08:00
Paul Taykalo f569e3d973 Rename Traverse to Traverse with Parent 2019-11-09 13:29:43 -08:00
Paul Taykalo c85d3099a1 Update documentation 2019-11-09 13:29:43 -08:00
Paul Taykalo a52a94c987 Use Generic Dictionary Traversing for multiple cases 2019-11-09 13:29:43 -08:00
Paul Taykalo 523b2618c1 Update SubstitutionCorrectableASTRule for using inout array when traversing dictionaries 2019-11-09 13:29:42 -08:00
Paul Taykalo dfe61fab8d Faster dictionaries traversing for AST rules 2019-11-09 13:29:42 -08:00
Paul Taykalo 848370a522 Simpler check for FileTypesOrderRule 2019-11-08 01:35:01 +02:00
JP Simard beaa2a8a87 Update Commandant and SourceKitten, drop Result (#2947) 2019-11-07 10:59:16 -08:00
Paul Taykalo d771d223e3 Remove unused imports 2019-11-07 16:20:18 +02:00
Paul Taykalo 30a1c5b65e Update changelog 2019-11-07 15:19:18 +02:00
Paul Taykalo ac40778cb3 Use SwiftLintFile wrapper over the File 2019-11-07 15:19:17 +02:00
Paul Taykalo 2a308c1698 Fix DiscardedNotificationCenterObserverRule 2019-11-07 12:07:56 +02:00
Paul Taykalo ec6d82af56 Cache Access Control Level property 2019-11-07 11:52:50 +02:00
Paul Taykalo b1cdc119ec Use swift enums instead of raw values 2019-11-07 11:05:19 +02:00
Paul Taykalo 4fff698c09 Update UnusedDeclarationRule to use SourceKittenDictionary 2019-11-07 10:28:30 +02:00
Paul Taykalo 18a3896f97 Update swift structure dictionary 2019-11-07 08:51:16 +02:00
Paul Taykalo f0ad230e81 fix linting issues 2019-11-07 08:50:50 +02:00
Paul Taykalo b901c670d4 Cache file structure dictionary 2019-11-07 08:50:50 +02:00
Paul Taykalo 8c963d2c15 Working solution with SouceKittenDictionary wrapper 2019-11-07 08:50:50 +02:00
Paul Taykalo 6175c004da Faster tokens resolving in syntaxmap (#2916)
When the request is asked which tokens are have in an intersection, the previous solution was searching for first Index (linearly) and then filtered everything that was coming after that index using `intersect function`

The updated solution  will search for the first token index using`binary search`

# Speedup

While this is only one function was updated, the next options were considered:

- [**lin+filter**] old solution 
- [**lin+prefix**] old solution with `prefix:wihle` instead of filtering
- [**bin+filter**] binary search with filter 
- [**bin+prefix**] binary search with `prefix:wihle` instead of filtering

The speedup highly depends on the file sizes. The bigger/longer files the bigger win is

# Benchmark

## Kickstarter

|lin+filter|lin+prefix|bin+filter|bin+prefix|speedup|
|-|-|-|-|-|
|0.494|0.243|0.390|\***0.117\***|  ~4x |

## Swift

|lin+filter|lin+prefix|bin+filter|bin+prefix|speedup|
|-|-|-|-|-|
|1.739|0.740|1.273|\***0.103**\*| ~16x |

## WordPress
|lin+filter|lin+prefix|bin+filter|bin+prefix|speedup|
|-|-|-|-|-|
|1.270|0.526|0.918|0.148| ~8x |

# Testing code

This code was tested with these parts of code (in Release build)
```
fileprivate var counter = 0
fileprivate var times: [String: Double] = [:]
fileprivate let timesQueue = DispatchQueue.init(label: "benchmarks")

fileprivate func timeLog<T>(_ name: String, block: () -> T) -> T {
    let start = DispatchTime.now()
    let result = block()
    let end = DispatchTime.now()
    timesQueue.async {
        let oldValue = times[name, default:0.0]
        let diff = TimeInterval(end.uptimeNanoseconds - start.uptimeNanoseconds) / 1_000_000_000
        let newValue = oldValue + diff
        times[name] = newValue
        counter += 1
        if counter % 1000 * times.count == 0 {
            print("!!!!: \(times)")
        }
    }
    return result
}

    internal func tokens(inByteRange byteRange: NSRange) -> [SyntaxToken] {
        let new = timeLog("new") { tokensFast(inByteRange: byteRange) }
        let new2 = timeLog("old") { tokensOld(inByteRange: byteRange) }
        return arc4random() % 2 == 1 ? new : new2
    }

```
2019-11-06 15:21:38 -08:00
Norio Nomura 80d3813214 Add GitHub Actions Logging reporter (github-actions-logging)
Use [GitHub Actions Logging](https://help.github.com/en/github/automating-your-workflow-with-github-actions/development-tools-for-github-actions#logging-commands) same as https://github.com/norio-nomura/action-swiftlint does.
2019-11-04 19:36:25 +09:00
Paul Taykalo 1db3eb7890 Change zip.allSatisfy to map == 2019-10-25 19:53:45 +03:00
Paul Taykalo b996e0c890 Allow force casts when chainng operators 2019-10-25 19:40:37 +03:00
Paul Taykalo 94c3f9a14b Update rules and fix syntax violations 2019-10-25 19:20:34 +03:00
Paul Taykalo 1833a44031 Include optional chaining operator when joiing operands 2019-10-25 16:03:03 +03:00
Paul Taykalo a361848866 Identical operands rule using syntaxmap 2019-10-25 04:04:38 +03:00
JP Simard 652e5dd59c release 0.36.0 2019-10-24 15:25:32 -07:00
Marcelo Fabri 355a219b8a PR feedback 2019-10-23 12:31:07 -07:00
Marcelo Fabri cff53944c4 Optimize redundant_void_return 2019-10-20 20:40:11 -07:00
Marcelo Fabri a9ae253bd4 Merge pull request #2889 from 00FA9A/mp/2888
Add `raw_value_for_camel_cased_codable_enum` (#2888)
2019-10-20 20:37:20 -07:00
Marcelo Fabri 029f1a9916 Merge pull request #2892 from vani2/syntactic-sugar-autocorrect
Add autocorrection to the syntactic sugar rule
2019-10-20 20:36:41 -07:00
Marcelo Fabri 3b5458a248 Use String.isLowercase() 2019-10-20 19:19:54 -07:00
MarkoPejovic 109899c56c Implement #2888 2019-10-20 19:19:54 -07:00
Ivan Vavilov 8af5825ca1 Add some test cases 2019-10-20 19:08:54 -07:00
Ivan Vavilov ffa955dc7d Add autocorrection to the syntactic sugar rule 2019-10-20 19:08:54 -07:00
Paul Taykalo d891b1ec60 Use binary search when searching for lines indexes in LetVarWhiteSpacesRule (#2901)
* Use binary search when searching for lines indexes

* Update Changelog

* Remove unused old method of searching line by offset

* Update line by offset call with already implemented function
2019-10-20 11:30:32 -07:00
JP Simard 3706f31fd5 Fix running analyze on Xcode 11 build outputs (#2912)
Xcode 11 started using _response files_ [0] to avoid exceeding command
line length limits. For SwiftLint's analyzer rules to find which
compiler arguments are needed for a given file being analyzed, we first
need to expand these response files to their contents.

This was ported over from https://github.com/jpsim/SourceKitten/pull/613

[0]: https://github.com/apple/swift/pull/16362
2019-10-19 22:19:44 -07:00
Marcelo Fabri 2dcaf3ee78 Merge pull request #2894 from realm/mf-update-sourcekitten
Update SourceKitten to 0.26.0
2019-10-08 09:36:57 -07:00
Marcelo Fabri f5174b3168 Update SourceKitten to 0.26.0 2019-10-08 00:51:18 -07:00
Max Härtwig 1a5aa05c34 Add missing Foundation import 2019-10-07 09:42:19 +02:00
Max Härtwig b9368cbca6 Fix reference to 2019-10-07 09:27:31 +02:00
Max Härtwig a157957df4 Make toggle_bool rule substitution correctable 2019-10-07 01:16:15 +02:00
Marcelo Fabri d4ef1f0ad0 Add flatmap_over_map_reduce opt-in rule
Fixes #2883
2019-09-26 10:07:12 -07:00
Nathan Van Fleet 406a8f20f8 Add Mark rule for triple slash Mark comments (#2868)
* Add Mark rule for triple slash Mark comments

* Move changelog entry to appropriate section

* Re-add Package.resolved

* Fix trailing comma

* Rebuild Rules.md using Xcode 10.3

* Combine two regexes into one
2019-09-18 17:21:13 -07:00
Colton Schlosser 2c076151f4 Add contains_over_range_not_nil rule, make contains_over_first_not_nil also match == nil (#2811) 2019-09-03 12:03:00 -04:00