Получить текущее пространство имен на фрагменте - PullRequest
3 голосов
/ 17 января 2012

Я хочу добавить текущее пространство имен в мой фрагмент. У кого-нибудь есть идея, чтобы помочь мне?

ClassName функция возвращает имя класса, который содержит вставленный фрагмент. Есть что-то для пространства имен?

Спасибо, Фабьен

Образец фрагмента:

    <Declarations>
        <Literal default="true" Editable="false">
            <ID>classname</ID> 
            <ToolTip>Class name</ToolTip> 
            <Function>ClassName()</Function> 
            <Default>ClassNamePlaceholder</Default> 
        </Literal>
        <Literal Editable="false">
            <ID>namespace</ID> 
            < ??? />
        </Literal>
    </Declarations>
    <Code Language="CSharp">
        <![CDATA[ 
            $namespace$ $classname$ 
        ]]>
    </Code>

ожидаемый результат: "TheCurrentNamepace.OfMyClass" "MyClassName"

1 Ответ

1 голос
/ 18 января 2012

Наконец, я решаю использовать макросы для вызова моего фрагмента и вставки в него пространства имен.

Фрагмент вызова:

Sub InsertMySnippet()
    DTE.ActiveDocument.Selection.Text = "mySnippetShortcut"
    DTE.ExecuteCommand("Edit.InsertTab")

    Dim selection As TextSelection = DTE.ActiveDocument.Selection
    selection.Insert(GetNamespace())

    DTE.ExecuteCommand("Edit.InsertTab")
End Sub

Получение пространства имен:

Private Function GetNamespace() As String
    Dim classInfo As CodeClass2 = GetClassElement()
    Return classInfo.FullName
End Function

Private Function GetClassElement() As CodeClass2
    Try
        Dim selection As TextSelection = DTE.ActiveDocument.Selection
        Dim fileCodeModel As FileCodeModel2 = DTE.ActiveDocument.ProjectItem.FileCodeModel
        Dim element As CodeElement2 = fileCodeModel.CodeElementFromPoint(selection.TopPoint, vsCMElement.vsCMElementClass)
        Return element
    Catch
        Return Nothing
    End Try
End Function
...