Closed mattn closed 9 years ago
+1
大和と申します。 universal-ctags で作業をしています。
主要なパッチはこれになると理解しているのですが、正しいでしょうか。
http://sourceforge.net/p/ctags/patches/85/
以前からマージの相談をさせてもらいたい思っていたのですが、準備が進んでいなかったので控えていました。option関連の処理をあまり良く理解しないまま変更しすぎて、いつくか問題をかかています。
主要なパッチはこれになると理解しているのですが、正しいでしょうか。
こんにちわ。
https://github.com/universal-ctags/ctags/issues/44
このスレッドで一度お会いしましたね。
主要なパッチはこれになると理解しているのですが、正しいでしょうか。
はい。vim と整合性が取れるパッチとしてはこれかと思っています。(すみません他にマージしてもらうべきパッチがあれば申告下さい > all)
@mattn さんのmbcs対応patchだけでOKだと思います。
PS 私は今のところuniversal-ctagsに積極的に参加するつもりはないです。
@masatake さんに一応ニュアンスがずれないように日本語で説明しておくと現状の ctags はコメント部分に日本語があるとvimで見つけられないんです。vim はfileencodingsに従ってencodingオプションが示すエンコーディングに変換されたテキストを持っていてその行とctagsから見つけた行をマッチングするのでマッチしなくなるのです。できればtagsファイルは固定された1つのエンコーディングであって欲しい訳です。 TAGS_ENCODINGに自信のエンコーディングが書けるのでそこにutf-8と書いておき、あとは検査したソースファイルをutf-8に変換する仕組みがあればと思ってこのパッチを書きました。またプログラミング言語やOSによってはエンコーディングが異なる場合もあるのでオプションで個別設定出来る仕組みを追加しました。
エンコーディングの処理について経験が無いのですが、パッチの方を拝見したところ 大きな問題が無いように思います。(http://sourceforge.net/p/ctags/patches/85/)
もしPRを頂けるなら、ということを前提にそのときコメントするであろうことをここに 書きます。
一応、windows と linux でビルド出来るパッチはリライト出来ました。
https://github.com/mattn/ctags/tree/encoding-option
テストはもすこし時間が必要そうです。
@mattn #14 の修正は反映済みでしょうか。(universal-ctagsに必要かどうかは未確認ですが…。) 関連commitは、 a73f4af4237f719d007393d42c62060470a8353a, 2525a1e41eb5540dd9ab08c049d8c0c26b966071 です。
ありがとうございます。--encoding-
https://github.com/mattn/ctags/tree/encoding-option
を用意頂いたので、以降、気付いたことがあったらこちらへの変更をPRとして提出します、というのでどうでしょうか?
あと --encoding-
@k-takata パッチが当たらないくらい universal-ctags と差異が出来てしまっていたので手動でマージさせてもらいました。ありがとうございます。
@masatake
用意頂いたので、以降、気付いたことがあったらこちらへの変更をPRとして提出します、というのでどうでしょうか?
はい。お願い致します。
あと --encoding-= のヘルプ文字列と、可能であれば --list-encodingで指定できるエンコーディングの一覧があると一層良いと思いました。
iconvlist という関数を使えば出来そうです。
「検査したソースファイル」の「検査」というのはctagsがエンコーディングを自動認識する、という意味でしょうか?関心があります。
「検査」はctags本来の仕事を実行したという意味で使いました。このパッチはエンコーディングの自動認識は行いません。エンコーディングの自動認識は iconv では辛いかと思います。 実際 vim も fileencodings=utf-8,cp932,euc-jp といった様に複数のエンコーディングを失敗しなくなるまで繰り返すという若干ツライ作りです。
「検査」はctags本来の仕事を実行したという意味で使いました。このパッチはエンコーディングの自動認識は行いません。エンコーディングの自動認識は iconv では辛いかと思います。 実際 vim も fileencodings=utf-8,cp932,euc-jp といった様に複数のエンコーディングを失敗しなくなるまで繰り返すという若干ツライ作りです。
なるほど。
言語やエディタによって、対象とするファイル自体にエンコーディングを記載しておくことができるものがあります。emacsであれば、ファイルの先頭に;; -- coding: utf-8 -- とあるとutf-8として取り扱います。きっとvimにもあると思っています。これを使うと良いのではないかと思いあたりました。universal ctagsではプログラミング言語の種類についてファイル名から解決できない場合でかつ、起動オプション -G が与えられていると ファイルの内容を調べて 上に示したようなマーカー(モードラインと呼んでいます。)を探してプログラミング言語の種類を特定しようとします。デフォルトでオンだったのですがコストがかかるので、オプションを指定した場合にだけ有効にすることになりました。この仕掛けを応用してエンコーディングについてファイル内に記載があれば、エンコーディングを指定できそうです。
なるほど。言語やエディタによって、対象とするファイル自体にエンコーディングを記載しておくことができるものがあります。emacsであれば、ファイルの先頭に;; -- coding: utf-8 -- とあるとutf-8として取り扱います。きっとvimにもあると思っています。これを使うと良いのではないかと思いあたりました。universal ctagsではプログラミング言語の種類についてファイル名から解決できない場合でかつ、起動オプション -G が与えられていると ファイルの内容を調べて 上に示したようなマーカー(モードラインと呼んでいます。)を探してプログラミング言語の種類を特定しようとします。デフォルトでオンだったのですがコストがかかるので、オプションを指定した場合にだけ有効にすることになりました。この仕掛けを応用してエンコーディングについてファイル内に記載があれば、エンコーディングを指定できそうです。
非常に残念なのですがvimのモードラインにはソースのエンコーディングを記述する事は出来ないのです。 理由はこの辺を参照下さい。
恐れいりました。うーん。
tagsファイルを活用するツール側の対応が必要ですが、--extra=+f で出力されるファイル自身に対するタグに encoding: 拡張フィールドがあると良さそうに思いました。...と際限が無いのでマージしてからやることにします。
ただし --list-encoding
は iconv のバージョンや提供元によってはAPIが存在しないので if defined(iconvlist)
でない場合には動きません。
@masatake 別件ですが ctags のリポジトリで ctags -R Units
すると assert している様です。原因は分かりません。
listEncoding も listEncodings にリネームした方がよい?
そうですね。ありがとうございます。
ctags -R Unitsが失敗するのは 数日前に導入したFortranのパーザに関連すると思います。ので無視して下さい。
tmainの作りがあまかったので、tagsファイルを比較できるように変更しました。またiconvを有効にしていない環境でskipできるように終了ステータスが77のときだけ特別扱いするようにしました。
これで、問題無くテストできました。universal-ctagsのmasterにTmainのテストハーネス側の変更を入れたのでrebaseしてもらえますか、その後tmainテストケースの方の変更を私から @mattn さんのリポジトリに出します。
すいません、Fortranについては間違いでした。もともとクラッシュを誘発するTODO扱いになっているテストケースがUnitsに含まれていて、それを踏んでいるようです。
Units/fuzz-hitting-assertions.r/d-fha-0.b/input.d
想定されるテストは make units で、これは通るので問題無い、として下さい。
feedback タグを作りました。オフィシャルに還元すべき物に付けていきます。
ありがとうございました。
こちらこそありがとうございました。
今後ですが、一旦この issue を閉じて、以後は vimmer 的な観点から universal-ctags へ contribute させて頂けたらと思います。
是非よろしくお願いします。楽しみにしています。
http://ctags.io も出来た事だし、ここのパッチをマージして貰うべく働きかけるのはどうでしょうか? 意見募集。