PhpStorm에서 디렉토리를 rename 할 때 namespace가 추종하지 않는 경우의 대응

1706 단어 PhpStorm

소개



PhpStorm에서 디렉토리를 Refactor/Rename할 때, 기본적으로는 namespace도 함께 변경될 것입니다만, 잘 안 되는 때가 있습니다.

발생 환경



Windows10 Pro
PhpStorm 2018.2

Windows8
PhpStorm 2017.2

현상



namespace를 추종하여 변경할 수 있는 경우, 아래와 같은 다이얼로그가 표시됩니다.



그런데, 어느 조건을 만족하면 아래와 같이 namespace가 추종하지 않는 상태가 됩니다.



원인?



Rename 대상 디렉토리 아래에 PHP 파일이 포함되어 있지 않으면 (namespace가 소스에 존재하지 않는 상태가 되나요?) 발생합니다.

예를 들어, 아래의 디렉토리 구성에서 Foo를 Rename하면 namespace를 인식합니다.
App\
  Foo\
    FooClass.php    (namespace = App\Foo)
    Bar\
      BarClass.php  (namespace = App\Foo\Bar)

위에서 FooClass.php를 제거하고 아래 구성에서 Foo를 Rename하면 namespace를 인식하지 못했습니다.
App\
  Foo\
    Bar\
      BarClass.php  (namespace = App\Foo\Bar)

또한, 지정한 디렉토리의 자식 디렉토리에 관해서는 PHP 파일이 존재하지 않는 (namespace의 정의가 없다) 상태에서도 문제없는 것 같습니다.
App\
  Foo\
    FooClass.php       (namespace = App\Foo)
    Bar\
      BarClass.php     (namespace = App\Foo\Bar)
    Hoge\
      Fuga\
        FugaClass.php  (namespace = App\Foo\Hoge\Fuga)

대응 방법



Rename 대상 디렉토리에 일시적으로 더미 클래스를 만들어 Rename 후에 삭제하는 것으로 대응 가능했습니다.

2017.2 및 2018.2 모두에서 발생하고 있기 때문에 버그가 아니라 그러한 사양일지도 모릅니다.

좋은 웹페이지 즐겨찾기