oramics/dsp-kit

View on GitHub
packages/fft-asm/versions/fftc.js

Summary

Maintainability
B
6 hrs
Test Coverage

Function compute has 40 lines of code (exceeds 25 allowed). Consider refactoring.
Open

function compute (x, y, n, m) {
  var i = 0, j = 0, k = 0, n1 = 0, n2 = 0, a = 0;
  var c = 0, s = 0, t1 = 0, t2 = 0;

  // Bit-reverse
Severity: Minor
Found in packages/fft-asm/versions/fftc.js - About 1 hr to fix

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

    function compute (x, y, n, m) {
      var i = 0, j = 0, k = 0, n1 = 0, n2 = 0, a = 0;
      var c = 0, s = 0, t1 = 0, t2 = 0;
    
      // Bit-reverse
    Severity: Minor
    Found in packages/fft-asm/versions/fftc.js - 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

    Split initialized 'var' declarations into multiple statements.
    Open

      var c = 0, s = 0, t1 = 0, t2 = 0;
    Severity: Minor
    Found in packages/fft-asm/versions/fftc.js by eslint

    enforce variables to be declared either together or separately in functions (one-var)

    Variables can be declared at any point in JavaScript code using var, let, or const. There are many styles and preferences related to the declaration of variables, and one of those is deciding on how many variable declarations should be allowed in a single function.

    There are two schools of thought in this regard:

    1. There should be just one variable declaration for all variables in the function. That declaration typically appears at the top of the function.
    2. You should use one variable declaration for each variable you want to define.

    For instance:

    // one variable declaration per function
    function foo() {
        var bar, baz;
    }
    
    // multiple variable declarations per function
    function foo() {
        var bar;
        var baz;
    }

    The single-declaration school of thought is based in pre-ECMAScript 6 behaviors, where there was no such thing as block scope, only function scope. Since all var statements are hoisted to the top of the function anyway, some believe that declaring all variables in a single declaration at the top of the function removes confusion around scoping rules.

    Rule Details

    This rule enforces variables to be declared either together or separately per function ( for var) or block (for let and const) scope.

    Options

    This rule has one option, which can be a string option or an object option.

    String option:

    • "always" (default) requires one variable declaration per scope
    • "never" requires multiple variable declarations per scope

    Object option:

    • "var": "always" requires one var declaration per function
    • "var": "never" requires multiple var declarations per function
    • "let": "always" requires one let declaration per block
    • "let": "never" requires multiple let declarations per block
    • "const": "always" requires one const declaration per block
    • "const": "never" requires multiple const declarations per block

    Alternate object option:

    • "initialized": "always" requires one variable declaration for initialized variables per scope
    • "initialized": "never" requires multiple variable declarations for initialized variables per scope
    • "uninitialized": "always" requires one variable declaration for uninitialized variables per scope
    • "uninitialized": "never" requires multiple variable declarations for uninitialized variables per scope

    always

    Examples of incorrect code for this rule with the default "always" option:

    /*eslint one-var: ["error", "always"]*/
    /*eslint-env es6*/
    
    function foo() {
        var bar;
        var baz;
        let qux;
        let norf;
    }
    
    function foo(){
        const bar = false;
        const baz = true;
        let qux;
        let norf;
    }
    
    function foo() {
        var bar;
    
        if (baz) {
            var qux = true;
        }
    }

    Examples of correct code for this rule with the default "always" option:

    /*eslint one-var: ["error", "always"]*/
    /*eslint-env es6*/
    
    function foo() {
        var bar,
            baz;
        let qux,
            norf;
    }
    
    function foo(){
        const bar = true,
            baz = false;
        let qux,
            norf;
    }
    
    function foo() {
        var bar,
            qux;
    
        if (baz) {
            qux = true;
        }
    }
    
    function foo(){
        let bar;
    
        if (baz) {
            let qux;
        }
    }

    never

    Examples of incorrect code for this rule with the "never" option:

    /*eslint one-var: ["error", "never"]*/
    /*eslint-env es6*/
    
    function foo() {
        var bar,
            baz;
        const bar = true,
            baz = false;
    }
    
    function foo() {
        var bar,
            qux;
    
        if (baz) {
            qux = true;
        }
    }
    
    function foo(){
        let bar = true,
            baz = false;
    }

    Examples of correct code for this rule with the "never" option:

    /*eslint one-var: ["error", "never"]*/
    /*eslint-env es6*/
    
    function foo() {
        var bar;
        var baz;
    }
    
    function foo() {
        var bar;
    
        if (baz) {
            var qux = true;
        }
    }
    
    function foo() {
        let bar;
    
        if (baz) {
            let qux = true;
        }
    }

    var, let, and const

    Examples of incorrect code for this rule with the { var: "always", let: "never", const: "never" } option:

    /*eslint one-var: ["error", { var: "always", let: "never", const: "never" }]*/
    /*eslint-env es6*/
    
    function foo() {
        var bar;
        var baz;
        let qux,
            norf;
    }
    
    function foo() {
        const bar = 1,
              baz = 2;
        let qux,
            norf;
    }

    Examples of correct code for this rule with the { var: "always", let: "never", const: "never" } option:

    /*eslint one-var: ["error", { var: "always", let: "never", const: "never" }]*/
    /*eslint-env es6*/
    
    function foo() {
        var bar,
            baz;
        let qux;
        let norf;
    }
    
    function foo() {
        const bar = 1;
        const baz = 2;
        let qux;
        let norf;
    }

    Examples of incorrect code for this rule with the { var: "never" } option:

    /*eslint one-var: ["error", { var: "never" }]*/
    /*eslint-env es6*/
    
    function foo() {
        var bar,
            baz;
    }

    Examples of correct code for this rule with the { var: "never" } option:

    /*eslint one-var: ["error", { var: "never" }]*/
    /*eslint-env es6*/
    
    function foo() {
        var bar,
            baz;
        const bar = 1; // `const` and `let` declarations are ignored if they are not specified
        const baz = 2;
        let qux;
        let norf;
    }

    initialized and uninitialized

    Examples of incorrect code for this rule with the { "initialized": "always", "uninitialized": "never" } option:

    /*eslint one-var: ["error", { "initialized": "always", "uninitialized": "never" }]*/
    /*eslint-env es6*/
    
    function foo() {
        var a, b, c;
        var foo = true;
        var bar = false;
    }

    Examples of correct code for this rule with the { "initialized": "always", "uninitialized": "never" } option:

    /*eslint one-var: ["error", { "initialized": "always", "uninitialized": "never" }]*/
    
    function foo() {
        var a;
        var b;
        var c;
        var foo = true,
            bar = false;
    }
    
    for (let z of foo) {
        doSomething(z);
    }
    
    let z;
    for (z of foo) {
        doSomething(z);
    }

    Examples of incorrect code for this rule with the { "initialized": "never" } option:

    /*eslint one-var: ["error", { "initialized": "never" }]*/
    /*eslint-env es6*/
    
    function foo() {
        var foo = true,
            bar = false;
    }

    Examples of correct code for this rule with the { "initialized": "never" } option:

    /*eslint one-var: ["error", { initialized: "never" }]*/
    
    function foo() {
        var foo = true;
        var bar = false;
        var a, b, c; // Uninitialized variables are ignored
    }

    Compatibility

    Split initialized 'var' declarations into multiple statements.
    Open

      var i = 0, j = 0, k = 0, n1 = 0, n2 = 0, a = 0;
    Severity: Minor
    Found in packages/fft-asm/versions/fftc.js by eslint

    enforce variables to be declared either together or separately in functions (one-var)

    Variables can be declared at any point in JavaScript code using var, let, or const. There are many styles and preferences related to the declaration of variables, and one of those is deciding on how many variable declarations should be allowed in a single function.

    There are two schools of thought in this regard:

    1. There should be just one variable declaration for all variables in the function. That declaration typically appears at the top of the function.
    2. You should use one variable declaration for each variable you want to define.

    For instance:

    // one variable declaration per function
    function foo() {
        var bar, baz;
    }
    
    // multiple variable declarations per function
    function foo() {
        var bar;
        var baz;
    }

    The single-declaration school of thought is based in pre-ECMAScript 6 behaviors, where there was no such thing as block scope, only function scope. Since all var statements are hoisted to the top of the function anyway, some believe that declaring all variables in a single declaration at the top of the function removes confusion around scoping rules.

    Rule Details

    This rule enforces variables to be declared either together or separately per function ( for var) or block (for let and const) scope.

    Options

    This rule has one option, which can be a string option or an object option.

    String option:

    • "always" (default) requires one variable declaration per scope
    • "never" requires multiple variable declarations per scope

    Object option:

    • "var": "always" requires one var declaration per function
    • "var": "never" requires multiple var declarations per function
    • "let": "always" requires one let declaration per block
    • "let": "never" requires multiple let declarations per block
    • "const": "always" requires one const declaration per block
    • "const": "never" requires multiple const declarations per block

    Alternate object option:

    • "initialized": "always" requires one variable declaration for initialized variables per scope
    • "initialized": "never" requires multiple variable declarations for initialized variables per scope
    • "uninitialized": "always" requires one variable declaration for uninitialized variables per scope
    • "uninitialized": "never" requires multiple variable declarations for uninitialized variables per scope

    always

    Examples of incorrect code for this rule with the default "always" option:

    /*eslint one-var: ["error", "always"]*/
    /*eslint-env es6*/
    
    function foo() {
        var bar;
        var baz;
        let qux;
        let norf;
    }
    
    function foo(){
        const bar = false;
        const baz = true;
        let qux;
        let norf;
    }
    
    function foo() {
        var bar;
    
        if (baz) {
            var qux = true;
        }
    }

    Examples of correct code for this rule with the default "always" option:

    /*eslint one-var: ["error", "always"]*/
    /*eslint-env es6*/
    
    function foo() {
        var bar,
            baz;
        let qux,
            norf;
    }
    
    function foo(){
        const bar = true,
            baz = false;
        let qux,
            norf;
    }
    
    function foo() {
        var bar,
            qux;
    
        if (baz) {
            qux = true;
        }
    }
    
    function foo(){
        let bar;
    
        if (baz) {
            let qux;
        }
    }

    never

    Examples of incorrect code for this rule with the "never" option:

    /*eslint one-var: ["error", "never"]*/
    /*eslint-env es6*/
    
    function foo() {
        var bar,
            baz;
        const bar = true,
            baz = false;
    }
    
    function foo() {
        var bar,
            qux;
    
        if (baz) {
            qux = true;
        }
    }
    
    function foo(){
        let bar = true,
            baz = false;
    }

    Examples of correct code for this rule with the "never" option:

    /*eslint one-var: ["error", "never"]*/
    /*eslint-env es6*/
    
    function foo() {
        var bar;
        var baz;
    }
    
    function foo() {
        var bar;
    
        if (baz) {
            var qux = true;
        }
    }
    
    function foo() {
        let bar;
    
        if (baz) {
            let qux = true;
        }
    }

    var, let, and const

    Examples of incorrect code for this rule with the { var: "always", let: "never", const: "never" } option:

    /*eslint one-var: ["error", { var: "always", let: "never", const: "never" }]*/
    /*eslint-env es6*/
    
    function foo() {
        var bar;
        var baz;
        let qux,
            norf;
    }
    
    function foo() {
        const bar = 1,
              baz = 2;
        let qux,
            norf;
    }

    Examples of correct code for this rule with the { var: "always", let: "never", const: "never" } option:

    /*eslint one-var: ["error", { var: "always", let: "never", const: "never" }]*/
    /*eslint-env es6*/
    
    function foo() {
        var bar,
            baz;
        let qux;
        let norf;
    }
    
    function foo() {
        const bar = 1;
        const baz = 2;
        let qux;
        let norf;
    }

    Examples of incorrect code for this rule with the { var: "never" } option:

    /*eslint one-var: ["error", { var: "never" }]*/
    /*eslint-env es6*/
    
    function foo() {
        var bar,
            baz;
    }

    Examples of correct code for this rule with the { var: "never" } option:

    /*eslint one-var: ["error", { var: "never" }]*/
    /*eslint-env es6*/
    
    function foo() {
        var bar,
            baz;
        const bar = 1; // `const` and `let` declarations are ignored if they are not specified
        const baz = 2;
        let qux;
        let norf;
    }

    initialized and uninitialized

    Examples of incorrect code for this rule with the { "initialized": "always", "uninitialized": "never" } option:

    /*eslint one-var: ["error", { "initialized": "always", "uninitialized": "never" }]*/
    /*eslint-env es6*/
    
    function foo() {
        var a, b, c;
        var foo = true;
        var bar = false;
    }

    Examples of correct code for this rule with the { "initialized": "always", "uninitialized": "never" } option:

    /*eslint one-var: ["error", { "initialized": "always", "uninitialized": "never" }]*/
    
    function foo() {
        var a;
        var b;
        var c;
        var foo = true,
            bar = false;
    }
    
    for (let z of foo) {
        doSomething(z);
    }
    
    let z;
    for (z of foo) {
        doSomething(z);
    }

    Examples of incorrect code for this rule with the { "initialized": "never" } option:

    /*eslint one-var: ["error", { "initialized": "never" }]*/
    /*eslint-env es6*/
    
    function foo() {
        var foo = true,
            bar = false;
    }

    Examples of correct code for this rule with the { "initialized": "never" } option:

    /*eslint one-var: ["error", { initialized: "never" }]*/
    
    function foo() {
        var foo = true;
        var bar = false;
        var a, b, c; // Uninitialized variables are ignored
    }

    Compatibility

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

    export function fft (real, imag, dir) {
      dir = dir || 'forward'
      var n = real.length
      if (imag.length !== n) throw Error('Real and imag parts should have same size, but was ' + n + ' and ' + imag.length)
      var m = Math.log(n) / Math.log(2)
    Severity: Major
    Found in packages/fft-asm/versions/fftc.js and 1 other location - About 3 hrs to fix
    packages/fft-asm/versions/mini-fft.js on lines 10..16

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

    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

    There are no issues that match your filters.

    Category
    Status