public static void CreateDtsFile(ProjectItem sourceItem) { string sourceFile = sourceItem.FileNames[1]; string dtsFile = GenerationService.GenerateFileName(sourceFile); string dts = ConvertToTypeScript(sourceItem); VSHelpers.CheckFileOutOfSourceControl(dtsFile); File.WriteAllText(dtsFile, dts); if (sourceItem.ContainingProject.IsKind(ProjectTypes.DOTNET_Core, ProjectTypes.ASPNET_5)) { Dispatcher.CurrentDispatcher.BeginInvoke(new Action(() => { var dtsItem = VSHelpers.GetProjectItem(dtsFile); if (dtsItem != null) { dtsItem.Properties.Item("DependentUpon").Value = sourceItem.Name; } Telemetry.TrackOperation("FileGenerated"); }), DispatcherPriority.ApplicationIdle, null); } else if (sourceItem.ContainingProject.IsKind(ProjectTypes.WEBSITE_PROJECT)) { sourceItem.ContainingProject.ProjectItems.AddFromFile(dtsFile); } }
private static List <string> GetReferences(IEnumerable <IntellisenseObject> objects, ProjectItem sourceItem) { if (Options.KeepReferencesUnchanged) { ProjectItem generatedProjectItem = sourceItem.ProjectItems .Cast <ProjectItem>() .Where(item => GenerationService.GenerateFileName(sourceItem.Name) == item.Name) .FirstOrDefault(); if (generatedProjectItem != null) { string documentText = VSHelpers.GetDocumentText(generatedProjectItem); if (string.IsNullOrWhiteSpace(documentText) == false) { string pattern = "/// <reference path=\"(.*)\" />\r\n"; return(new Regex(pattern).Matches(documentText) .Cast <Match>() .Select(m => m.Groups[1].Value) .OrderBy(r => r) .ToList()); } } } return(objects .SelectMany(o => o.References) .Where(r => Path.GetFileName(r) != GenerationService.GenerateFileName(sourceItem.Name)) .Distinct() .OrderBy(r => r) .ToList()); }
internal static DefinitionMapData GetDefinitionMapData(ProjectItem projectItem) { // Initialize our result DefinitionMapData result = null; // Try to find our map data for the typescript definition file ProjectItem definitionMapProjectItem = projectItem.ProjectItems .Cast <ProjectItem>() .Where(pi => pi.Name == GenerationService.GenerateFileName(projectItem.Name) + ".map") .FirstOrDefault(); // Continue if found if (definitionMapProjectItem != null) { // Get the text of our mapping file string documentText = VSHelpers.GetDocumentText(definitionMapProjectItem); // Continue if the document has text if (string.IsNullOrWhiteSpace(documentText) == false) { // Try to parse the containing json string // When a SerializationException is getting thrown the document text wasn't valid try { result = JsonConvert.DeserializeObject <DefinitionMapData>(documentText); } catch (JsonSerializationException) { } } } return(result); }
public static void CreateDtsFile(ProjectItem sourceItem) { string sourceFile = sourceItem.FileNames[1]; string dtsFile = GenerationService.GenerateFileName(sourceFile); string dtsEnumFile = GenerationService.GenerateFileName(sourceFile); // Get metadata from our project item DefinitionMapData definitionMapData = VSHelpers.GetDefinitionMapData(sourceItem); string dts = ConvertToTypeScriptWithoutEnums(sourceItem, ref definitionMapData, out bool isEmpty); string dtsEnumOnly = ConvertToTypeScriptEnumsOnly(sourceItem, ref definitionMapData, out bool isEmptyEnum); VSHelpers.CheckFileOutOfSourceControl(dtsFile); File.WriteAllText(dtsFile, dts); if (isEmptyEnum == false) { File.WriteAllText(dtsEnumFile, dtsEnumOnly); } if (sourceItem.ContainingProject.IsKind(ProjectTypes.DOTNET_Core, ProjectTypes.ASPNET_5)) { Dispatcher.CurrentDispatcher.BeginInvoke(new Action(() => { var dtsItem = VSHelpers.GetProjectItem(dtsFile); if (dtsItem != null) { dtsItem.Properties.Item("DependentUpon").Value = sourceItem.Name; } if (isEmptyEnum == false) { var dtsItem2 = VSHelpers.GetProjectItem(dtsEnumFile); if (dtsItem2 != null) { dtsItem2.Properties.Item("DependentUpon").Value = sourceItem.Name; } } Telemetry.TrackOperation("FileGenerated"); }), DispatcherPriority.ApplicationIdle, null); } else if (sourceItem.ContainingProject.IsKind(ProjectTypes.WEBSITE_PROJECT)) { sourceItem.ContainingProject.ProjectItems.AddFromFile(dtsFile); if (isEmptyEnum == false) { sourceItem.ContainingProject.ProjectItems.AddFromFile(dtsEnumFile); } } // Also create the definition map data and add it to our project item CreateDtsMapFile(sourceItem, definitionMapData); }
public static string GetCopyDtsFileName(DefinitionMapData definitionMapData, ProjectItem projectItem, bool isEnumDefinition) { string sourceFile = string.IsNullOrWhiteSpace(definitionMapData.CustomName) ? projectItem.Name : definitionMapData.CustomName; if (isEnumDefinition) { sourceFile += "Enum"; } return(GenerationService.GenerateFileName(sourceFile)); }
private static bool HasIntellisense(ProjectItem projectItem, HashSet <string> references) { for (short i = 0; i < projectItem.FileCount; i++) { var fileName = GenerationService.GenerateFileName(projectItem.FileNames[i]); references.Add(fileName); return(true); } return(false); }
private void FileActionOccurred(object sender, TextDocumentFileActionEventArgs e) { if (e.FileActionType != FileActionTypes.ContentSavedToDisk) { return; } _item = VSHelpers.GetProjectItem(e.FilePath); Options.ReadOptionOverrides(_item, false); string fileName = GenerationService.GenerateFileName(e.FilePath); if (File.Exists(fileName)) { DtsPackage.EnsurePackageLoad(); CreateDtsFile(_item); } }
public static void CreateDtsFile(ProjectItem sourceItem) { string sourceFile = sourceItem.FileNames[1]; string dtsFile = GenerationService.GenerateFileName(sourceFile); var output = ConvertToTypeScript(sourceItem); if (string.IsNullOrWhiteSpace(Options.NodeModulePath)) { WriteTypescriptToFile(output, dtsFile, sourceItem); } else { string nodeModuleFile = Path.ChangeExtension(sourceFile, ".ts"); WriteTypescriptToFile(output, nodeModuleFile, sourceItem); } }
private void Execute(object sender, EventArgs e) { if (_item == null) { return; } Options.ReadOptionOverrides(_item, false); // .NET Core and Website projects if (_item.ContainingProject.IsKind(ProjectTypes.DOTNET_Core, ProjectTypes.ASPNET_5, ProjectTypes.WEBSITE_PROJECT)) { string dtsFile = GenerationService.GenerateFileName(_item.FileNames[1]); bool synOn = File.Exists(dtsFile); if (synOn) { var dtsItem = VSHelpers.GetProjectItem(dtsFile); dtsItem?.Delete(); File.Delete(dtsFile); } else { GenerationService.CreateDtsFile(_item); } } // Legacy .NET projects else { bool synOn = _item.Properties.Item("CustomTool").Value.ToString() == DtsGenerator.Name; if (synOn) { _item.Properties.Item("CustomTool").Value = ""; Telemetry.TrackUserTask("EnableGeneration"); } else { _item.Properties.Item("CustomTool").Value = DtsGenerator.Name; Telemetry.TrackUserTask("DisabledGeneration"); } } }
private void BeforeQueryStatus(object sender, EventArgs e) { var button = (OleMenuCommand)sender; button.Visible = button.Enabled = false; if (_dte.SelectedItems.Count != 1) { return; } _item = _dte.SelectedItems?.Item(1)?.ProjectItem; if (_item == null) { return; } Options.ReadOptionOverrides(_item, false); if (_item == null || _item.ContainingProject == null || _item.FileCodeModel == null) { return; } var fileName = _item.FileNames[1]; var ext = Path.GetExtension(fileName); if (Constants.SupportedSourceExtensions.Contains(ext, StringComparer.OrdinalIgnoreCase)) { if (_item.ContainingProject.IsKind(ProjectTypes.DOTNET_Core, ProjectTypes.ASPNET_5, ProjectTypes.WEBSITE_PROJECT)) { string dtsFile = GenerationService.GenerateFileName(_item.FileNames[1]); button.Checked = File.Exists(dtsFile); } else { button.Checked = _item.Properties.Item("CustomTool").Value.ToString() == DtsGenerator.Name; } button.Visible = button.Enabled = true; } }