2014-12-03 18 views
12

목표 : @author 태그가 프로젝트의 .js 파일 내부 어디에서나 사용되는 경우코드 스타일 위반으로 @author의 사용을 치료

문제 경고.

질문 : jshint 또는 다른 정적 코드 검사 도구가 도움이 될 수 있습니다 뭔가

인가? 그렇지 않은 경우 어떤 옵션이 있습니까?

설명 :

내가 완전히 Javadoc @author tag good practices 스레드에서 바울의 대답에 동의하고 불필요한 잡음으로 @author 태그를 취급합니다.

그리고 파이썬 세계에서는 사람들이 태그 사용을 확인하는 것을 보았습니다. 예를 들어 Openstack Style Guidelines@author 태그를 명시 적으로 사용하지 않습니다. 내가 자바 스크립트에서 같은 문제를 해결하기 위해 노력하고있어,

[H105] Don’t use author tags. 

을 지금 : 그들은 정의의 포함 flake8 검사 세트를 개발했다.

예제 (코드 품질 검사를 통과하지 않아야은) :

/** 
* @author John Smith <[email protected]> 
*/ 

'use strict'; 
+1

아니요, jshint 할 수 없습니다. 소스를 통해'@ author'를 찾는 grep을 수행하십시오. 원하는 경우 git pre-commit hook에 넣을 수 있습니다. 또는'@ author'를 만나면 문서를 만들 때 JSDoc을 해킹 할 수 있습니다. –

+0

@torazaburo 유용한 의견을 주셔서 감사합니다. 실제로 합법적 인 답변 일 수 있습니다. – alecxe

답변

7

아니, jshint는 할 수 없습니다. @author을 찾는 소스를 통해 grep을 수행하십시오. 원하는 경우 git pre-commit hook에 넣을 수 있습니다. 또는 @author을 만났을 때 문서를 만들 때 JSDoc을 해킹하여 오류를 일으킬 수 있습니다.

5

죄송합니다. 답변을 게시하기 전에이 문제를 해결하려고했지만 현상금이 거의 다되었습니다. ; ^)

This answer 자신의 JSHint 모듈을 작성하는 방법이 있다고 주장합니다.

  • https://github.com/jshint/jshint-next/wiki/Designreadme 말한다 그것의이 지점에서 수행 된 것 같습니다

    • , 이 프로젝트는 사용되지 않습니다. 메인 저장소 인에 병합되었으므로 좋은 표시입니다.

    의 그것과 같은 광고 작품과 다시 병합되었습니다 척하자.

    Great instructions here

    , 참고하지만 사람들은 "jshint - 다음"사이트에 있는지. 해당 페이지에서

    예제 코드 : 여기

    // This module errs on any identifier that doesn't starts with 'kitty'. 
    function myModule(linter) { 
        linter.on("Identifier", function (ident) { 
        if (ident.name && ident.name.slice(0, 5) !== "kitty") 
         linter.report.addError("C001", "More cats please."); 
        }); 
    } 
    

    은 린터 설정하는 방법에 대한 초기 섹션의 :

    var Linter = require("jshint").Linter; 
    var code = "<your beautiful JavaScript code here>"; 
    
    // Create a new instance of Linter. 
    var linter = new Linter(code); 
    
    // Now you can teach JSHint about your predefined variables. 
    // Note that default JavaScript identifiers are already there. 
    linter.addGlobals({ 
        jQuery: false, 
        MyPlugin: true 
    }); 
    
    // If you have any JSHint extensions, you can attach them 
    // to the current instance. 
    linter.addModule(myModule); 
    
    // Finally, parse your code. 
    linter.parse(); 
    

    을 나는 아직도 연구해야 할 것 (즉, 꽤 일반의 실현 linter.on 이외의 옵션은 Identifier이며, 예를 들어 String도 있습니다.)하지만 꽤 유망 해 보입니다.다시 말하지만, 지침 above을 사용하여 통합하는 방법을 볼 수 있습니다. 이 형식이 used in style.js 인 것 같습니다.

    나는 이 아니며이 아직 시도되었습니다. 집에서 시간을 보내지 않았다. 사과.

    torazaburo의 "Just grep it"응답이 작동하지 않는 특별한 이유가 있습니까? 코드 품질 워크 플로의 일부로이 기능이 필요합니까? 그렇다면이 "자신 만의 모듈 작성"이 갈 길이 될 것 같습니다.

    JSLint를 해킹 할 수있는 확실한 방법이 있습니다. 사용하고 계시다면, Crockford가 그 점을 이해할 수 있을지 모르겠습니다. ; ^)

  • +0

    하, 물론이 현상금은 *이 답을 쓰고 있습니다. 그것이 내가 얻는 것입니다. – ruffin

    +0

    :) 그것에 대해 걱정하지 마십시오.이 문제를 해결하고 다시 연락 드리겠습니다. 고맙습니다. (오늘 upvotes에서 오늘, 그러나 이것은 확실히 가치가있다) – alecxe

    +0

    FYI, 나는 그것을 'ESLint' (단순함에 유의)로 어떻게 해결했는지 게시했다. 바운티는 너에게 간다. 이것에 대해 조사해 주셔서 감사합니다. – alecxe

    4

    ESLint package - JavaScript 용 linting 유틸리티입니다.

    custom rule (주 그것이 얼마나 간단한)를 만든

    rules/no-author.js에 저장된 :

    /** 
    * @author John Smith <[email protected]> 
    */ 
    
    :

    이제
    /** 
    * @fileoverview A rule to disallow @author tag in code 
    */ 
    
    module.exports = function (context) { 
        "use strict"; 
        function checkComment(node) { 
         var commentToCheck = node.value.toLowerCase().trim(); 
    
         if (commentToCheck.indexOf("@author") !== -1) { 
          context.report(node, "A comment unexpectedly contains @author."); 
         } 
        } 
    
        return { 
         "BlockComment": checkComment, 
         "LineComment": checkComment 
        }; 
    }; 
    

    , 내가 @author 태그의 사용을 위반하는 test.js 파일이 상상

    규칙이 적용되는 방법을 확인하십시오.

    $ eslint test.js --rulesdir=rules/ --rule='no-author: 2' 
    
    test.js 
        1:0 error A comment unexpectedly contains @author no-author 
    
    ✖ 1 problem 
    

    FYI, no-author: 2 여기 means (오류가 발생하면 종료 코드는 1) 규칙을 오류로 설정합니다.