diff --git a/Directory.Build.props b/Directory.Build.props
index e42935c9..45a935d0 100644
--- a/Directory.Build.props
+++ b/Directory.Build.props
@@ -4,6 +4,17 @@
9
warnings
true
+
+ CS8785
false
diff --git a/DocoptNet.sln b/DocoptNet.sln
index e723b406..44397d2e 100644
--- a/DocoptNet.sln
+++ b/DocoptNet.sln
@@ -31,8 +31,34 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution
README.rst = README.rst
EndProjectSection
EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "DocoptNet.CodeGeneration", "src\DocoptNet.CodeGeneration\DocoptNet.CodeGeneration.csproj", "{37D45A51-EB3E-4D6D-9943-EF2F3967343C}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "SourceGenerator", "SourceGenerator", "{99846126-1D88-42CC-897C-ACEA7C2DBB2B}"
+ ProjectSection(SolutionItems) = preProject
+ eg\SourceGenerator\Directory.Build.props = eg\SourceGenerator\Directory.Build.props
+ eg\SourceGenerator\Directory.Build.targets = eg\SourceGenerator\Directory.Build.targets
+ EndProjectSection
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "NavalFate", "eg\SourceGenerator\NavalFate\NavalFate.csproj", "{E41419E5-251C-4093-ADDE-77EF694964E3}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ArgumentsExample", "eg\SourceGenerator\ArgumentsExample\ArgumentsExample.csproj", "{99A5B165-A15E-4CE1-B68E-E0992F4478D9}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "CalculatorExample", "eg\SourceGenerator\CalculatorExample\CalculatorExample.csproj", "{8BCB1D8B-0233-48C5-B5C6-6E3EDB566D3E}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "CountedExample", "eg\SourceGenerator\CountedExample\CountedExample.csproj", "{962D6BAB-A7DE-41BC-9E91-567A6EEE4C18}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "OddEvenExample", "eg\SourceGenerator\OddEvenExample\OddEvenExample.csproj", "{E4EB11FF-6FD7-42F5-A5CD-2C7C2B52568B}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "OptionsExample", "eg\SourceGenerator\OptionsExample\OptionsExample.csproj", "{6C3733DD-C7BD-47C7-BF9A-691A3D0ACCCE}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "OptionsShortcutExample", "eg\SourceGenerator\OptionsShortcutExample\OptionsShortcutExample.csproj", "{21E4EA57-6291-4C58-BFC4-CA8ACF48DB74}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "QuickExample", "eg\SourceGenerator\QuickExample\QuickExample.csproj", "{86843F8B-9B83-4985-9E68-77F9ACF4DA2D}"
+EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "DocoptNet.Playground", "src\DocoptNet.Playground\DocoptNet.Playground.csproj", "{93595D4E-5AE9-4714-AC8B-1FB24D68A15C}"
EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Git", "eg\SourceGenerator\Git\Git.csproj", "{63B571D9-DA1B-4209-B4E2-59F0AC529E06}"
+EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
@@ -95,6 +121,114 @@ Global
{5A641DFB-CB1A-4044-AF52-554CC8904449}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
{5A641DFB-CB1A-4044-AF52-554CC8904449}.Release|Mixed Platforms.Build.0 = Release|Any CPU
{5A641DFB-CB1A-4044-AF52-554CC8904449}.Release|x86.ActiveCfg = Release|Any CPU
+ {37D45A51-EB3E-4D6D-9943-EF2F3967343C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {37D45A51-EB3E-4D6D-9943-EF2F3967343C}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {37D45A51-EB3E-4D6D-9943-EF2F3967343C}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
+ {37D45A51-EB3E-4D6D-9943-EF2F3967343C}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
+ {37D45A51-EB3E-4D6D-9943-EF2F3967343C}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {37D45A51-EB3E-4D6D-9943-EF2F3967343C}.Debug|x86.Build.0 = Debug|Any CPU
+ {37D45A51-EB3E-4D6D-9943-EF2F3967343C}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {37D45A51-EB3E-4D6D-9943-EF2F3967343C}.Release|Any CPU.Build.0 = Release|Any CPU
+ {37D45A51-EB3E-4D6D-9943-EF2F3967343C}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
+ {37D45A51-EB3E-4D6D-9943-EF2F3967343C}.Release|Mixed Platforms.Build.0 = Release|Any CPU
+ {37D45A51-EB3E-4D6D-9943-EF2F3967343C}.Release|x86.ActiveCfg = Release|Any CPU
+ {37D45A51-EB3E-4D6D-9943-EF2F3967343C}.Release|x86.Build.0 = Release|Any CPU
+ {E41419E5-251C-4093-ADDE-77EF694964E3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {E41419E5-251C-4093-ADDE-77EF694964E3}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {E41419E5-251C-4093-ADDE-77EF694964E3}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
+ {E41419E5-251C-4093-ADDE-77EF694964E3}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
+ {E41419E5-251C-4093-ADDE-77EF694964E3}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {E41419E5-251C-4093-ADDE-77EF694964E3}.Debug|x86.Build.0 = Debug|Any CPU
+ {E41419E5-251C-4093-ADDE-77EF694964E3}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {E41419E5-251C-4093-ADDE-77EF694964E3}.Release|Any CPU.Build.0 = Release|Any CPU
+ {E41419E5-251C-4093-ADDE-77EF694964E3}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
+ {E41419E5-251C-4093-ADDE-77EF694964E3}.Release|Mixed Platforms.Build.0 = Release|Any CPU
+ {E41419E5-251C-4093-ADDE-77EF694964E3}.Release|x86.ActiveCfg = Release|Any CPU
+ {E41419E5-251C-4093-ADDE-77EF694964E3}.Release|x86.Build.0 = Release|Any CPU
+ {99A5B165-A15E-4CE1-B68E-E0992F4478D9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {99A5B165-A15E-4CE1-B68E-E0992F4478D9}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {99A5B165-A15E-4CE1-B68E-E0992F4478D9}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
+ {99A5B165-A15E-4CE1-B68E-E0992F4478D9}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
+ {99A5B165-A15E-4CE1-B68E-E0992F4478D9}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {99A5B165-A15E-4CE1-B68E-E0992F4478D9}.Debug|x86.Build.0 = Debug|Any CPU
+ {99A5B165-A15E-4CE1-B68E-E0992F4478D9}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {99A5B165-A15E-4CE1-B68E-E0992F4478D9}.Release|Any CPU.Build.0 = Release|Any CPU
+ {99A5B165-A15E-4CE1-B68E-E0992F4478D9}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
+ {99A5B165-A15E-4CE1-B68E-E0992F4478D9}.Release|Mixed Platforms.Build.0 = Release|Any CPU
+ {99A5B165-A15E-4CE1-B68E-E0992F4478D9}.Release|x86.ActiveCfg = Release|Any CPU
+ {99A5B165-A15E-4CE1-B68E-E0992F4478D9}.Release|x86.Build.0 = Release|Any CPU
+ {8BCB1D8B-0233-48C5-B5C6-6E3EDB566D3E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {8BCB1D8B-0233-48C5-B5C6-6E3EDB566D3E}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {8BCB1D8B-0233-48C5-B5C6-6E3EDB566D3E}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
+ {8BCB1D8B-0233-48C5-B5C6-6E3EDB566D3E}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
+ {8BCB1D8B-0233-48C5-B5C6-6E3EDB566D3E}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {8BCB1D8B-0233-48C5-B5C6-6E3EDB566D3E}.Debug|x86.Build.0 = Debug|Any CPU
+ {8BCB1D8B-0233-48C5-B5C6-6E3EDB566D3E}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {8BCB1D8B-0233-48C5-B5C6-6E3EDB566D3E}.Release|Any CPU.Build.0 = Release|Any CPU
+ {8BCB1D8B-0233-48C5-B5C6-6E3EDB566D3E}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
+ {8BCB1D8B-0233-48C5-B5C6-6E3EDB566D3E}.Release|Mixed Platforms.Build.0 = Release|Any CPU
+ {8BCB1D8B-0233-48C5-B5C6-6E3EDB566D3E}.Release|x86.ActiveCfg = Release|Any CPU
+ {8BCB1D8B-0233-48C5-B5C6-6E3EDB566D3E}.Release|x86.Build.0 = Release|Any CPU
+ {962D6BAB-A7DE-41BC-9E91-567A6EEE4C18}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {962D6BAB-A7DE-41BC-9E91-567A6EEE4C18}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {962D6BAB-A7DE-41BC-9E91-567A6EEE4C18}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
+ {962D6BAB-A7DE-41BC-9E91-567A6EEE4C18}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
+ {962D6BAB-A7DE-41BC-9E91-567A6EEE4C18}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {962D6BAB-A7DE-41BC-9E91-567A6EEE4C18}.Debug|x86.Build.0 = Debug|Any CPU
+ {962D6BAB-A7DE-41BC-9E91-567A6EEE4C18}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {962D6BAB-A7DE-41BC-9E91-567A6EEE4C18}.Release|Any CPU.Build.0 = Release|Any CPU
+ {962D6BAB-A7DE-41BC-9E91-567A6EEE4C18}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
+ {962D6BAB-A7DE-41BC-9E91-567A6EEE4C18}.Release|Mixed Platforms.Build.0 = Release|Any CPU
+ {962D6BAB-A7DE-41BC-9E91-567A6EEE4C18}.Release|x86.ActiveCfg = Release|Any CPU
+ {962D6BAB-A7DE-41BC-9E91-567A6EEE4C18}.Release|x86.Build.0 = Release|Any CPU
+ {E4EB11FF-6FD7-42F5-A5CD-2C7C2B52568B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {E4EB11FF-6FD7-42F5-A5CD-2C7C2B52568B}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {E4EB11FF-6FD7-42F5-A5CD-2C7C2B52568B}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
+ {E4EB11FF-6FD7-42F5-A5CD-2C7C2B52568B}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
+ {E4EB11FF-6FD7-42F5-A5CD-2C7C2B52568B}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {E4EB11FF-6FD7-42F5-A5CD-2C7C2B52568B}.Debug|x86.Build.0 = Debug|Any CPU
+ {E4EB11FF-6FD7-42F5-A5CD-2C7C2B52568B}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {E4EB11FF-6FD7-42F5-A5CD-2C7C2B52568B}.Release|Any CPU.Build.0 = Release|Any CPU
+ {E4EB11FF-6FD7-42F5-A5CD-2C7C2B52568B}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
+ {E4EB11FF-6FD7-42F5-A5CD-2C7C2B52568B}.Release|Mixed Platforms.Build.0 = Release|Any CPU
+ {E4EB11FF-6FD7-42F5-A5CD-2C7C2B52568B}.Release|x86.ActiveCfg = Release|Any CPU
+ {E4EB11FF-6FD7-42F5-A5CD-2C7C2B52568B}.Release|x86.Build.0 = Release|Any CPU
+ {6C3733DD-C7BD-47C7-BF9A-691A3D0ACCCE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {6C3733DD-C7BD-47C7-BF9A-691A3D0ACCCE}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {6C3733DD-C7BD-47C7-BF9A-691A3D0ACCCE}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
+ {6C3733DD-C7BD-47C7-BF9A-691A3D0ACCCE}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
+ {6C3733DD-C7BD-47C7-BF9A-691A3D0ACCCE}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {6C3733DD-C7BD-47C7-BF9A-691A3D0ACCCE}.Debug|x86.Build.0 = Debug|Any CPU
+ {6C3733DD-C7BD-47C7-BF9A-691A3D0ACCCE}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {6C3733DD-C7BD-47C7-BF9A-691A3D0ACCCE}.Release|Any CPU.Build.0 = Release|Any CPU
+ {6C3733DD-C7BD-47C7-BF9A-691A3D0ACCCE}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
+ {6C3733DD-C7BD-47C7-BF9A-691A3D0ACCCE}.Release|Mixed Platforms.Build.0 = Release|Any CPU
+ {6C3733DD-C7BD-47C7-BF9A-691A3D0ACCCE}.Release|x86.ActiveCfg = Release|Any CPU
+ {6C3733DD-C7BD-47C7-BF9A-691A3D0ACCCE}.Release|x86.Build.0 = Release|Any CPU
+ {21E4EA57-6291-4C58-BFC4-CA8ACF48DB74}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {21E4EA57-6291-4C58-BFC4-CA8ACF48DB74}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {21E4EA57-6291-4C58-BFC4-CA8ACF48DB74}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
+ {21E4EA57-6291-4C58-BFC4-CA8ACF48DB74}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
+ {21E4EA57-6291-4C58-BFC4-CA8ACF48DB74}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {21E4EA57-6291-4C58-BFC4-CA8ACF48DB74}.Debug|x86.Build.0 = Debug|Any CPU
+ {21E4EA57-6291-4C58-BFC4-CA8ACF48DB74}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {21E4EA57-6291-4C58-BFC4-CA8ACF48DB74}.Release|Any CPU.Build.0 = Release|Any CPU
+ {21E4EA57-6291-4C58-BFC4-CA8ACF48DB74}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
+ {21E4EA57-6291-4C58-BFC4-CA8ACF48DB74}.Release|Mixed Platforms.Build.0 = Release|Any CPU
+ {21E4EA57-6291-4C58-BFC4-CA8ACF48DB74}.Release|x86.ActiveCfg = Release|Any CPU
+ {21E4EA57-6291-4C58-BFC4-CA8ACF48DB74}.Release|x86.Build.0 = Release|Any CPU
+ {86843F8B-9B83-4985-9E68-77F9ACF4DA2D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {86843F8B-9B83-4985-9E68-77F9ACF4DA2D}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {86843F8B-9B83-4985-9E68-77F9ACF4DA2D}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
+ {86843F8B-9B83-4985-9E68-77F9ACF4DA2D}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
+ {86843F8B-9B83-4985-9E68-77F9ACF4DA2D}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {86843F8B-9B83-4985-9E68-77F9ACF4DA2D}.Debug|x86.Build.0 = Debug|Any CPU
+ {86843F8B-9B83-4985-9E68-77F9ACF4DA2D}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {86843F8B-9B83-4985-9E68-77F9ACF4DA2D}.Release|Any CPU.Build.0 = Release|Any CPU
+ {86843F8B-9B83-4985-9E68-77F9ACF4DA2D}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
+ {86843F8B-9B83-4985-9E68-77F9ACF4DA2D}.Release|Mixed Platforms.Build.0 = Release|Any CPU
+ {86843F8B-9B83-4985-9E68-77F9ACF4DA2D}.Release|x86.ActiveCfg = Release|Any CPU
+ {86843F8B-9B83-4985-9E68-77F9ACF4DA2D}.Release|x86.Build.0 = Release|Any CPU
{93595D4E-5AE9-4714-AC8B-1FB24D68A15C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{93595D4E-5AE9-4714-AC8B-1FB24D68A15C}.Debug|Any CPU.Build.0 = Debug|Any CPU
{93595D4E-5AE9-4714-AC8B-1FB24D68A15C}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
@@ -107,12 +241,34 @@ Global
{93595D4E-5AE9-4714-AC8B-1FB24D68A15C}.Release|Mixed Platforms.Build.0 = Release|Any CPU
{93595D4E-5AE9-4714-AC8B-1FB24D68A15C}.Release|x86.ActiveCfg = Release|Any CPU
{93595D4E-5AE9-4714-AC8B-1FB24D68A15C}.Release|x86.Build.0 = Release|Any CPU
+ {63B571D9-DA1B-4209-B4E2-59F0AC529E06}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {63B571D9-DA1B-4209-B4E2-59F0AC529E06}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {63B571D9-DA1B-4209-B4E2-59F0AC529E06}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
+ {63B571D9-DA1B-4209-B4E2-59F0AC529E06}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
+ {63B571D9-DA1B-4209-B4E2-59F0AC529E06}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {63B571D9-DA1B-4209-B4E2-59F0AC529E06}.Debug|x86.Build.0 = Debug|Any CPU
+ {63B571D9-DA1B-4209-B4E2-59F0AC529E06}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {63B571D9-DA1B-4209-B4E2-59F0AC529E06}.Release|Any CPU.Build.0 = Release|Any CPU
+ {63B571D9-DA1B-4209-B4E2-59F0AC529E06}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
+ {63B571D9-DA1B-4209-B4E2-59F0AC529E06}.Release|Mixed Platforms.Build.0 = Release|Any CPU
+ {63B571D9-DA1B-4209-B4E2-59F0AC529E06}.Release|x86.ActiveCfg = Release|Any CPU
+ {63B571D9-DA1B-4209-B4E2-59F0AC529E06}.Release|x86.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(NestedProjects) = preSolution
{2B454F8B-D702-4281-80DF-367142007B0C} = {AE631D61-6BE6-438F-A535-955BB9A0218F}
+ {99846126-1D88-42CC-897C-ACEA7C2DBB2B} = {AE631D61-6BE6-438F-A535-955BB9A0218F}
+ {E41419E5-251C-4093-ADDE-77EF694964E3} = {99846126-1D88-42CC-897C-ACEA7C2DBB2B}
+ {99A5B165-A15E-4CE1-B68E-E0992F4478D9} = {99846126-1D88-42CC-897C-ACEA7C2DBB2B}
+ {8BCB1D8B-0233-48C5-B5C6-6E3EDB566D3E} = {99846126-1D88-42CC-897C-ACEA7C2DBB2B}
+ {962D6BAB-A7DE-41BC-9E91-567A6EEE4C18} = {99846126-1D88-42CC-897C-ACEA7C2DBB2B}
+ {E4EB11FF-6FD7-42F5-A5CD-2C7C2B52568B} = {99846126-1D88-42CC-897C-ACEA7C2DBB2B}
+ {6C3733DD-C7BD-47C7-BF9A-691A3D0ACCCE} = {99846126-1D88-42CC-897C-ACEA7C2DBB2B}
+ {21E4EA57-6291-4C58-BFC4-CA8ACF48DB74} = {99846126-1D88-42CC-897C-ACEA7C2DBB2B}
+ {86843F8B-9B83-4985-9E68-77F9ACF4DA2D} = {99846126-1D88-42CC-897C-ACEA7C2DBB2B}
+ {63B571D9-DA1B-4209-B4E2-59F0AC529E06} = {99846126-1D88-42CC-897C-ACEA7C2DBB2B}
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {3DEED27A-6D3F-4F2E-A5D5-1F71648F2413}
diff --git a/eg/SourceGenerator/ArgumentsExample/ArgumentsExample.csproj b/eg/SourceGenerator/ArgumentsExample/ArgumentsExample.csproj
new file mode 100644
index 00000000..ca2efb44
--- /dev/null
+++ b/eg/SourceGenerator/ArgumentsExample/ArgumentsExample.csproj
@@ -0,0 +1,14 @@
+
+
+
+ Exe
+ net5.0
+
+
+
+
+
+
+
+
+
diff --git a/eg/SourceGenerator/ArgumentsExample/Program.cs b/eg/SourceGenerator/ArgumentsExample/Program.cs
new file mode 100644
index 00000000..42849e89
--- /dev/null
+++ b/eg/SourceGenerator/ArgumentsExample/Program.cs
@@ -0,0 +1,36 @@
+using System;
+using DocoptNet.Generated;
+using ArgumentsExample;
+
+ProgramArguments arguments;
+
+try
+{
+ arguments = ProgramArguments.Apply(args);
+}
+catch (DocoptExitException e)
+{
+ Console.WriteLine(e.Message);
+ return e.ErrorCode;
+}
+catch (DocoptInputErrorException e)
+{
+ Console.Error.WriteLine(e);
+ return 0xbd;
+}
+
+foreach (var (name, value) in arguments)
+ Console.WriteLine($"{name} = {value}");
+
+Console.WriteLine($@"{{
+ Help = {arguments.OptHelp },
+ V = {arguments.OptV },
+ Q = {arguments.OptQ },
+ R = {arguments.OptR },
+ Left = {arguments.OptLeft },
+ Right = {arguments.OptRight },
+ Correction = {arguments.ArgCorrection},
+ File = [{string.Join(", ", arguments.ArgFile)}],
+}}");
+
+return 0;
diff --git a/eg/SourceGenerator/ArgumentsExample/Program.docopt.txt b/eg/SourceGenerator/ArgumentsExample/Program.docopt.txt
new file mode 100644
index 00000000..ecdbbaf8
--- /dev/null
+++ b/eg/SourceGenerator/ArgumentsExample/Program.docopt.txt
@@ -0,0 +1,17 @@
+Usage: ArgumentsExample [-vqrh] [FILE] ...
+ ArgumentsExample (--left | --right) CORRECTION FILE
+
+Process FILE and optionally apply correction to either left-hand side or
+right-hand side.
+
+Arguments:
+ FILE optional input file
+ CORRECTION correction angle, needs FILE, --left or --right to be present
+
+Options:
+ -h --help
+ -v verbose mode
+ -q quiet mode
+ -r make report
+ --left use left-hand side
+ --right use right-hand side
diff --git a/eg/SourceGenerator/CalculatorExample/CalculatorExample.csproj b/eg/SourceGenerator/CalculatorExample/CalculatorExample.csproj
new file mode 100644
index 00000000..ca2efb44
--- /dev/null
+++ b/eg/SourceGenerator/CalculatorExample/CalculatorExample.csproj
@@ -0,0 +1,14 @@
+
+
+
+ Exe
+ net5.0
+
+
+
+
+
+
+
+
+
diff --git a/eg/SourceGenerator/CalculatorExample/Program.cs b/eg/SourceGenerator/CalculatorExample/Program.cs
new file mode 100644
index 00000000..a0d7ef17
--- /dev/null
+++ b/eg/SourceGenerator/CalculatorExample/Program.cs
@@ -0,0 +1,36 @@
+using System;
+using DocoptNet.Generated;
+using CalculatorExample;
+
+ProgramArguments arguments;
+
+try
+{
+ arguments = ProgramArguments.Apply(args);
+}
+catch (DocoptExitException e)
+{
+ Console.WriteLine(e.Message);
+ return e.ErrorCode;
+}
+catch (DocoptInputErrorException e)
+{
+ Console.Error.WriteLine(e);
+ return 0xbd;
+}
+
+foreach (var (name, value) in arguments)
+ Console.WriteLine($"{name} = {value}");
+
+Console.WriteLine($@"{{
+ Help = {arguments.OptHelp },
+ + = {arguments.CmdPlus },
+ - = {arguments.CmdMinus },
+ * = {arguments.CmdStar },
+ / = {arguments.CmdSlash },
+ Function = {arguments.ArgFunction},
+ Comma = {arguments.CmdComma },
+ Value = [{string.Join(", ", arguments.ArgValue)}],
+}}");
+
+return 0;
diff --git a/eg/SourceGenerator/CalculatorExample/Program.docopt.txt b/eg/SourceGenerator/CalculatorExample/Program.docopt.txt
new file mode 100644
index 00000000..1b4c5281
--- /dev/null
+++ b/eg/SourceGenerator/CalculatorExample/Program.docopt.txt
@@ -0,0 +1,14 @@
+Not a serious example.
+
+Usage:
+ calculator_example.py ( ( + | - | * | / ) )...
+ calculator_example.py [( , )]...
+ calculator_example.py (-h | --help)
+
+Examples:
+ calculator_example.py 1 + 2 + 3 + 4 + 5
+ calculator_example.py 1 + 2 '*' 3 / 4 - 5 # note quotes around '*'
+ calculator_example.py sum 10 , 20 , 30 , 40
+
+Options:
+ -h, --help
diff --git a/eg/SourceGenerator/CountedExample/CountedExample.csproj b/eg/SourceGenerator/CountedExample/CountedExample.csproj
new file mode 100644
index 00000000..ca2efb44
--- /dev/null
+++ b/eg/SourceGenerator/CountedExample/CountedExample.csproj
@@ -0,0 +1,14 @@
+
+
+
+ Exe
+ net5.0
+
+
+
+
+
+
+
+
+
diff --git a/eg/SourceGenerator/CountedExample/Program.cs b/eg/SourceGenerator/CountedExample/Program.cs
new file mode 100644
index 00000000..2240c565
--- /dev/null
+++ b/eg/SourceGenerator/CountedExample/Program.cs
@@ -0,0 +1,33 @@
+using System;
+using DocoptNet.Generated;
+using CountedExample;
+
+ProgramArguments arguments;
+
+try
+{
+ arguments = ProgramArguments.Apply(args);
+}
+catch (DocoptExitException e)
+{
+ Console.WriteLine(e.Message);
+ return e.ErrorCode;
+}
+catch (DocoptInputErrorException e)
+{
+ Console.Error.WriteLine(e);
+ return 0xbd;
+}
+
+foreach (var (name, value) in arguments)
+ Console.WriteLine($"{name} = {value}");
+
+Console.WriteLine($@"{{
+ Help = {arguments.OptHelp },
+ V = {arguments.OptV },
+ Go = {arguments.CmdGo },
+ File = [{string.Join(", ", arguments.ArgFile)}],
+ Path = {arguments.OptPath },
+}}");
+
+return 0;
diff --git a/eg/SourceGenerator/CountedExample/Program.docopt.txt b/eg/SourceGenerator/CountedExample/Program.docopt.txt
new file mode 100644
index 00000000..4f829264
--- /dev/null
+++ b/eg/SourceGenerator/CountedExample/Program.docopt.txt
@@ -0,0 +1,10 @@
+Usage: CountedExample --help
+ CountedExample -v...
+ CountedExample go [go]
+ CountedExample (--path=)...
+ CountedExample
+
+Try: CountedExample -vvvvvvvvvv
+ CountedExample go go
+ CountedExample --path ./here --path ./there
+ CountedExample this.txt that.txt
diff --git a/eg/SourceGenerator/Directory.Build.props b/eg/SourceGenerator/Directory.Build.props
new file mode 100644
index 00000000..581ec552
--- /dev/null
+++ b/eg/SourceGenerator/Directory.Build.props
@@ -0,0 +1,10 @@
+
+
+
+
+
+ true
+ false
+
+
+
diff --git a/eg/SourceGenerator/Directory.Build.targets b/eg/SourceGenerator/Directory.Build.targets
new file mode 100644
index 00000000..06c305d3
--- /dev/null
+++ b/eg/SourceGenerator/Directory.Build.targets
@@ -0,0 +1,7 @@
+
+
+
+ $(BaseIntermediateOutputPath)Generated
+
+
+
diff --git a/eg/SourceGenerator/Git/Git.csproj b/eg/SourceGenerator/Git/Git.csproj
new file mode 100644
index 00000000..fc3f4133
--- /dev/null
+++ b/eg/SourceGenerator/Git/Git.csproj
@@ -0,0 +1,23 @@
+
+
+
+ Exe
+ net5.0
+ true
+ $(BaseIntermediateOutputPath)Generated
+ false
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/eg/SourceGenerator/Git/Git.docopt.txt b/eg/SourceGenerator/Git/Git.docopt.txt
new file mode 100644
index 00000000..7895b0dc
--- /dev/null
+++ b/eg/SourceGenerator/Git/Git.docopt.txt
@@ -0,0 +1,21 @@
+usage: git [--version] [--exec-path=] [--html-path]
+ [-p|--paginate|--no-pager] [--no-replace-objects]
+ [--bare] [--git-dir=] [--work-tree=]
+ [-c =] [--help]
+ [...]
+
+options:
+ -c
+ -h, --help
+ -p, --paginate
+
+The most commonly used git commands are:
+ add Add file contents to the index
+ branch List, create, or delete branches
+ checkout Checkout a branch or paths to the working tree
+ clone Clone a repository into a new directory
+ commit Record changes to the repository
+ push Update remote refs along with associated objects
+ remote Manage set of tracked repositories
+
+See 'git help ' for more information on a specific command.
diff --git a/eg/SourceGenerator/Git/GitAdd.docopt.txt b/eg/SourceGenerator/Git/GitAdd.docopt.txt
new file mode 100644
index 00000000..96fb4d6a
--- /dev/null
+++ b/eg/SourceGenerator/Git/GitAdd.docopt.txt
@@ -0,0 +1,16 @@
+usage: git add [options] [--] [...]
+
+ -h, --help
+ -n, --dry-run dry run
+ -v, --verbose be verbose
+
+ -i, --interactive interactive picking
+ -p, --patch select hunks interactively
+ -e, --edit edit current diff and apply
+ -f, --force allow adding otherwise ignored files
+ -u, --update update tracked files
+ -N, --intent-to-add record only the fact that the path will be added later
+ -A, --all add all, noticing removal of tracked files
+ --refresh don't add, only refresh the index
+ --ignore-errors just skip files which cannot be added because of errors
+ --ignore-missing check if - even missing - files are ignored in dry run
diff --git a/eg/SourceGenerator/Git/GitBranch.docopt.txt b/eg/SourceGenerator/Git/GitBranch.docopt.txt
new file mode 100644
index 00000000..811e56c2
--- /dev/null
+++ b/eg/SourceGenerator/Git/GitBranch.docopt.txt
@@ -0,0 +1,25 @@
+usage: git branch [options] [-r | -a] [--merged= | --no-merged=]
+ git branch [options] [-l] [-f] []
+ git branch [options] [-r] (-d | -D)
+ git branch [options] (-m | -M) []
+
+Generic options
+ -h, --help
+ -v, --verbose show hash and subject, give twice for upstream branch
+ -t, --track set up tracking mode (see git-pull(1))
+ --set-upstream change upstream info
+ --color= use colored output
+ -r act on remote-tracking branches
+ --contains= print only branches that contain the commit
+ --abbrev= use digits to display SHA-1s
+
+Specific git-branch actions:
+ -a list both remote-tracking and local branches
+ -d delete fully merged branch
+ -D delete branch (even if not merged)
+ -m move/rename a branch and its reflog
+ -M move/rename a branch, even if target exists
+ -l create the branch's reflog
+ -f, --force force creation (when already exists)
+ --no-merged= print only not merged branches
+ --merged= print only merged branches
diff --git a/eg/SourceGenerator/Git/GitCheckout.docopt.txt b/eg/SourceGenerator/Git/GitCheckout.docopt.txt
new file mode 100644
index 00000000..1e9fad2b
--- /dev/null
+++ b/eg/SourceGenerator/Git/GitCheckout.docopt.txt
@@ -0,0 +1,15 @@
+usage: git checkout [options]
+ git checkout [options] -- ...
+ -q, --quiet suppress progress reporting
+ -b create and checkout a new branch
+ -B create/reset and checkout a branch
+ -l create reflog for new branch
+ -t, --track set upstream info for new branch
+ --orphan
+ new unparented branch
+ -2, --ours checkout our version for unmerged files
+ -3, --theirs checkout their version for unmerged files
+ -f, --force force checkout (throw away local modifications)
+ -m, --merge perform a 3-way merge with the new branch
+ --conflict