Строка для имени функции в Visual Studio - PullRequest
4 голосов
/ 03 ноября 2010

Я видел в скринкасте некоторое время назад (так как забыл, который, вероятно, Ката), где человек писал блок-тест, но писал что-то вроде этого:

public "return zero for an all gutter game"

Затем они волшебным образом превратили его в

public returnZeroForAnAllGutterGame

Есть ли плагин для этого или просто способ сделать шаблон, который срабатывает при нажатии клавиши?

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

1 Ответ

2 голосов
/ 05 ноября 2010

Я не смог найти плагин или макрос, на который вы ссылаетесь, но я создал макрос, который будет хорошо работать!

Сначала для установки сделайте следующее:

  1. Нажмите Alt + F11
  2. Развернуть MyMacros
  3. Открыть модуль EnvironmentEvents
  4. Вставьте код в модуль (код находится в конце этого поста)
  5. Закрыть редактор макросов

Для использования макроса:

  1. Нажмите ` ( могила клавиша).
  2. Следующее нажатие "
  3. Введите слова, которые вы хотите
  4. В завершение введите "`
  5. Смотри, как происходит волшебство!

ПРИМЕЧАНИЕ: Вы можете просто начать набирать значение sting, а затем добавить символы могилы до и после, и оно все равно будет работать.

Макрос удалит пробелы, а затем PascalCase весь набор слов. Он также удаляет одинарные и двойные кавычки. Наконец, он преобразует запятые в подчеркивания, если вы хотите использовать соглашение об именах, предложенное Роем Ошеровом ( Искусство модульного тестирования , стр. 211):

MethodUnderTest_Scenario_Behavior ()


Примеры:

public void `"return zero for an all gutter game"`

public void `"LoadMainParts, when materials files are valid, will return a list of parts sorted by sequential item number ascending"`

... превратится в это (после второго ` нажатия):

public void ReturnZeroForAnAllGutterGame    

public void LoadMainParts_WhenMaterialsFilesAreValid_WillReturnAListOfPartsSortedBySequentialItemNumberAscending

Макрос:

...

Imports System.Text.RegularExpressions

...

Private isPascalCaseAndSpaceRemovalEnabled As Boolean

Private Function ConvertToPascalCase(ByVal value As String) As String
    'apply ToUpper on letters preceeded by a space, double quotes, or a comma'
    Dim pattern As String = "[ ,"",\,][a-z]"
    value = Regex.Replace(value, _
                          pattern, _
                          Function(m) m.Value.ToUpper, _
                          RegexOptions.Singleline)

    'replace commas with underscores'
    value = value.Replace(",", "_")

    'remove spaces, graves, double quotes, and single qoutes'
    Dim removalCharacters As String() = {" ", "`", """", "'"}
    For Each character In removalCharacters
        value = value.Replace(character, "")
    Next

    Return value
End Function

Private Sub TextDocumentKeyPressEvents_AfterKeyPress(ByVal Keypress As String, _
                                                     ByVal Selection As EnvDTE.TextSelection, _
                                                     ByVal InStatementCompletion As Boolean) _
                                                     Handles TextDocumentKeyPressEvents.AfterKeyPress

    If isPascalCaseAndSpaceRemovalEnabled AndAlso Keypress = "`" Then
        Selection.SelectLine()

        Dim pattern As String = "`""(.*)""`"
        Dim substringToReplace As String = Regex.Match(Selection.Text, _
                                                       pattern, _
                                                       RegexOptions.Singleline).Value
        Selection.ReplacePattern(pattern, _
                                 ConvertToPascalCase(substringToReplace), _
                                 vsFindOptions.vsFindOptionsRegularExpression)

        Selection.MoveToPoint(Selection.BottomPoint)

        isPascalCaseAndSpaceRemovalEnabled = False
        CancelKeyPress = True

    ElseIf Keypress = "`" Then
        isPascalCaseAndSpaceRemovalEnabled = True
    End If

End Sub

Не стесняйтесь адаптировать код к вашим потребностям.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...