Как заставить Resharper уважать заглавные буквы при завершении кода в верблюжьем регистре?

В ReSharper 5.1, работающем на VS 2008, я пытаюсь дополнить имя метода с помощью CamelHumps следующим кодом:

public bool debugMode { get; private set; }
public DebugWindow()
{
    InitializeComponent();
}

public void logOutput(List<String> logLines)
{
    foreach(string line in logLines)
    {
        <- cursor is here
    }
}

public void logOutput(String logLine)
{
    debugTextBox.Text += "\n" + logLine;
}

В отмеченной выше точке курсора я набираю lO и нажимаю Ctrl+Space. Я хочу, чтобы он представил мне приглашение для метода logOutput(String), но вместо этого он представляет мне приглашение для logLines с тем, который я хочу отобразить внизу в раскрывающемся списке. Если вместо этого я наберу lOu, мне будет выделено правильное приглашение (то же самое с lou), но я думаю, что я должен просто набрать lO, и это должно работать. Я проверил CamelHumps в Resharper-> Параметры-> Редактор. У меня также есть горячие клавиши, установленные по умолчанию для Resharper, а не для VS.

Я знаю, что такое поведение существовало в IntelliJ в прошлом, но эта проблема раздражала меня с тех пор, как я начал работать с ReSharper.

Есть ли что-то еще, что мне нужно выбрать/установить в настройках? Возможно ли это вообще в ReSharper?

Я пытался искать другие похожие вопросы, но я видел только комментарии/вопросы о заполнении всех строчных букв или выборе верблюжьего регистра.

Изменить: обратите внимание, что оба метода logOutput присутствуют в списке вариантов завершения, но они не выбираются в качестве завершения, которое будет вставлено, когда я нажимаю Enter. Мне пришлось бы ввести дополнительные символы, чтобы заставить его выбрать один из них. Итак, проблема в том, что ранее в IntelliJ lO было достаточно, чтобы выбрать logOutput в качестве вставляемого из-за заглавной O; возможно ли это в ReSharper, и если да, то как?


person neromir    schedule 22.03.2012    source источник
comment
Я скопировал два метода logOutput в тестовый класс и вставил строку TextBox debugTextBox = new TextBox(); во второй метод, чтобы избежать ошибок компиляции. И это работает: оба метода logOutput отображаются в списке завершения после ввода lO. У меня ReSharper 5.1.3000.12 и VS 2010.   -  person brgerner    schedule 23.03.2012
comment
Да, они также отображаются в списке завершения для меня, но вам нужно либо ввести дополнительные символы, чтобы предложить выбрать logOutput() в качестве выбранного варианта, либо использовать клавиши со стрелками, чтобы перейти к методу. В IntelliJ lO буквы O, написанной с большой буквы, было достаточно, чтобы сказать ему, что он должен уменьшить параметры до возможностей с строчными буквами l и прописными буквами O. Однако, поскольку он считает, что logLines является основным выбором в этом случае, он не обращает внимания на заглавную букву O, которую я набрал. Я отредактирую вопрос, чтобы отразить, что они есть в опциях.   -  person neromir    schedule 24.03.2012


Ответы (2)


Я думаю, что причина, по которой вы не получаете ожидаемого результата, связана с именем переменной logLines. Поскольку первые две буквы этой переменной — lo, она имеет приоритет над любым соответствием CamelCase. Поэтому я предполагаю, что в системе сопоставления Resharpers должна быть какая-то логика, которая отдает предпочтение последовательным символам, а не совпадениям CamelCase.

Например, если вы измените имя logOutput на что-то вроде storeOutput, а затем наберете sO, вы увидите ожидаемое приглашение (доказывая, что сопоставление CamelCase работает).

Я никогда не использовал IntelliJ, но я ожидаю, что в этом, вероятно, была та же логика, вы просто не заметили, потому что у вас не было конфликтующих имен переменных.

Вы всегда можете просто нажать стрелку вниз после Alt+Space, чтобы вызвать подсказки для logOutput(...). Это даст вам желаемые результаты, и это всего лишь одно дополнительное нажатие клавиши.

person Robbie    schedule 25.03.2012
comment
Я уверен, что в прошлом у меня были конфликтующие имена в IntelliJ, и использование заглавных букв для уточнения результатов сработало. Я начинаю думать, что такого рода уточнение завершения просто не существует в ReSharper, а жаль. Это правда, что я могу получить нужный метод с помощью дополнительных нажатий клавиш, но я пытаюсь избежать этого с помощью верхнего регистра, если бы функциональность была там. Например, если бы я изменил имя, набрав so в нижнем регистре, я получил бы тот же результат, сделав заглавную O неуместной/бесполезной. - person neromir; 26.03.2012
comment
@neromir да, возможно, ты прав. Как я уже сказал, я не использовал IntelliJ, поэтому не могу быть уверен. - person Robbie; 26.03.2012
comment
На самом деле, поправка к моему предыдущему комментарию: O в верхнем регистре действительно представляет некоторое уточнение в случае переименования в storeOutput. Если я набираю все в нижнем регистре, это представляет мне другие вещи, не входящие в область действия класса. Однако кажется, что с более близкими по значимости именами переменных/методов (например, в моем классе) прописные буквы игнорируются. - person neromir; 26.03.2012
comment
@neromir это звучит довольно запутанно ... лучшее, на что вы можете надеяться, это изучить причуды Resharper и в лучшем случае приручить его до подчинения. Честно говоря, множество других полезных функций того стоят :) - person Robbie; 26.03.2012
comment
@neromir также, вы пытались использовать resharpers Перейти к ярлыку члена файла Alt + \ ? Это может быть лучше для вас? - person Robbie; 26.03.2012
comment
Это полезная функция, использующая заглавную букву O. Мне пришлось бы скопировать/вставить имя оттуда, поэтому в этот момент дополнительные нажатия клавиш в обычном завершении кода лучше подходят для рабочего процесса. Но все равно спасибо, что указали на это. Я не знал об этом до того, как вы упомянули об этом. Кроме того, я хотел бы изменить ваш ответ, несмотря на то, что я не думаю, что это правильный ответ, я думаю, что это было очень полезно. - person neromir; 28.03.2012
comment
на самом деле, перечитав ваш первый абзац, я думаю, что ваш ответ, вероятно, более точно отражает то, что на самом деле происходит в поведении ReSharper. Думаю, я оставлю свой ответ ниже для тех, кто ищет, что сказали люди из JetBrains. - person neromir; 28.03.2012

Подождав несколько дней для дополнительных ответов здесь, я пошел дальше и разместил вопрос на форумах ReSharper в JetBrains вместе со ссылкой здесь. Короткий ответ: это невозможно в ReSharper 5.1 и выше.

Полный текст ответа см. на странице http://devnet.jetbrains.net/message/5455545.

person neromir    schedule 27.03.2012