PhpStormでディレクトリをrenameする時にnamespaceが追従しない場合の対応


はじめに

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の両方で発生しているので、バグではなくそういう仕様なのかもしれません。