Расширение Visual Studio: получить язык / тип файла из имени файла или ProjectItem - PullRequest
0 голосов
/ 21 января 2019

Я пишу расширение для предоставления базовой статистики проекта (например, строки кода).Достаточно просто выполнить итерацию дерева Solution и найти ProjectItem s, которые соответствуют файлам.

Структура Document имеет свойства Kind и Language, нопоследний помечен только для внутреннего использования, и оба требуют, чтобы файл открывался в редакторе первым.

Итак ... есть ли способ:

  1. Посмотрите, какие файлыVisual Studio будет классифицировать как текстовые файлы.
  2. Посмотрите, какой язык Visual Studio ассоциируется с данным именем файла / расширением файла.

без открытия файла?

1 Ответ

0 голосов
/ 23 января 2019

Я написал такую ​​статистику (хотя только для C # и VB.NET), и оба вопроса очень сложны для всех типов проектов / типов файлов / языков.Прежде всего, если вам нужно, вы можете открыть EnvDTE.Document / EnvDTE.TextDocument из EnvDTE.ProjectItem, используя метод ProjectItem.Open (view), который возвращает EnvDTE.Window.Это не делает окно видимым, по умолчанию оно невидимо, вам нужно вызвать Window.Visible = true, чтобы сделать его видимым.Когда вы закончите, вы закроете (невидимое) окно с помощью Window.Close, если оно не было уже открыто (вы можете знать, вызывая сначала ProjectItem.get_IsOpen (view) и затем закрывая или нет соответственно).

Теперь:

  • Очень трудно узнать, является ли файл текстовым или нет, потому что VS поддерживает много проектов, и каждый тип проекта может рассматривать свои файлы / расширения кактекстовые файлы или нет.Наилучший подход, который я нашел, состоит в том, чтобы рассматривать все файлы как текстовые файлы, кроме известных расширений, которые не являются текстовыми файлами (.jpg и т. Д.).Также обратите внимание, что не все текстовые файлы являются файлами кода (например, файлы .txt).Для некоторых функций, таких как функция поиска текста, вас могут заинтересовать текстовые файлы, а для функции статистики вас могут заинтересовать файлы кода, а не только текстовые файлы.

  • Вы можете знатьguid языка файла, используя EnvDTE.ProjectItem.FileCodeModel.Language (и EnvDTE.Project.CodeModel.Language).Увы, некоторые проекты / файлы имеют язык, но не предоставляют модель кода, поэтому вам может потребоваться использовать известные расширения для сопоставления с языком.

Некоторые полезные языковые руководства:

     const string LANGUAGE_CSHARP = "{B5E9BD34-6D3E-4B5D-925E-8A43B79820B4}";
     const string LANGUAGE_IDL = "{B5E9BD35-6D3E-4B5D-925E-8A43B79820B4}";
     const string LANGUAGE_MANAGED_C = "{B5E9BD36-6D3E-4B5D-925E-8A43B79820B4}";
     const string LANGUAGE_VBNET = "{B5E9BD33-6D3E-4B5D-925E-8A43B79820B4}";
     const string LANGUAGE_VISUAL_C = "{B5E9BD32-6D3E-4B5D-925E-8A43B79820B4}";
     const string LANGUAGE_PYTHON = "{888888A0-9F3D-457C-B088-3A5042F75D52}";
     const string LANGUAGE_FSHARP = "{F2A71F9B-5D33-465A-A702-920D77279786}";
     const string LANGUAGE_R = "{DA7A21FA-8162-4350-AD77-A8D1B671F3ED}";

Обратите внимание, что, поскольку VS настолько расширяемо, для языков нет перечисления.Новые языки обеспечивают новые направляющие.

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