views:

467

answers:

3

What is the easiest way to programatically force capitalization of keywords in Visual Studio 2008?

We work with a proprietary command delimited language (like HTML). We are attempting to migrate from an older editor to Visual Studio 2008. Our coding standards are to capitalize the commands. The old editor is customized to recognize the command begin delimiter and to force capitalization until the end delimiter is typed or the escape key is pressed.

What's the best way to do that in Visual Studio 2008? Can it be done with a macro or an add-in?

(Edited 1-12-2009)

Thank you for the suggestions so far. I don't think they answer my question.

Clarifications:

  • The previous editor was CodeWright so the customizations there are not portable to visual studio.
  • The source code is not C#. StyleCop seems to be specifically for C#. Our language is similar to markup languages like HTML but with different delimiter characters and commands.
  • I am trying to actually capitalize as the developer types, not remind them about proper capitalization. Since the commands are all delimited our current editor actually turns the Caps Lock on when the beginning delimiter is typed. When the end delimiter or the escape key is pressed the caps lock is turned back off. This is independent of the state of the Caps Lock on the keyboard.
+1  A: 

While time consuming, this SO post shows you how to add tags to the validation setup in VS2005. I don't think the method changed in 2008.

If you are moving from an older version of Visual Studio you may be able to just import your old settings and custom tags.

Rob Allen
+4  A: 

Try out StyleCop, available from Microsoft's web site. You might have to adjust the rule-set for your specific coding standards. For the coding standards we use, it was almost perfect out of the box.

DavGarcia
Nice, I've seen this tool discussed but have ignored it until now. This will definitely help!
BobbyShaftoe
+1  A: 

This may not be the best solution but here is what I came up with.

Use macros to capture Key Press Events.

Here's how:

  1. In Visual Studio go to the Tools->Macros->Macros IDE menu
  2. Double Click "MyMacros" to see the different parts
  3. Double Click "EnvironmentEvents"
  4. Add the following code within the Environment Events module.
  5. Save the file and return to the regular VS IDE to test.

    Private My_AutoCaps As Boolean = False
    Private Sub TextDocumentKeyPressEvents_BeforeKeyPress(ByVal Keypress _
      As String, ByVal Selection As EnvDTE.TextSelection, _
      ByVal InStatementCompletion As Boolean, ByRef CancelKeyPress As Boolean) _
      Handles TextDocumentKeyPressEvents.BeforeKeyPress
         Dim fileName As String = UCase(Selection.DTE.ActiveDocument.Name)
         If ( fileName.EndsWith(".CPI") ) Then
             If (My_AutoCaps) Then
                 'MsgBox(Keypress)
                 If (Keypress = "(" Or Keypress = ":") Then
                     'MsgBox("End of command character pressed.")
                     My_AutoCaps = False
                     Return
                 ElseIf (Keypress >= "a" And Keypress <= "z") Then
                     'MsgBox("Letter pressed.")
                     Selection.Text = UCase(Keypress)
                     CancelKeyPress = True
                 End If
             Else 'AutoCap is not on yet
                 If (Keypress = "^") Then
                     'MsgBox("You pressed the Start Command character.")
                     My_AutoCaps = True
                     Return
                 End If
             End If
         End If
    End Sub
    

This macro is limited to *.CPI files.

I have not figured out how to capture the Esc key yet but this will work for now.

BubbleSort