Glavin001/tslint-clean-code

feature-envy doesn't take destructuring of own data into account.

Open

#38 aperta il 10 gen 2018

Vedi su GitHub
 (1 commento) (0 reazioni) (0 assegnatari)TypeScript (15 fork)github user discovery
buggood first issuehelp wanted

Metriche repository

Star
 (175 star)
Metriche merge PR
 (Nessuna PR mergiata in 30 g)

Descrizione

When destructuring the data of an object inside one of its methods, the feature-envy rule does not realize that the newly created variables actually belong to the object.

Example:

const foreign = {
    constant1: 5,
    constant2: 5,
    constant3: 5
};

class Foo {
    private ownStuff = {
        num1: 42,
        num2: 1337,
        num3: 1024
    };

    // Method "doStuff" uses "foreign" more than its own class "Foo". Extract or Move Method from "doStuff" into "foreign". (no-feature-envy)
    public doStuff(num: number) {
        const { num1, num2, num3, num4, num5, num6 } = this.ownStuff;
        return foreign.constant1 + foreign.constant2 + foreign.constant3 + num1 + num2 + num3;
    }

    // No error
    public doOtherStuff(num: number) {
        return (
            foreign.constant1 +
            foreign.constant2 +
            foreign.constant3 +
            this.ownStuff.num1 +
            this.ownStuff.num2 +
            this.ownStuff.num3
        );
    }
}

Guida contributor