Kinvey/swift-sdk

View on GitHub
Kinvey/Kinvey/RemoveOperation.swift

Summary

Maintainability
A
3 hrs
Test Coverage

Function executeLocal has a Cognitive Complexity of 11 (exceeds 5 allowed). Consider refactoring.
Open

    func executeLocal(_ completionHandler: CompletionHandler? = nil) -> AnyRequest<ResultType> {
        let request = LocalRequest<ResultType>()
        request.execute { () -> Void in
            var count = 0
            if let cache = self.cache {
Severity: Minor
Found in Kinvey/Kinvey/RemoveOperation.swift - About 1 hr to fix

Cognitive Complexity

Cognitive Complexity is a measure of how difficult a unit of code is to intuitively understand. Unlike Cyclomatic Complexity, which determines how difficult your code will be to test, Cognitive Complexity tells you how difficult your code will be to read and comprehend.

A method's cognitive complexity is based on a few simple rules:

  • Code is not considered more complex when it uses shorthand that the language provides for collapsing multiple statements into one
  • Code is considered more complex for each "break in the linear flow of the code"
  • Code is considered more complex when "flow breaking structures are nested"

Further reading

Function executeLocal has 28 lines of code (exceeds 25 allowed). Consider refactoring.
Open

    func executeLocal(_ completionHandler: CompletionHandler? = nil) -> AnyRequest<ResultType> {
        let request = LocalRequest<ResultType>()
        request.execute { () -> Void in
            var count = 0
            if let cache = self.cache {
Severity: Minor
Found in Kinvey/Kinvey/RemoveOperation.swift - About 1 hr to fix

    Similar blocks of code found in 2 locations. Consider refactoring.
    Open

                if let response = response,
                    response.isOK,
                    let data = data,
                    let results = try? self.client.jsonParser.parseDictionary(from: data),
                    let count = results["count"] as? Int
    Severity: Minor
    Found in Kinvey/Kinvey/RemoveOperation.swift and 1 other location - About 40 mins to fix
    Kinvey/Kinvey/FileStore.swift on lines 1228..1240

    Duplicated Code

    Duplicated code can lead to software that is hard to understand and difficult to change. The Don't Repeat Yourself (DRY) principle states:

    Every piece of knowledge must have a single, unambiguous, authoritative representation within a system.

    When you violate DRY, bugs and maintenance problems are sure to follow. Duplicated code has a tendency to both continue to replicate and also to diverge (leaving bugs as two similar implementations differ in subtle ways).

    Tuning

    This issue has a mass of 50.

    We set useful threshold defaults for the languages we support but you may want to adjust these settings based on your project guidelines.

    The threshold configuration represents the minimum mass a code block must have to be analyzed for duplication. The lower the threshold, the more fine-grained the comparison.

    If the engine is too easily reporting duplication, try raising the threshold. If you suspect that the engine isn't catching enough duplication, try lowering the threshold. The best setting tends to differ from language to language.

    See codeclimate-duplication's documentation for more information about tuning the mass threshold in your .codeclimate.yml.

    Refactorings

    Further Reading

    Empty parentheses following method call with trailing closure argument should be removed
    Open

            request.execute() { data, response, error in
    Severity: Minor
    Found in Kinvey/Kinvey/RemoveOperation.swift by tailor

    redundant-parentheses

    Control flow constructs (if, else if, switch, for, while, repeat-while, and guard statements), Exception handling constructs (throw, and do/catch statements), and Initializers (array, dictionary, initializer patterns) should not be enclosed in parentheses.

    Additionally, method calls with no parameters and a trailing closure should not have empty parentheses following the method name.

    Control flow constructs

    • if, else if statement

    Preferred

    if SomeCondition {
    
    } else if SomeOtherCondition {
    }

    Not Preferred

    if (SomeCondition) {
    
    } else if (SomeOtherCondition) {
    }
    • switch statement

    Preferred

    switch SomeData {
        default:
            break
    }

    Not Preferred

    switch (SomeData) {
        default:
            break
    }
    • for loop

    Preferred

    for var i = 0; i < 10; i+=1 {
    
    }

    Not Preferred

    for (var i = 0; i < 10; i+=1) {
    
    }
    • while loop

    Preferred

    while SomeCondition {
    
    }

    Not Preferred

    while (SomeCondition) {
    
    }
    • repeat-while loop

    Preferred

    repeat {
    
    } while SomeCondition

    Not Preferred

    repeat {
    
    } while (SomeCondition)
    • guard clause

    Preferred

    guard true else {   }

    Not Preferred

    guard (true) else {   }

    Exception handling constructs

    • do/catch statement

    Preferred

    do  {
    
    } catch SomeException {
    
    }

    Not Preferred

    do  {
    
    } catch (SomeException) {
    
    }
    • throw statement

    Preferred

    throw SomeException

    Not Preferred

    throw (SomeException)

    Initializers

    • array items

    Preferred

    var shoppingList: [String] = ["Eggs", "Milk"]

    Not Preferred

    var shoppingList: [String] = [("Eggs"), ("Milk")]
    • dictionary items

    Preferred

    var airports: [String: String] = ["YYZ": "Toronto Pearson", "DUB": "Dublin"]

    Not Preferred

    var airports: [String: String] = [("YYZ"): ("Toronto Pearson"), ("DUB"): ("Dublin")]
    • initializer patterns

    Preferred

    var x: Int = 2
    var y: String = "Sleekbyte"
    var x = 2

    Not Preferred

    var x: Int = (2)
    var y: String = ("Sleekbyte")
    var x = (2)

    Method calls

    Preferred

    items.map {
      item in item.transform()
    }

    Not Preferred

    items.map() {
      item in item.transform()
    }

    Line should not have any trailing whitespace
    Open

        
    Severity: Minor
    Found in Kinvey/Kinvey/RemoveOperation.swift by tailor

    trailing-whitespace

    Flag whitespace after the last non-whitespace character on each line until the newline.

    Preferred

    let number = 42¬

    Not Preferred

    let number = 42••¬

    If statement should not have any line breaks before the opening brace
    Open

                {
    Severity: Minor
    Found in Kinvey/Kinvey/RemoveOperation.swift by tailor

    brace-style

    Definitions of - class - struct - function - Control flow constructs (if, else if, else, switch, for, while, repeat-while) - init - protocol - enum - closure - Getters and Setters (set, get) - extension

    should follow the One True Brace Style (1TBS): each construct has its opening brace one the same line along with the same indentation level as its header, the statements within the braces are indented, and the closing brace at the end is on the same indentation level as the header of the function at a line of its own. Braces are not omitted for a control statement with only a single statement in its scope. Every opening brace must also have one space preceding it.

    Classes

    Preferred

    class SomeClass {
    }
    
    class SomeClass: SomeSuperClass {
    }

    Not Preferred

    class SomeClass
    {
    }
    
    class SomeClass: SomeSuperClass{
    }

    Structs

    Preferred

    struct SomeStruct {
    }
    
    struct SomeStruct : SomeParentStruct {
    }

    Not Preferred

    struct SomeStruct
    {
    }
    
    struct SomeStruct : SomeParentStruct  {
    }

    Functions

    Preferred

    func someMethod() {
    }
    
    func someOtherFunction () -> () {
    }

    Not Preferred

    func someMethod()
    {
    }
    
    func someOtherFunction () -> ()
    {
    }

    Control flow constructs

    • if, else if, and else statement

    Preferred

    if SomeCondition {
    
    } else if someOtherCondition {
    } else {
    }

    Not Preferred

    if SomeCondition
    {
    
    }
    else if someOtherCondition
    {
    }
    else
    {
    }
    • switch statement

    Preferred

    switch SomeData {
        default:
            break
    }

    Not Preferred

    switch SomeData
    {
        default:
            break
    }
    • for loop

    Preferred

    for var i = 0; i < 10; i+=1 {
    
    }

    Not Preferred

    for var i = 0; i < 10; i+=1
    {
    
    }
    • while loop

    Preferred

    while SomeCondition {
    
    }

    Not Preferred

    while SomeCondition
    {
    
    }
    • repeat-while loop

    Preferred

    repeat {
    
    } while SomeCondition

    Not Preferred

    repeat
    {
    
    } while SomeCondition

    Initializers

    Preferred

    init(someParameter:Double, someOtherParameter:Double) {
       self.someMember = someParameter
       self.someOtherMember = someOtherParameter
    }

    Not Preferred

    init(someParameter:Double, someOtherParameter:Double)
    {
       self.someMember = someParameter
       self.someOtherMember = someOtherParameter
    }

    Protocols

    Preferred

    protocol SomeProtocol {
    
    }
    
    protocol SomeOtherProtocol : X {
    
    }

    Not Preferred

    protocol SomeProtocol
    {
    
    }
    
    protocol SomeOtherProtocol : X
    {
    }

    Enums

    Preferred

    enum SomeEnum {
        case A, B, C, D
    }
    
    enum SomeEnum {
        case A
        case B
        case C
        case D
    }
    
    enum SomeEnum: Int {
        case A, B, C = 5, D
    }

    Not Preferred

    enum SomeEnum
    {
        case A, B, C, D
    }
    
    enum SomeEnum
    {
        case A
        case B
        case C
        case D
    }
    
    enum SomeEnum: Int
    {
        case A, B, C = 5, D
    }

    Closures

    Preferred

    func someFunction () -> () {
    // closure
    }

    Not Preferred

    func someFunction () -> ()
    {
    // closure
    }

    Setters and Getters

    • set

    Preferred

    set {
        oldValue = newValue / 2
    }

    Not Preferred

    set
    {
        oldValue = newValue / 2
    }
    • get

    Preferred

    get {
        return value * 2
    }

    Not Preferred

    get
    {
        return value * 2
    }

    Extensions

    Preferred

    extension someExtension {
    }

    Not Preferred

    extension someExtension
    {
    }

    Line should not have any trailing whitespace
    Open

        
    Severity: Minor
    Found in Kinvey/Kinvey/RemoveOperation.swift by tailor

    trailing-whitespace

    Flag whitespace after the last non-whitespace character on each line until the newline.

    Preferred

    let number = 42¬

    Not Preferred

    let number = 42••¬

    Line should not have any trailing whitespace
    Open

        
    Severity: Minor
    Found in Kinvey/Kinvey/RemoveOperation.swift by tailor

    trailing-whitespace

    Flag whitespace after the last non-whitespace character on each line until the newline.

    Preferred

    let number = 42¬

    Not Preferred

    let number = 42••¬

    Line should not have any trailing whitespace
    Open

        
    Severity: Minor
    Found in Kinvey/Kinvey/RemoveOperation.swift by tailor

    trailing-whitespace

    Flag whitespace after the last non-whitespace character on each line until the newline.

    Preferred

    let number = 42¬

    Not Preferred

    let number = 42••¬

    Line should not have any trailing whitespace
    Open

        
    Severity: Minor
    Found in Kinvey/Kinvey/RemoveOperation.swift by tailor

    trailing-whitespace

    Flag whitespace after the last non-whitespace character on each line until the newline.

    Preferred

    let number = 42¬

    Not Preferred

    let number = 42••¬

    Line should not have any trailing whitespace
    Open

        
    Severity: Minor
    Found in Kinvey/Kinvey/RemoveOperation.swift by tailor

    trailing-whitespace

    Flag whitespace after the last non-whitespace character on each line until the newline.

    Preferred

    let number = 42¬

    Not Preferred

    let number = 42••¬

    There are no issues that match your filters.

    Category
    Status