Glavin001/tslint-clean-code

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

Open

#38 aberto em 10 de jan. de 2018

Ver no GitHub
 (1 comment) (0 reactions) (0 assignees)TypeScript (15 forks)github user discovery
buggood first issuehelp wanted

Métricas do repositório

Stars
 (175 stars)
Métricas de merge de PR
 (Nenhuma PRs mesclada em 30d)

Description

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
        );
    }
}

Guia do colaborador