Skip to content

Commit f42fff5

Browse files
author
Denis Peshkov (CZ)
committed
small fixes
1 parent cff716f commit f42fff5

14 files changed

Lines changed: 116 additions & 48 deletions

File tree

README.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -127,6 +127,8 @@ dotnet add package TypeScriptDefinitionGenerator.MSBuild
127127

128128
Расширение использует SDK-style проект (PackageReference). Сборка возможна **только на Windows** с установленной Visual Studio 2022, т.к. VSSDK требует vsct.exe для компиляции меню.
129129

130+
При сборке через `dotnet build` для проекта Visual Studio Extension (VSIX) требуется **.NET 8 SDK**: `global.json` в корне репозитория привязывает сборку к SDK 8.0.x (из‑за ограничений VSSDK.BuildTools на .NET 10+). Установите [.NET 8 SDK](https://dotnet.microsoft.com/download/dotnet/8.0) или собирайте расширение из Visual Studio (Build Solution).
131+
130132
## Contribute
131133
Check out the [contribution guidelines](.github/CONTRIBUTING.md)
132134
if you want to contribute to this project.

build-vsix.ps1

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
# Build the VSIX using Visual Studio MSBuild (avoids System.Security.Permissions issue with dotnet build).
2+
# Requires Visual Studio 2022 with .NET desktop workload.
3+
4+
$ErrorActionPreference = "Stop"
5+
$scriptDir = Split-Path -Parent $MyInvocation.MyCommand.Path
6+
Set-Location $scriptDir
7+
8+
$vswhere = "${env:ProgramFiles(x86)}\Microsoft Visual Studio\Installer\vswhere.exe"
9+
if (-not (Test-Path $vswhere)) {
10+
Write-Error "vswhere.exe not found. Install Visual Studio 2022."
11+
exit 1
12+
}
13+
14+
$msbuild = & $vswhere -latest -requires Microsoft.Component.MSBuild -find "MSBuild\**\Bin\MSBuild.exe" | Select-Object -First 1
15+
if (-not $msbuild) {
16+
Write-Error "MSBuild not found. Install Visual Studio 2022 with .NET desktop build tools."
17+
exit 1
18+
}
19+
20+
$sln = "TypeScriptDefinitionGenerator.slnx"
21+
if (-not (Test-Path $sln)) {
22+
Write-Error "Solution not found: $sln"
23+
exit 1
24+
}
25+
26+
$config = if ($args -contains "Release") { "Release" } else { "Debug" }
27+
# Restore first so NuGet packages (Microsoft.VisualStudio.SDK, etc.) are available
28+
& $msbuild $sln /t:restore /p:Configuration=$config /v:m
29+
if ($LASTEXITCODE -ne 0) { exit $LASTEXITCODE }
30+
& $msbuild $sln /t:TypeScriptDefinitionGenerator /p:Configuration=$config /p:DeployExtension=false /v:m
31+
if ($LASTEXITCODE -ne 0) { exit $LASTEXITCODE }
32+
33+
$outDir = "src\TypeScriptDefinitionGenerator\bin\$config\net472"
34+
$vsix = Get-ChildItem -Path $outDir -Filter "*.vsix" -ErrorAction SilentlyContinue | Select-Object -First 1
35+
if ($vsix) {
36+
Write-Host "`nVSIX: $($vsix.FullName)" -ForegroundColor Green
37+
}

global.json

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
{
2+
"sdk": {
3+
"version": "8.0.100",
4+
"rollForward": "latestFeature"
5+
}
6+
}
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
namespace TypeScriptDefinitionGenerator.Core;
2+
3+
public static class Constants
4+
{
5+
public static string[] SupportedSourceExtensions { get; } = { ".cs" };
6+
}

src/TypeScriptDefinitionGenerator.Core/GeneratorOptions.cs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,10 @@ namespace TypeScriptDefinitionGenerator.Core;
22

33
public enum EOLType
44
{
5+
/// <summary>Unix</summary>
56
LF,
7+
8+
/// <summary>Windows</summary>
69
CRLF
710
}
811

@@ -36,4 +39,4 @@ public class GeneratorOptions : IGeneratorOptions
3639
public bool IndentTab { get; set; } = true;
3740
public byte IndentTabSize { get; set; } = 2;
3841
public bool WebEssentials2015 { get; set; }
39-
}
42+
}

src/TypeScriptDefinitionGenerator.Core/RoslynParser.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,14 +17,14 @@ public class RoslynParser
1717
private static readonly HashSet<string> IgnoreAttributes = new(StringComparer.OrdinalIgnoreCase)
1818
{
1919
"System.Runtime.Serialization.IgnoreDataMemberAttribute",
20-
"Newtonsoft.Json.JsonIgnoreAttribute",
20+
"System.Text.Json.Serialization.JsonIgnoreAttribute",
2121
"System.Web.Script.Serialization.ScriptIgnoreAttribute"
2222
};
2323

2424
private static readonly Dictionary<string, string[]> NameAttributes = new(StringComparer.OrdinalIgnoreCase)
2525
{
2626
{ "DataMember", new[] { "Name" } },
27-
{ "JsonProperty", new[] { "", "PropertyName" } }
27+
{ "JsonPropertyName", new[] { "" } }
2828
};
2929

3030
public static IEnumerable<IntellisenseObject> ProcessFile(string filePath, string fileContent, IGeneratorOptions options, HashSet<string>? projectFiles = null)

src/TypeScriptDefinitionGenerator.MSBuild/TypeScriptDefinitionGenerator.MSBuild.targets

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
Use TypeScriptDefinitionGeneratorUseTool=true (default in this package) for dotnet tsdefgen.
77
-->
88
<PropertyGroup>
9-
<TypeScriptDefinitionGeneratorCliProject Condition="'$(TypeScriptDefinitionGeneratorCliProject)' == ''">$(MSBuildThisFileDirectory)../src/TypeScriptDefinitionGenerator.Cli/TypeScriptDefinitionGenerator.Cli.csproj</TypeScriptDefinitionGeneratorCliProject>
9+
<TypeScriptDefinitionGeneratorCliProject Condition="'$(TypeScriptDefinitionGeneratorCliProject)' == ''">$(MSBuildThisFileDirectory)../TypeScriptDefinitionGenerator.Cli/TypeScriptDefinitionGenerator.Cli.csproj</TypeScriptDefinitionGeneratorCliProject>
1010
<_TsDefGenUseTool Condition="'$(TypeScriptDefinitionGeneratorUseTool)' == 'true'">true</_TsDefGenUseTool>
1111
</PropertyGroup>
1212

src/TypeScriptDefinitionGenerator/Commands/ToggleCustomTool.cs

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
using EnvDTE;
1+
using EnvDTE;
22
using EnvDTE80;
33
using Microsoft.VisualStudio.Shell;
44
using System;
@@ -81,6 +81,12 @@ private void BeforeQueryStatus(object sender, EventArgs e)
8181

8282
private void Execute(object sender, EventArgs e)
8383
{
84+
if (_item == null)
85+
return;
86+
var ext = Path.GetExtension(_item.FileNames[1]);
87+
if (!Constants.SupportedSourceExtensions.Contains(ext, StringComparer.OrdinalIgnoreCase))
88+
return;
89+
8490
Options.ReadOptionOverrides(_item, false);
8591
// .NET Core and Website projects
8692
if (_item.ContainingProject.IsKind(ProjectTypes.DOTNET_Core, ProjectTypes.ASPNET_5, ProjectTypes.WEBSITE_PROJECT))

src/TypeScriptDefinitionGenerator/Generator/GenerationService.cs

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,9 @@ private void FileActionOccurred(object sender, TextDocumentFileActionEventArgs e
4141
{
4242
if (e.FileActionType != FileActionTypes.ContentSavedToDisk)
4343
return;
44+
var ext = Path.GetExtension(e.FilePath);
45+
if (!Constants.SupportedSourceExtensions.Contains(ext, StringComparer.OrdinalIgnoreCase))
46+
return;
4447
_item = VSHelpers.GetProjectItem(e.FilePath);
4548
Options.ReadOptionOverrides(_item, false);
4649
string fileName = Utility.GenerateFileName(e.FilePath);
@@ -83,6 +86,9 @@ public static string ConvertToTypeScript(ProjectItem sourceItem)
8386
public static void CreateDtsFile(ProjectItem sourceItem)
8487
{
8588
string sourceFile = sourceItem.FileNames[1];
89+
var ext = Path.GetExtension(sourceFile);
90+
if (!Constants.SupportedSourceExtensions.Contains(ext, StringComparer.OrdinalIgnoreCase))
91+
return;
8692
string dtsFile = Utility.GenerateFileName(sourceFile);
8793
string dts = ConvertToTypeScript(sourceItem);
8894

@@ -106,4 +112,4 @@ public static void CreateDtsFile(ProjectItem sourceItem)
106112
sourceItem.ContainingProject.ProjectItems.AddFromFile(dtsFile);
107113
}
108114
}
109-
}
115+
}

src/TypeScriptDefinitionGenerator/Generator/IntellisenseParser.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
using EnvDTE;
1+
using EnvDTE;
22
using EnvDTE80;
33
using System;
44
using System.Collections.Generic;
@@ -176,7 +176,7 @@ private static IEnumerable<IntellisenseProperty> GetProperties(CodeElements prop
176176
private static bool HasIgnoreAttribute(CodeAttribute attribute)
177177
{
178178
return attribute.FullName == "System.Runtime.Serialization.IgnoreDataMemberAttribute" ||
179-
attribute.FullName == "Newtonsoft.Json.JsonIgnoreAttribute" ||
179+
attribute.FullName == "System.Text.Json.Serialization.JsonIgnoreAttribute" ||
180180
attribute.FullName == "System.Web.Script.Serialization.ScriptIgnoreAttribute";
181181
}
182182

0 commit comments

Comments
 (0)