vim-jp / ctags

Use https://ctags.io instead (This was fork of http://ctags.sourceforge.net/)
GNU General Public License v2.0
26 stars 7 forks source link

Windows で -R と --exclude を併用すると --exclude が効かない。 #22

Closed mattn closed 9 years ago

mattn commented 10 years ago
ctags --exclude=*.js -R

で js がマッチしてしまう。

masatake commented 10 years ago

これはどうでしょうか? https://github.com/fishman/ctags/commit/85c67f6dda0b723bba486355688c9efce37dafd8

mattn commented 10 years ago

えと、問題点は見えてまして -R のオプションに限った話ではないんです。

https://github.com/vim-jp/ctags/blob/master/strlist.c#L250

Windows には fnmatch が無いので *.js とか指定しても strcmp で判定されてしまうので動かなくて当然なのです。 Windows の場合だと PathMatchSpec という関数でワイルドカードマッチ出来ますのでそれで対応する予定です。

http://msdn.microsoft.com/en-us/library/windows/desktop/bb773727(v=vs.85).aspx

mattn commented 10 years ago

これで直りました。

diff --git a/mk_mingw.mak b/mk_mingw.mak
index 2b3a3ca..fa43785 100644
--- a/mk_mingw.mak
+++ b/mk_mingw.mak
@@ -12,7 +12,7 @@ DEFINES = -DWIN32 $(REGEX_DEFINES) -DHAVE_ICONV
 INCLUDES = -I. -Ignu_regex
 CC = gcc
 OBJEXT = o
-LDFLAGS = -liconv
+LDFLAGS = -liconv -lshlwapi
 OBJECTS += $(REGEX_SOURCES:%.c=%.o)

 ctags.exe: OPT = -O4
diff --git a/strlist.c b/strlist.c
index e92f603..fdebe99 100644
--- a/strlist.c
+++ b/strlist.c
@@ -17,8 +17,13 @@
 #include <string.h>
 #ifdef HAVE_FNMATCH_H
 # include <fnmatch.h>
+#elif defined(_WIN32)
+/* NOTE: including shlwapi.h makes compilation error because it contains
+ * boolean type definition. So use extern here. */
+int __stdcall PathMatchSpecA(const char* const, const char* const);
 #endif

+
 #include "debug.h"
 #include "read.h"
 #include "routines.h"
@@ -253,6 +258,8 @@ static boolean fileNameMatched (
    const char* const pattern = vStringValue (vpattern);
 #if defined (HAVE_FNMATCH)
    return (boolean) (fnmatch (pattern, fileName, 0) == 0);
+#elif defined (_WIN32)
+   return (boolean) (PathMatchSpecA (fileName, pattern) != 0);
 #elif defined (CASE_INSENSITIVE_FILENAMES)
    return (boolean) (strcasecmp (pattern, fileName) == 0);
 #else

本リポジトリの encoding-option ブランチに対して作成しています。

mattn commented 10 years ago

こちらについてはオフィシャルで修正されるべきかなーと思いますので後日オフィシャル向けのパッチを提出する予定です。

masatake commented 10 years ago

まったく的外れなコメントをしてしまいました。失礼しました。 PathMatchSpec というライブラリ関数があるのですね。勉強なります。 オフィシャル向けのパッチが出てくるのを楽しみに待っています。

mattn commented 9 years ago

feedback を付けましたが、オフィシャル動作で直ってるなら閉じます。

mattn commented 9 years ago

universal-ctags では直っているので閉じます。