Skip to content

Commit

Permalink
fix have workflow run always on PRs
Browse files Browse the repository at this point in the history
  • Loading branch information
SockworkOrange committed May 18, 2024
1 parent bc25e85 commit 935d429
Show file tree
Hide file tree
Showing 3 changed files with 62 additions and 24 deletions.
2 changes: 2 additions & 0 deletions .github/workflows/main.yml
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,9 @@ on:
push:
branches: [ "main" ]
pull_request:
branches: [ "*" ]
paths:
- "**"
- "!**.md"

jobs:
Expand Down
78 changes: 57 additions & 21 deletions CodeGenerator/CodeGenerator.cs
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Threading.Tasks;
using Grpc.Core;
using Microsoft.CodeAnalysis.CSharp;
using Microsoft.CodeAnalysis.CSharp.Syntax;
using Plugin;
Expand All @@ -12,7 +14,7 @@

namespace SqlcGenCsharp;

public class CodeGenerator
public class CodeGenerator: CodegenService.CodegenServiceBase
{
private static readonly char[] Separator = ['/'];

Expand All @@ -23,35 +25,68 @@ public class CodeGenerator
"NotAccessedPositionalProperty.Global"
];

public CodeGenerator(GenerateRequest generateRequest)
private string? _namespaceName;
private Options? _options;
private DbDriver? _dbDriver;
private DataClassesGen? _dataClassesGen;
private RootGen? _rootGen;
private UtilsGen? _utilsGen;
private CsprojGen? _csprojGen;

private void InitGenerators(GenerateRequest generateRequest)
{
GenerateRequest = generateRequest;
Options = new Options(GenerateRequest);
NamespaceName = GenerateNamespace(GenerateRequest);
Options = new Options(generateRequest);
NamespaceName = GenerateNamespace(generateRequest);
DbDriver = InstantiateDriver();

// initialize file generators
CsprojGen = new CsprojGen(GenerateRequest.Settings.Codegen.Out, Options);
CsprojGen = new CsprojGen(generateRequest.Settings.Codegen.Out, Options);
RootGen = new RootGen(Options);
UtilsGen = new UtilsGen(NamespaceName, Options);
DataClassesGen = new DataClassesGen(DbDriver);
}

private GenerateRequest GenerateRequest { get; }

private string NamespaceName { get; }
private string NamespaceName
{
get => _namespaceName!;
set => _namespaceName = value;
}

private Options Options { get; }
private Options Options
{
get => _options!;
set => _options = value;
}

private DbDriver DbDriver { get; }
private DbDriver DbDriver
{
get => _dbDriver!;
set => _dbDriver = value;
}

private DataClassesGen DataClassesGen { get; }
private DataClassesGen DataClassesGen
{
get => _dataClassesGen!;
set => _dataClassesGen = value;
}

private RootGen RootGen { get; }
private RootGen RootGen
{
get => _rootGen!;
set => _rootGen = value;
}

private UtilsGen UtilsGen { get; }
private UtilsGen UtilsGen
{
get => _utilsGen!;
set => _utilsGen = value;
}

private CsprojGen CsprojGen { get; }
private CsprojGen CsprojGen
{
get => _csprojGen!;
set => _csprojGen = value;
}

private DbDriver InstantiateDriver()
{
Expand All @@ -63,19 +98,20 @@ private DbDriver InstantiateDriver()
};
}

public GenerateResponse Generate()
public override Task<GenerateResponse> Generate(GenerateRequest generateRequest, ServerCallContext? context)
{
InitGenerators(generateRequest); // the request is necessary in order to know which generators are needed
var fileQueries = GetFileQueries();
var files = fileQueries
.Select(fq => GenerateFile(NamespaceName, fq.Value, fq.Key))
.Select(fq => GenerateFile(fq.Value, fq.Key))
.Append(UtilsGen.GenerateFile())
.AppendIf(CsprojGen.GenerateFile(), Options.GenerateCsproj);

return new GenerateResponse { Files = { files } };
return Task.FromResult(new GenerateResponse { Files = { files } });

Dictionary<string, Query[]> GetFileQueries()
{
return GenerateRequest.Queries
return generateRequest.Queries
.GroupBy(query =>
Options.FilePerQuery
? $"{query.Name}Query"
Expand All @@ -100,11 +136,11 @@ private string GenerateNamespace(GenerateRequest generateRequest)
return parts.Length > 0 ? parts[0] : "GeneratedNamespace";
}

private File GenerateFile(string namespaceName, IEnumerable<Query> queries, string className)
private File GenerateFile(IEnumerable<Query> queries, string className)
{
var (usingDirectives, classDeclaration) = GenerateClass(queries, className);
var root = RootGen.CompilationRootGen(
IdentifierName(namespaceName), usingDirectives, classDeclaration);
IdentifierName(NamespaceName), usingDirectives, classDeclaration);
root = AddResharperDisables(root);
root = root.AddCommentOnTop(Consts.AutoGeneratedComment);

Expand Down
6 changes: 3 additions & 3 deletions SqlcGenCsharp/PluginRunner.cs
Original file line number Diff line number Diff line change
Expand Up @@ -8,9 +8,9 @@ public static class PluginRunner
public static void Run()
{
var generateRequest = ReadInput();
var codeGenerator = new CodeGenerator(generateRequest);
var generateResponse = codeGenerator.Generate();
WriteOutput(generateResponse);
var codeGenerator = new CodeGenerator();
var generateResponse = codeGenerator.Generate(generateRequest, null);
WriteOutput(generateResponse.Result);
}

private static GenerateRequest ReadInput()
Expand Down

0 comments on commit 935d429

Please sign in to comment.