Kinvey/swift-sdk

View on GitHub
Kinvey/Kinvey/RealmSync.swift

Summary

Maintainability
C
1 day
Test Coverage

Function pendingOperations has 73 lines of code (exceeds 25 allowed). Consider refactoring.
Open

    func pendingOperations(useMultiInsert: Bool) -> AnyRandomAccessCollection<PendingOperation> {
        log.verbose("Fetching pending operations")
        var results: [PendingOperation]!
        let collectionName = self.collectionName
        executor.executeAndWait {
Severity: Major
Found in Kinvey/Kinvey/RealmSync.swift - About 2 hrs to fix

    Function pendingOperations has a Cognitive Complexity of 16 (exceeds 5 allowed). Consider refactoring.
    Open

        func pendingOperations(useMultiInsert: Bool) -> AnyRandomAccessCollection<PendingOperation> {
            log.verbose("Fetching pending operations")
            var results: [PendingOperation]!
            let collectionName = self.collectionName
            executor.executeAndWait {
    Severity: Minor
    Found in Kinvey/Kinvey/RealmSync.swift - About 2 hrs 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

    Avoid too many return statements within this function.
    Open

                    return (pendingOperation: pendingOperation, url: url, objectId: objectId, json: json)
    Severity: Major
    Found in Kinvey/Kinvey/RealmSync.swift - About 30 mins to fix

      Avoid too many return statements within this function.
      Open

                      return
      Severity: Major
      Found in Kinvey/Kinvey/RealmSync.swift - About 30 mins to fix

        Avoid too many return statements within this function.
        Open

                return AnyRandomAccessCollection(results)
        Severity: Major
        Found in Kinvey/Kinvey/RealmSync.swift - About 30 mins to fix

          Avoid too many return statements within this function.
          Open

                              return
          Severity: Major
          Found in Kinvey/Kinvey/RealmSync.swift - About 30 mins to fix

            Function removeAllPendingOperations has a Cognitive Complexity of 6 (exceeds 5 allowed). Consider refactoring.
            Open

                func removeAllPendingOperations(_ objectId: String?, methods: [String]?) -> Int {
                    signpost(.begin, log: osLog, name: "Remove All PendingOperations", "Object ID: %@", String(describing: objectId))
                    defer {
                        signpost(.end, log: osLog, name: "Remove All PendingOperations", "Object ID: %@", String(describing: objectId))
                    }
            Severity: Minor
            Found in Kinvey/Kinvey/RealmSync.swift - About 25 mins 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

            Force casts should be avoided
            Open

                lazy var entityType = T.self as! Entity.Type
            Severity: Minor
            Found in Kinvey/Kinvey/RealmSync.swift by tailor

            forced-type-cast

            Avoid using the forced form of the type cast operator (as!) because Swift is not able to determine at compile time if the type conversion will succeed. In the event of an unsuccessful conversion, a runtime error will be triggered. The conditional form of the type cast operator (as?) is safer and should be used when possible.

            Preferred

            if let movie = item as? Movie {
                print("Movie: '\(movie.name)', dir. \(movie.director)")
            }

            Not Preferred

            let movie = item as! Movie
            print("Movie: '\(movie.name)', dir. \(movie.director)")

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

                            pendingOperations.forEachAutoreleasepool { pendingOperation in
                                if !pendingOperation.collectionName.isEmpty,
                                    let objectId = pendingOperation.objectId
                                {
                                    let previousPendingOperations = self.realm.objects(RealmPendingOperation.self).filter("collectionName == %@ AND objectId == %@", pendingOperation.collectionName, objectId)
            Severity: Major
            Found in Kinvey/Kinvey/RealmSync.swift and 1 other location - About 1 hr to fix
            Kinvey/Kinvey/RealmSync.swift on lines 57..65

            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 81.

            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

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

                        try! self.realm.write {
                            if !pendingOperation.collectionName.isEmpty,
                                let objectId = pendingOperation.objectId
                            {
                                let previousPendingOperations = self.realm.objects(RealmPendingOperation.self).filter("collectionName == %@ AND objectId == %@", pendingOperation.collectionName, objectId)
            Severity: Major
            Found in Kinvey/Kinvey/RealmSync.swift and 1 other location - About 1 hr to fix
            Kinvey/Kinvey/RealmSync.swift on lines 76..84

            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 81.

            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

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

                                {
            Severity: Minor
            Found in Kinvey/Kinvey/RealmSync.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/RealmSync.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/RealmSync.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/RealmSync.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/RealmSync.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/RealmSync.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/RealmSync.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/RealmSync.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/RealmSync.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/RealmSync.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••¬

            Constant should be lowerCamelCase
            Open

                        let _results = self.pendingOperationsReferences()
            Severity: Minor
            Found in Kinvey/Kinvey/RealmSync.swift by tailor

            constant-naming

            Global constants should follow either UpperCamelCase or lowerCamelCase naming conventions. Local constants should follow lowerCamelCase naming conventions.

            Preferred

            let MaxHeight = 42
            let maxHeight = 42

            Not Preferred

            let max_height = 42

            Line should not have any trailing whitespace
            Open

                
            Severity: Minor
            Found in Kinvey/Kinvey/RealmSync.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/RealmSync.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/RealmSync.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/RealmSync.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/RealmSync.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/RealmSync.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/RealmSync.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••¬

            Colon at column 42 should have no spaces before it
            Open

                        var everythingElse = [String : PendingOperation]()
            Severity: Minor
            Found in Kinvey/Kinvey/RealmSync.swift by tailor

            colon-whitespace

            There should be no whitespace preceding the colon, exactly one whitespace after the colon for: * var, class, struct, protocol, extension, func, and tuple declarations * dict literals and types * case statements

            However, for conditional expressions there should be a single whitespace before and after the colon.

            Variable declarations

            Preferred

            var x: Int = 2

            Not Preferred

            var x : Int
            var y:   String

            Dictionary literals and types

            Preferred

            var x = [ 'key1': 1, 'key2': 2 ]
            var y: [ Int: String ]

            Not Preferred

            var x = [ 'key1' : 1, 'key2':  3]
            var y: [ Int :    String ]

            Case statements

            Preferred

            switch character {
            case "a": doSomething(a);
            default: alert();
            }

            Not Preferred

            switch character {
            case "a" : doSomething(a);
            default:     alert();
            }

            Class, Struct, Protocol, and Extension declarations

            Preferred

            class ClassName: BaseClass {
            }
            
            struct StructName: BaseStruct {
            }
            
            protocol ProtocolName: AnotherProtocol {
            }
            
            extension TypeName: ProtocolName {
            }

            Not Preferred

            class ClassName : BaseClass {
            }
            
            struct StructName:  BaseStruct {
            }
            
            protocol ProtocolName:AnotherProtocol {
            }
            
            extension TypeName : ProtocolName {
            }

            Tuple declarations

            Preferred

            var y = (key: 1, value: 2)

            Not Preferred

            var y = (key:1, value : 2)

            Function declarations

            Preferred

            func someFunction<t: someclass u: someprotocol>(someT: T, someU: U) {
            }</t:>

            Not Preferred

            func someFunction<t : someclass u:someprotocol>(someT: T, someU: U) {
            }</t>

            Conditional expressions

            Preferred

            var x = condition ? a : b

            Not Preferred

            var x = condition ? a: b
            var x = condition ? a   : b

            Line should not have any trailing whitespace
            Open

                
            Severity: Minor
            Found in Kinvey/Kinvey/RealmSync.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/RealmSync.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/RealmSync.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