Skip to content

Commit 2789c0b

Browse files
committed
Added context to validators and removed required check from reader
1 parent 4ffe083 commit 2789c0b

File tree

8 files changed

+19
-47
lines changed

8 files changed

+19
-47
lines changed

src/Microsoft.OpenApi.Readers/V2/OpenApiDocumentDeserializer.cs

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -125,11 +125,8 @@ public static OpenApiDocument LoadOpenApi(RootNode rootNode)
125125

126126
var openApiNode = rootNode.GetMap();
127127

128-
var required = new List<string> {"info", "swagger", "paths"};
128+
ParseMap(openApiNode, openApidoc, _openApiFixedFields, _openApiPatternFields);
129129

130-
ParseMap(openApiNode, openApidoc, _openApiFixedFields, _openApiPatternFields, required);
131-
132-
ReportMissing(openApiNode, required);
133130

134131
// Post Process OpenApi Object
135132
if (openApidoc.Servers == null)

src/Microsoft.OpenApi.Readers/V2/OpenApiInfoDeserializer.cs

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -65,11 +65,8 @@ public static OpenApiInfo LoadInfo(ParseNode node)
6565
var mapNode = node.CheckMapNode("Info");
6666

6767
var info = new OpenApiInfo();
68-
var required = new List<string> {"title", "version"};
6968

70-
ParseMap(mapNode, info, _infoFixedFields, _infoPatternFields, required);
71-
72-
ReportMissing(node, required);
69+
ParseMap(mapNode, info, _infoFixedFields, _infoPatternFields);
7370

7471
return info;
7572
}

src/Microsoft.OpenApi.Readers/V2/OpenApiV2Deserializer.cs

Lines changed: 0 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -32,17 +32,6 @@ private static void ParseMap<T>(
3232
}
3333
}
3434

35-
private static void ReportMissing(ParseNode node, IList<string> required)
36-
{
37-
foreach (var error in required.Select(
38-
r => new OpenApiError(
39-
node.Context.GetLocation(),
40-
$"{r} is a required property"))
41-
.ToList())
42-
{
43-
node.Diagnostic.Errors.Add(error);
44-
}
45-
}
4635

4736
private static string LoadString(ParseNode node)
4837
{

src/Microsoft.OpenApi.Readers/V3/OpenApiDocumentDeserializer.cs

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -46,8 +46,6 @@ public static OpenApiDocument LoadOpenApi(RootNode rootNode)
4646

4747
ParseMap(openApiNode, openApidoc, _openApiFixedFields, _openApiPatternFields, required);
4848

49-
//ReportMissing(openApiNode, required);
50-
5149
return openApidoc;
5250
}
5351
}

src/Microsoft.OpenApi.Readers/V3/OpenApiV3Deserializer.cs

Lines changed: 0 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,6 @@ private static void ParseMap<T>(
3333
requiredFields?.Remove(propertyNode.Name);
3434
}
3535

36-
//ReportMissing(mapNode, requiredFields);
3736
}
3837

3938
private static RuntimeExpression LoadRuntimeExpression(ParseNode node)
@@ -60,22 +59,7 @@ private static RuntimeExpressionAnyWrapper LoadRuntimeExpressionAnyWrapper(Parse
6059
};
6160
}
6261

63-
private static void ReportMissing(ParseNode node, IList<string> required)
64-
{
65-
if (required == null || !required.Any())
66-
{
67-
return;
68-
}
6962

70-
foreach (var error in required.Select(
71-
r => new OpenApiError(
72-
node.Context.GetLocation(),
73-
$"{r} is a required property"))
74-
.ToList())
75-
{
76-
node.Diagnostic.Errors.Add(error);
77-
}
78-
}
7963

8064
private static string LoadString(ParseNode node)
8165
{

src/Microsoft.OpenApi/Validations/OpenApiValidator.cs

Lines changed: 16 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
// Copyright (c) Microsoft Corporation. All rights reserved.
22
// Licensed under the MIT license.
33

4+
using System;
45
using System.Collections.Generic;
56
using System.Linq;
67
using Microsoft.OpenApi.Exceptions;
@@ -49,19 +50,19 @@ public OpenApiValidator(ValidationContext context)
4950
/// Execute validation rules against an <see cref="OpenApiInfo"/>
5051
/// </summary>
5152
/// <param name="item">The object to be validated</param>
52-
public override void Visit(OpenApiInfo item) => Validate(item);
53+
public override void Visit(OpenApiInfo item) => Validate("info",item);
5354

5455
/// <summary>
5556
/// Execute validation rules against an <see cref="OpenApiContact"/>
5657
/// </summary>
5758
/// <param name="item">The object to be validated</param>
58-
public override void Visit(OpenApiContact item) => Validate(item);
59+
public override void Visit(OpenApiContact item) => Validate("contact",item);
5960

6061
/// <summary>
6162
/// Execute validation rules against an <see cref="OpenApiComponents"/>
6263
/// </summary>
6364
/// <param name="item">The object to be validated</param>
64-
public override void Visit(OpenApiComponents item) => Validate(item);
65+
public override void Visit(OpenApiComponents item) => Validate("components", item);
6566

6667
/// <summary>
6768
/// Execute validation rules against an <see cref="OpenApiResponse"/>
@@ -73,19 +74,19 @@ public OpenApiValidator(ValidationContext context)
7374
/// Execute validation rules against an <see cref="OpenApiResponses"/>
7475
/// </summary>
7576
/// <param name="item">The object to be validated</param>
76-
public override void Visit(OpenApiResponses item) => Validate(item);
77+
public override void Visit(OpenApiResponses item) => Validate("responses",item);
7778

7879
/// <summary>
7980
/// Execute validation rules against an <see cref="OpenApiExternalDocs"/>
8081
/// </summary>
8182
/// <param name="item">The object to be validated</param>
82-
public override void Visit(OpenApiExternalDocs item) => Validate(item);
83+
public override void Visit(OpenApiExternalDocs item) => Validate("externalDocs",item);
8384

8485
/// <summary>
8586
/// Execute validation rules against an <see cref="OpenApiLicense"/>
8687
/// </summary>
8788
/// <param name="item">The object to be validated</param>
88-
public override void Visit(OpenApiLicense item) => Validate(item);
89+
public override void Visit(OpenApiLicense item) => Validate("license",item);
8990

9091
/// <summary>
9192
/// Execute validation rules against an <see cref="OpenApiOAuthFlow"/>
@@ -103,14 +104,14 @@ public OpenApiValidator(ValidationContext context)
103104
/// Execute validation rules against an <see cref="OpenApiSchema"/>
104105
/// </summary>
105106
/// <param name="item">The object to be validated</param>
106-
public override void Visit(OpenApiSchema item) => Validate(item);
107+
public override void Visit(OpenApiSchema item) => Validate("schema",item);
107108

108109

109110
/// <summary>
110111
/// Execute validation rules against an <see cref="OpenApiServer"/>
111112
/// </summary>
112113
/// <param name="item">The object to be validated</param>
113-
public override void Visit(OpenApiServer item) => Validate(item);
114+
public override void Visit(OpenApiServer item) => Validate("server",item);
114115

115116
/// <summary>
116117
/// Execute validation rules against an <see cref="OpenApiEncoding"/>
@@ -136,6 +137,13 @@ public OpenApiValidator(ValidationContext context)
136137
/// </summary>
137138
public IEnumerable<ValidationError> Errors => _context.Errors;
138139

140+
private void Validate<T>(string contextToken, T item)
141+
{
142+
_context.Push(contextToken);
143+
Validate(item);
144+
_context.Pop();
145+
}
146+
139147
private void Validate<T>(T item)
140148
{
141149
if (item == null) return; // Required fields should be checked by higher level objects

src/Microsoft.OpenApi/Validations/Rules/OpenApiContactRules.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ internal static class OpenApiContactRules
2020
new ValidationRule<OpenApiContact>(
2121
(context, item) =>
2222
{
23+
2324
context.Push("email");
2425
if (item != null && item.Email != null)
2526
{

src/Microsoft.OpenApi/Validations/Rules/OpenApiInfoRules.cs

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,6 @@ internal static class OpenApiInfoRules
2020
new ValidationRule<OpenApiInfo>(
2121
(context, item) =>
2222
{
23-
context.Push("info");
2423

2524
// title
2625
context.Push("title");
@@ -42,7 +41,6 @@ internal static class OpenApiInfoRules
4241
}
4342
context.Pop();
4443

45-
context.Pop();
4644
});
4745

4846
// add more rule.

0 commit comments

Comments
 (0)