buddy.js, JavaScript的幻数检测

分享于 

7分钟阅读

GitHub

  繁體 雙語
Magic number detection for javascript
  • 源代码名称:buddy.js
  • 源代码网址:http://www.github.com/danielstjules/buddy.js
  • buddy.js源代码文档
  • buddy.js源代码下载
  • Git URL:
    git://www.github.com/danielstjules/buddy.js.git
    Git Clone代码到本地:
    git clone http://www.github.com/danielstjules/buddy.js
    Subversion代码到本地:
    $ svn co --depth empty http://www.github.com/danielstjules/buddy.js
    Checked out revision 1.
    $ cd repo
    $ svn up trunk
    

    buddy.js

    javascript的幻数检测。 让好友在你的代码中找出未命名的数字常量。

    Build Status

    概述

    我们都知道,作为编程实践,幻数被 frowned。 它们可能不表示它的含义,并且当多次使用时,可能会导致未来的不一致。 他们可以向你公开错误的风险,阻碍维护和对可以读性的影响。 这就是Buddy的位置。

    Buddy是一个cli工具,它渴望在代码中找到神奇的数字。 它接受要解析的路径列表,并使用所选报告器呈现任何找到的实例。 在目录中,递归遍历它们,只对 .js 文件进行分析。 任何 node_modules 目录也被忽略。

    由于 const 在JavaScript中不是广泛的,它默认为搜索对象表达式或者变量声明中不是惟一文本的数字。 此外,可以忽略特定值,如 0和 1,默认情况下忽略这些值。

    intro-screenshot

    谁是好孩子?

    什么是幻数?

    魔术数字是未命名的数值常数,但有时该术语也可以用来引用它的他文字。 采用以下设计好的示例:

    functiongetTotal(subtotal) {
     var beforeTax = subtotal +9.99;
     return beforeTax + (beforeTax *0.13);
    }

    在 上面 函数中,两个数字的含义可能不清楚。 这个 9.99电荷是多少? 我们假设它是一个运送速率。 那 0.13? 这是销售税伙伴伙伴将删除这两个实例:

    
    $ buddy example.js
    
    
    
    example.js:2 | var beforeTax = subtotal + 9.99;
    
    
    example.js:3 | return beforeTax + (beforeTax * 0.13);
    
    
    
     2 magic numbers found across 1 file
    
    
    
    

    如果税率在多个位置使用,则容易出现人为错误。 不能立即清楚,9.99电荷是一个平速的运输费用,这会影响维护。 那么这将如何改善?

    varFLAT_SHIPPING_COST=9.99;varSALES_TAX=0.13;functiongetTotal(subtotal) {
     var beforeTax = subtotal +FLAT_SHIPPING_COST;
     return beforeTax + (beforeTax *SALES_TAX);
    }

    或者,根据目标平台或者浏览器,使用 const 关键字进行变量声明而不是 var。 虽然 const 在 node 中可用,但你应该注意它的浏览器兼容性( 前端 JavaScript )。

    
    $ buddy example.js
    
    
    
     No magic numbers found across 1 file
    
    
    
    

    安装

    它可以通过 npm 安装,使用:

    
    npm install -g buddy.js
    
    
    
    

    还可用:grunt-buddyjsgulp-buddy.js。

    用法

    
    Usage: buddy [options] <paths.. .>
    
    
    
    Options:
    
    
    
     -h, --help output usage information
    
    
     -V, --version output the version number
    
    
     -d, --detect-objects detect object expressions and properties
    
    
     -e, --enforce-const require literals to be defined using const
    
    
     -i, --ignore <numbers> list numbers to ignore (default: 0,1)
    
    
     -I, --disable-ignore disables the ignore list
    
    
     -r, --reporter [simple|detailed|json] specify reporter to use (default: simple)
    
    
     -C, --no-color disables colors
    
    
    
    

    如果在项目目录中存在一个 .buddyrc 文件,它的值将被用来代替列出的默认值。 例如:

    {
     "detectObjects":false,
     "enforceConst":false,
     "ignore": [0, 1, 2], // Use empty array to disable ignore"reporter":"detailed"}

    插件集成

    你可以在你的库源上轻松运行Buddy作为构建的一部分。 它将在没有找到幻数的情况下退出,错误代码为 0. 否则它将返回一个正错误代码,并导致生成失败。 例如使用 Travis CI,你可以将以下两个条目添加到你的.travis.yml:

    
    before_script:
    
    
     -"npm install -g buddy.js"
    
    
    
    script:
    
    
     -"buddy./path/to/src"
    
    
    
    

    记者

    有关其他上下文,请尝试使用详细报告器。 或者,为了记录输出和与质量保证流程集成,json报告器可以使用。

    detailed-reporter

    忽略数字

    可以通过以下三种方式忽略幻数:

    • 使用 --ignore 标志忽略它的值
    • 行包含以下注释 buddy ignore:line
    • 行位于 buddy ignore:startbuddy ignore:end 之间。

    给出以下示例时,存在两个可以忽略的幻数:

    varSECOND=1000;varMINUTE=60*SECOND;varHOUR=60*MINUTE;

    使用 命令行 选项,可以使用以下命令运行伙伴: buddy example.js --ignore 60 或者,如果首选,你可以指定实例在情况下被忽略:

    varSECOND=1000;varMINUTE=60*SECOND; // buddy ignore:linevarHOUR=60*MINUTE; // buddy ignore:line

    或者更好,你可以使用指令忽略某个范围内的所有幻数:

    // buddy ignore:startvarSECOND=1000;varMINUTE=60*SECOND;varHOUR=60*MINUTE;// buddy ignore:end

    JAVA  Javascript  Detect  number  检测  Magic  
    相关文章