2016-01-15 3 views
1

Я пытаюсь найти с помощью регулярных выражений Visual Studio (https://msdn.microsoft.com/en-us/library/2k3te2cs.aspx) все вызовы Assert.IsTrue, которые передают только логический аргумент, например Assert.IsTrue (parameter) быть одним и Assert.IsTrue(parameter, "message") wouldn ' t.Visual studio найти все Assert.IsTrue, у которых нет сообщения

Для простых вещей, Assert.IsTrue\(([a-zA-Z ]+)\) делает трюк, это работает для приведенного выше примера, но не для вещей, когда есть оценки, например Assert.IsTrue (2> 3). Для этого я попытался использовать Assert.IsTrue\((.+[^,])\), чтобы он соответствовал всему, что не имеет «,», но это только фильтрует, когда он находится в конце, я не уверен, как фильтровать запятые внутри.

Наконец-то, что я действительно хочу сделать (что я не уверен, возможно ли это с помощью регулярных выражений), это найти Assert.IsTrue, которые имеют только один параметр, но этот параметр может быть вызовом метода, поэтому он может имеют запятые или нет, что-то вроде Assert.IsTrue(isTrue(p1,p2))

+0

Regex не может отличить 'IsTrue' от' CountElements', поэтому последнее требование невозможно. Однако вы можете предположить, что все имена булевых методов начинаются с Is, тогда это возможно. Пожалуйста, уточните требования и предоставьте обобщенные примеры , тогда можно будет ответить на вопрос. –

+0

Я боялся, что это будет невозможно. Вызов метода может иметь любое имя и любое количество параметров, и он может быть вызван из объекта или нет: «Assert.IsTrue (object? .methodName ({p1,} *)) ', поэтому, пример e Я предоставил возможность, другой может быть «Assert.IsTrue (cat.eatsMouse (mouse1, mouse2))» или без параметров и т. д. Если это невозможно, есть ли способ исключить «,» внутри круглых скобок ? 'Assert.IsTrue \ ((. + [^,]) \)' Только исключает, когда, находится в конце, но не тогда, когда есть что-то после и до) –

+0

Прошу прощения, я не понимаю что означает «исключить запятую внутри круглых скобок». Пожалуйста, укажите примеры, которые вы хотите сопоставить, и что вы хотите избежать, чтобы соответствовать. Чтобы просто совместить 'Assert.IsTrue()', где внутри круглых скобок может быть только один метод, вы можете использовать ['Assert \ .IsTrue \ ([^(),] * (?: \ ([^()] * \) [^(),] *) * \) '] (http://goo.gl/GXBWH3), но он ненадежен. –

ответ

0

Удалите + из вашего второго примера и добавьте *, также вы должны избегать периода непосредственно после Assert.

Assert\.IsTrue\(([^,])*\) 

Что касается расширенного выражения, то это может сработать.

Assert\.IsTrue\(([a-zA-Z\.])*\(.*\)\) 

Это должно позволить вам найти то, что вы ищете.

1

Я не знаю, почему вы хотите, чтобы решение было программным, но если вам удобно иметь решение на основе Visual Studio, вы можете просто найти пример Assert.IsTrue(parameter);, щелкните правой кнопкой мыши метод и выберите «Найти все ссылки`.