플러그인 같은거 만들때는 유닛테스트 같은걸 만들기는 왕배꼽이고
그래도 무언가는 있어야 할때 좋은 수단인 것같습니다.

 

PHP 7.4에서는 (약간의 아쉬움은 있지만) 타입 정의가 수월한 편이라서 도움은 되지만
객체(특히 stdClass)의 프로퍼티나 배열의 키까지는 정의할 수가 없는데 이런 정적 분석도구와 PHPDoc 주석으로
에디터에서 자동완성 효율성도 올라가네요.

 

/**
 * @return array{
 *     credentialId: string,
 *     signatureCounter: int,
 *     credentialPublicKey: string
 * }
 */
function foo(): array {}

 

이런 PHPDoc 으로 `foo()['cre...']` 이런 코드의 자동 완성도 잘 해주고요.

 

유닛테스트도 많은 부분이 함수가 반환하는 값의 타입이나 특정 속성/키가 존재하는지 검사하는데 많은 부분을 할애하는데
테스트 코드를 작성하지 않아도 타입 정의를 유도하고 검사와 에디터 자동완성 효율까지 올려주는 역할까지 해줘서
코드 작성의 편의와 오류를 방지해주는 도구로써 좋은 것같습니다.
물론 유닛테스트의 대체 수단은 아니고요.

 

귀찮아서 대충 작성했던 코드들이 조금 더 탄탄해지네요.

TAG •
  • profile

    라이믹스에서 common/framework 디렉토리에서 110개 파일에서 가장 낮은 0 레벨로 돌려도 40개 가량 리포트가 나오는데
    꽤 적절한 조언을 해주고 제가 주로 사용하는 6레벨로 돌리면 1천개 가량 나옵니다.
    물론 전부 다 고치거나 개선해야할 문제는 아니고 무시해도 될 것들이 많죠.


    해보실 분은 phpstan 설치 후 아래 설정을 phpstan.neon 파일로 만들어서 돌려보시면 됩니다.
    자세한 사용법은 https://phpstan.org

    parameters:
        level: 0
        phpVersion: 70205
        paths:
            - common/framework
        excludePaths:
            - common/lang/*
            - common/vendor/*
            - files/*
            - layouts/*
            - m.layouts/*
            - modules/*/lang/*
            - modules/*/skins/*
            - tests/*
            - widgets/*/skins/*
            - widgetstyles/*
        bootstrapFiles:
            - common/autoload.php
        editorUrl: 'vscode://file/%%file%%:%%line%%'
        universalObjectCratesClasses:
            - BaseObject
        dynamicConstantNames:
            - RX_BASEURL
        ignoreErrors:
            - '#Constant RX_BASEURL not found#'
            - '#Unsafe usage of new static\(\)#'

     

  • profile
    github copilot 쓰는사람봤는데, 아주 괜찮은것 같더라구요.
    실시간으로 코드를 이해하고 자동완성을 해주는데, 상당히 의도대로 짜주는걸 보고 감탄했었습니다.
  • profile profile

    저도 코파일럿 사용합니다.
    제안해주는 코드가 문맥에 따라 내가 의도한 코드를 잘 뽑아줘서 잘 사용하고 있습니다.

    근데 완전히 분석된 코드가 아니면 좀 엉뚱한걸 제안해줘서 오히려 걸리적 거릴 때가 많아요.
    제안 코드를 무시하려고 ESC 키를 누르는 횟수가 많이 늘었어요. 그래도 이득이 커서 계속 사용중인데 가끔 너무 귀찮게 할때가 많네요. 

    클래스나 객체의 프로퍼티가 명확하면 꽤 괜찮은데 그렇지 않은 동적 속성 등은 엉뚱하게 제안되기도하고 타입 정의 등이 명확하지 않은 것들도 좀 아쉬운 코드를 생성하기도 합니다.
    더구나 라이믹스 코드 안에서만 제안되는게 아니라 학습한 모든 패턴에서 그럴듯한 코드를 제안해주는 거라서 IDE에서 명확한 선언에 따라 제안하는 것이 가장 정확합니다.

    코파일럿은 내가 작성하려는 코드를 제안해주는 반면 정확성이 떨어지고, IDE의 기본적인 자동완성 기능은 코드에 기반한 명확한 제안만 해주죠.
    코드의 타입 정의가 잘 되어있어야 IDE나 AI 제안 품질도 올라가겠죠.