Skip to content

Commit 4c4776d

Browse files
author
Denis Peshkov
committed
- added UseNamespace Options - commented unused functions - fixed Tests
1 parent e3702b7 commit 4c4776d

3 files changed

Lines changed: 81 additions & 96 deletions

File tree

src/TypeScriptDefinitionGenerator/Generator/IntellisenseParser.cs

Lines changed: 48 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@ internal static IEnumerable<IntellisenseObject> ProcessFile(ProjectItem item, Ha
4747

4848
return new HashSet<IntellisenseObject>(list);
4949
}
50+
5051
private static void ProcessElement(CodeElement element, List<IntellisenseObject> list, HashSet<CodeClass> underProcess)
5152
{
5253
if (element.Kind == vsCMElement.vsCMElementEnum)
@@ -95,9 +96,8 @@ private static void ProcessElement(CodeElement element, List<IntellisenseObject>
9596

9697
private static bool ShouldProcess(CodeElement member)
9798
{
98-
return
99-
member.Kind == vsCMElement.vsCMElementClass
100-
|| member.Kind == vsCMElement.vsCMElementEnum;
99+
return member.Kind == vsCMElement.vsCMElementClass ||
100+
member.Kind == vsCMElement.vsCMElementEnum;
101101
}
102102

103103
private static void ProcessEnum(CodeEnum element, List<IntellisenseObject> list)
@@ -204,46 +204,65 @@ private static bool IsPublic(CodeFunction cf)
204204

205205
private static string GetClassName(CodeClass cc)
206206
{
207-
return GetDataContractName(cc, "Name") ?? cc.Name;
207+
return cc.Name;
208+
209+
// return GetDataContractName(cc, "Name") ?? cc.Name;
208210
}
209211

210212
private static string GetNamespace(CodeClass cc)
211213
{
212-
return GetDataContractName(cc, "Namespace") ?? GetNamespace(cc.Attributes);
214+
if (!Options.UseNamespace)
215+
return Options.DefaultModuleName;
216+
217+
return cc == null
218+
? Options.DefaultModuleName
219+
: cc.Namespace.FullName;
220+
221+
//return GetDataContractName(cc, "Namespace") ?? GetNamespace(cc.Attributes);
213222
}
214223

215-
private static string GetDataContractName(CodeClass cc, string attrName)
224+
private static string GetNamespace(CodeEnum cc)
216225
{
217-
var dataContractAttribute = cc.Attributes.Cast<CodeAttribute>().Where(a => a.Name == "DataContract");
226+
if (!Options.UseNamespace)
227+
return Options.DefaultModuleName;
218228

219-
if (!dataContractAttribute.Any())
220-
return null;
229+
return cc == null
230+
? Options.DefaultModuleName
231+
: cc.Namespace.FullName;
232+
233+
//return GetNamespace(cc.Attributes);
234+
}
221235

222-
string name = null;
223-
var keyValues = dataContractAttribute.First().Children.OfType<CodeAttributeArgument>()
224-
.ToDictionary(a => a.Name, a => (a.Value ?? "").Trim('\"', '\''));
236+
//private static string GetDataContractName(CodeClass cc, string attrName)
237+
//{
238+
// var dataContractAttribute = cc.Attributes.Cast<CodeAttribute>().Where(a => a.Name == "DataContract");
225239

226-
if (keyValues.ContainsKey(attrName))
227-
name = keyValues[attrName];
240+
// if (!dataContractAttribute.Any())
241+
// return null;
228242

229-
return name;
230-
}
243+
// string name = null;
244+
// var keyValues = dataContractAttribute.First().Children.OfType<CodeAttributeArgument>()
245+
// .ToDictionary(a => a.Name, a => (a.Value ?? "").Trim('\"', '\''));
231246

232-
private static string GetNamespace(CodeEnum cc) { return GetNamespace(cc.Attributes); }
247+
// if (keyValues.ContainsKey(attrName))
248+
// name = keyValues[attrName];
233249

234-
private static string GetNamespace(CodeElements attrs)
235-
{
236-
if (attrs == null) return Options.DefaultModuleName;
250+
// return name;
251+
//}
237252

238-
var namespaceFromAttr = from a in attrs.Cast<CodeAttribute2>()
239-
where a.Name.EndsWith(ModuleNameAttributeName, StringComparison.OrdinalIgnoreCase)
240-
from arg in a.Arguments.Cast<CodeAttributeArgument>()
241-
let v = (arg.Value ?? "").Trim('\"')
242-
where !string.IsNullOrWhiteSpace(v)
243-
select v;
253+
//private static string GetNamespace(CodeElements attrs)
254+
//{
255+
// if (attrs == null || attrs.Count == 0) return Options.DefaultModuleName;
244256

245-
return namespaceFromAttr.FirstOrDefault() ?? Options.DefaultModuleName;
246-
}
257+
// var namespaceFromAttr = from a in attrs.Cast<CodeAttribute2>()
258+
// where a.Name.EndsWith(ModuleNameAttributeName, StringComparison.OrdinalIgnoreCase)
259+
// from arg in a.Arguments.Cast<CodeAttributeArgument>()
260+
// let v = (arg.Value ?? "").Trim('\"')
261+
// where !string.IsNullOrWhiteSpace(v)
262+
// select v;
263+
264+
// return namespaceFromAttr.FirstOrDefault() ?? Options.DefaultModuleName;
265+
//}
247266

248267
private static IntellisenseType GetType(CodeClass rootElement, CodeTypeRef codeTypeRef, HashSet<string> traversedTypes, HashSet<string> references)
249268
{
@@ -261,7 +280,7 @@ private static IntellisenseType GetType(CodeClass rootElement, CodeTypeRef codeT
261280
}
262281

263282
string typeName = effectiveTypeRef.AsFullName;
264-
283+
265284
try
266285
{
267286
var codeClass = effectiveTypeRef.CodeType as CodeClass2;

src/TypeScriptDefinitionGenerator/Options.cs

Lines changed: 26 additions & 61 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ public class OptionsDialogPage : DialogPage
1717

1818
internal const bool _defClassInsteadOfInterface = false;
1919
internal const string _defModuleName = "Server.Dtos";
20+
internal const bool _defUseNamespace = true;
2021
internal const bool _defDeclareModule = true;
2122
internal const bool _defIgnoreIntellisense = true;
2223

@@ -34,7 +35,7 @@ public class OptionsDialogPage : DialogPage
3435
[DisplayName("Camel case type names")]
3536
[DefaultValue(_defCamelCaseTypeNames)]
3637
public bool CamelCaseTypeNames { get; set; } = _defCamelCaseTypeNames;
37-
38+
3839
[Category("Compatibilty")]
3940
[DisplayName("Web Essentials 2015 file names")]
4041
[Description("Web Essentials 2015 format is <filename>.cs.d.ts instead of <filename>.d.ts")]
@@ -46,6 +47,11 @@ public class OptionsDialogPage : DialogPage
4647
[Description("Set the top-level module name for the generated .d.ts file. Default is \"Server.Dtos\"")]
4748
public string DefaultModuleName { get; set; } = _defModuleName;
4849

50+
[Category("Settings")]
51+
[DisplayName("Use Namespace")]
52+
[Description("Use Namespace by default, otherwise \"Default Module name\" will be taken.")]
53+
public bool UseNamespace { get; set; } = _defUseNamespace;
54+
4955
[Category("Settings")]
5056
[DisplayName("Class instead of Interface")]
5157
[Description("Controls whether to generate a class or an interface: default is an Interface")]
@@ -67,71 +73,27 @@ public class OptionsDialogPage : DialogPage
6773

6874
public class Options
6975
{
70-
const string OVERRIDE_FILE_NAME = "tsdefgen.json";
71-
static OptionsOverride overrides { get; set; } = null;
72-
public static bool CamelCaseEnumerationValues
73-
{
74-
get
75-
{
76-
return overrides != null ? overrides.CamelCaseEnumerationValues : DtsPackage.Options.CamelCaseEnumerationValues;
77-
}
78-
}
76+
private const string OVERRIDE_FILE_NAME = "tsdefgen.json";
7977

80-
public static bool CamelCasePropertyNames
81-
{
82-
get
83-
{
84-
return overrides != null ? overrides.CamelCasePropertyNames : DtsPackage.Options.CamelCasePropertyNames;
85-
}
86-
}
78+
private static OptionsOverride overrides { get; set; } = null;
8779

88-
public static bool CamelCaseTypeNames
89-
{
90-
get
91-
{
92-
return overrides != null ? overrides.CamelCaseTypeNames : DtsPackage.Options.CamelCaseTypeNames;
93-
}
94-
}
95-
//todo: set to server namespace
96-
public static string DefaultModuleName
97-
{
98-
get
99-
{
100-
return overrides != null ? overrides.DefaultModuleName : DtsPackage.Options.DefaultModuleName;
101-
}
102-
}
80+
public static bool CamelCaseEnumerationValues => overrides?.CamelCaseEnumerationValues ?? DtsPackage.Options.CamelCaseEnumerationValues;
10381

104-
public static bool ClassInsteadOfInterface
105-
{
106-
get
107-
{
108-
return overrides != null ? overrides.ClassInsteadOfInterface : DtsPackage.Options.ClassInsteadOfInterface;
109-
}
110-
}
82+
public static bool CamelCasePropertyNames => overrides?.CamelCasePropertyNames ?? DtsPackage.Options.CamelCasePropertyNames;
11183

112-
public static bool DeclareModule
113-
{
114-
get
115-
{
116-
return overrides != null ? overrides.DeclareModule : DtsPackage.Options.DeclareModule;
117-
}
118-
}
84+
public static bool CamelCaseTypeNames => overrides?.CamelCaseTypeNames ?? DtsPackage.Options.CamelCaseTypeNames;
11985

120-
public static bool IgnoreIntellisense
121-
{
122-
get
123-
{
124-
return overrides != null ? overrides.IgnoreIntellisense : DtsPackage.Options.IgnoreIntellisense;
125-
}
126-
}
86+
public static string DefaultModuleName => overrides?.DefaultModuleName ?? DtsPackage.Options.DefaultModuleName;
12787

128-
public static bool WebEssentials2015
129-
{
130-
get
131-
{
132-
return overrides != null ? overrides.WebEssentials2015 : DtsPackage.Options.WebEssentials2015;
133-
}
134-
}
88+
public static bool UseNamespace => overrides?.UseNamespace ?? DtsPackage.Options.UseNamespace;
89+
90+
public static bool ClassInsteadOfInterface => overrides?.ClassInsteadOfInterface ?? DtsPackage.Options.ClassInsteadOfInterface;
91+
92+
public static bool DeclareModule => overrides?.DeclareModule ?? DtsPackage.Options.DeclareModule;
93+
94+
public static bool IgnoreIntellisense => overrides?.IgnoreIntellisense ?? DtsPackage.Options.IgnoreIntellisense;
95+
96+
public static bool WebEssentials2015 => overrides?.WebEssentials2015 ?? DtsPackage.Options.WebEssentials2015;
13597

13698
public static void ReadOptionOverrides(ProjectItem sourceItem, bool display = true)
13799
{
@@ -141,7 +103,7 @@ public static void ReadOptionOverrides(ProjectItem sourceItem, bool display = tr
141103

142104
foreach (ProjectItem item in proj.ProjectItems)
143105
{
144-
if (item.Name.ToLower() == OVERRIDE_FILE_NAME.ToLower())
106+
if (string.Equals(item.Name, OVERRIDE_FILE_NAME, StringComparison.InvariantCultureIgnoreCase))
145107
{
146108
jsonName = item.FileNames[0];
147109
break;
@@ -205,6 +167,9 @@ internal class OptionsOverride
205167
// [JsonRequired]
206168
public string DefaultModuleName { get; set; } = OptionsDialogPage._defModuleName;
207169

170+
// [JsonRequired]
171+
public bool UseNamespace { get; set; } = OptionsDialogPage._defUseNamespace;
172+
208173
// [JsonRequired]
209174
public bool ClassInsteadOfInterface { get; set; } = OptionsDialogPage._defClassInsteadOfInterface;
210175

tests/TypeScriptDefinitionGenerator.Tests/IntellisenseParserTest.cs

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,7 @@ public void _ShouldWorkProperly()
6060

6161
ClassInsteadOfInterface = false,
6262
DefaultModuleName = "Server.Dtos",
63+
UseNamespace = true,
6364
DeclareModule = true,
6465
IgnoreIntellisense = true,
6566
});
@@ -78,9 +79,9 @@ public void _ShouldWorkProperly()
7879
Assert.AreEqual(null, list[0].Properties[1].Summary);
7980
Assert.AreEqual("TypeScriptDefinitionGenerator.Tests.IntEnum", list[0].Properties[1].Type.CodeName);
8081
Assert.AreNotEqual("any", list[0].Properties[1].Type.TypeScriptName);
81-
Assert.AreEqual("Server.Dtos.IntEnum", list[0].Properties[1].Type.TypeScriptName);
82+
Assert.AreEqual("TypeScriptDefinitionGenerator.Tests.IntEnum", list[0].Properties[1].Type.TypeScriptName);
8283
Assert.AreNotEqual(null, list[0].Properties[1].Type.ClientSideReferenceName);
83-
Assert.AreEqual("Server.Dtos.IntEnum", list[0].Properties[1].Type.ClientSideReferenceName);
84+
Assert.AreEqual("TypeScriptDefinitionGenerator.Tests.IntEnum", list[0].Properties[1].Type.ClientSideReferenceName);
8485
Assert.AreEqual(false, list[0].Properties[1].Type.IsArray);
8586
Assert.AreEqual(false, list[0].Properties[1].Type.IsDictionary);
8687
Assert.AreEqual(true, list[0].Properties[1].Type.IsKnownType);
@@ -93,9 +94,9 @@ public void _ShouldWorkProperly()
9394
Assert.AreEqual(null, list[0].Properties[3].Summary);
9495
Assert.AreEqual("ClassLibrary1.SomeEnum", list[0].Properties[3].Type.CodeName);
9596
Assert.AreNotEqual("any", list[0].Properties[3].Type.TypeScriptName);
96-
Assert.AreEqual("Server.Dtos.SomeEnum", list[0].Properties[3].Type.TypeScriptName);
97+
Assert.AreEqual("ClassLibrary1.SomeEnum", list[0].Properties[3].Type.TypeScriptName);
9798
Assert.AreNotEqual(null, list[0].Properties[3].Type.ClientSideReferenceName);
98-
Assert.AreEqual("Server.Dtos.SomeEnum", list[0].Properties[3].Type.ClientSideReferenceName);
99+
Assert.AreEqual("ClassLibrary1.SomeEnum", list[0].Properties[3].Type.ClientSideReferenceName);
99100
Assert.AreEqual(false, list[0].Properties[3].Type.IsArray);
100101
Assert.AreEqual(false, list[0].Properties[3].Type.IsDictionary);
101102
Assert.AreEqual(true, list[0].Properties[3].Type.IsKnownType);
@@ -108,9 +109,9 @@ public void _ShouldWorkProperly()
108109
Assert.AreEqual(null, list[0].Properties[4].Summary);
109110
Assert.AreEqual("ClassLibrary1.SomeSomeClass", list[0].Properties[4].Type.CodeName);
110111
Assert.AreNotEqual("any", list[0].Properties[4].Type.TypeScriptName);
111-
Assert.AreEqual("Server.Dtos.SomeSomeClass", list[0].Properties[4].Type.TypeScriptName);
112+
Assert.AreEqual("ClassLibrary1.SomeSomeClass", list[0].Properties[4].Type.TypeScriptName);
112113
Assert.AreNotEqual(null, list[0].Properties[4].Type.ClientSideReferenceName);
113-
Assert.AreEqual("Server.Dtos.SomeSomeClass", list[0].Properties[4].Type.ClientSideReferenceName);
114+
Assert.AreEqual("ClassLibrary1.SomeSomeClass", list[0].Properties[4].Type.ClientSideReferenceName);
114115
Assert.AreEqual(false, list[0].Properties[4].Type.IsArray);
115116
Assert.AreEqual(false, list[0].Properties[4].Type.IsDictionary);
116117
Assert.AreEqual(true, list[0].Properties[4].Type.IsKnownType);

0 commit comments

Comments
 (0)