コード例 #1
0
        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);
            }
        }
コード例 #2
0
        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());
        }
コード例 #3
0
        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);
        }
コード例 #4
0
        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);
        }
コード例 #5
0
        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));
        }
コード例 #6
0
        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);
        }
コード例 #7
0
        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);
            }
        }
コード例 #8
0
        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);
            }
        }
コード例 #9
0
        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");
                }
            }
        }
コード例 #10
0
        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;
            }
        }