Skip to content

Commit 3943810

Browse files
committed
Use relative paths to resolve single-experiment labs
1 parent a3e0c86 commit 3943810

File tree

4 files changed

+34
-20
lines changed

4 files changed

+34
-20
lines changed

common/CommunityToolkit.Labs.Core.SourceGenerators/ToolkitSampleMetadataGenerator.Sample.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -121,7 +121,7 @@ void Execute(IncrementalValuesProvider<ISymbol> types, bool skipDiagnostics = fa
121121
);
122122

123123
var docFrontMatter = GatherDocumentFrontMatter(ctx, markdownFileData);
124-
124+
125125
if (isExecutingInSampleProject && !skipDiagnostics)
126126
{
127127
ReportSampleDiagnostics(ctx, toolkitSampleAttributeData, optionsPaneAttribute, generatedOptionPropertyData);

common/CommunityToolkit.Labs.Shared/Renderers/ToolkitDocumentationRenderer.xaml.cs

Lines changed: 25 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -153,7 +153,31 @@ private void SampleListHyperlink_Click(object sender, RoutedEventArgs e)
153153

154154
private static async Task<string> GetDocumentationFileContents(ToolkitFrontMatter metadata)
155155
{
156-
var fileUri = new Uri($"ms-appx:///SourceAssets/{metadata.FilePath}");
156+
// MSBuild uses wildcard to find the files, and the wildcards decide where they end up
157+
// Single experiments use relative paths, the allExperiment head uses absolute paths that grab from all experiments
158+
// The wildcard captures decide the paths. This discrepency is accounted for manually.
159+
// Logic here is the exact same that MSBuild uses to find and include the files we need.
160+
var assemblyName = typeof(ToolkitSampleRenderer).Assembly.GetName().Name;
161+
if (string.IsNullOrWhiteSpace(assemblyName))
162+
throw new InvalidOperationException();
163+
164+
var isAllExperimentHead = assemblyName.StartsWith("CommunityToolkit.Labs.", StringComparison.OrdinalIgnoreCase);
165+
var isProjectTemplateHead = assemblyName.StartsWith("ProjectTemplate");
166+
var isSingleExperimentHead = !isAllExperimentHead && !isProjectTemplateHead;
167+
168+
if (metadata.FilePath is null || string.IsNullOrWhiteSpace(metadata.FilePath))
169+
throw new InvalidOperationException("Missing or malformed path to markdown file. Unable to continue;");
170+
171+
var path = metadata.FilePath;
172+
173+
if (isSingleExperimentHead || isProjectTemplateHead)
174+
{
175+
var experimentName = assemblyName.Split(".")[0];
176+
path = path.Split($"\\{experimentName}.Sample")[1];
177+
path = $"{experimentName}.Sample{path}";
178+
}
179+
180+
var fileUri = new Uri($"ms-appx:///SourceAssets/{path}");
157181

158182
try
159183
{

common/CommunityToolkit.Labs.Shared/Renderers/ToolkitSampleRenderer.xaml.cs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,6 @@ public UIElement? SampleControlInstance
8989
set => SetValue(SampleControlInstanceProperty, value);
9090
}
9191

92-
9392
/// <summary>
9493
/// The options pane for the sample being displayed.
9594
/// </summary>
@@ -203,9 +202,12 @@ private static string GetRelativePathToFileWithoutExtension(Type type)
203202
{
204203
// MSBuild uses wildcard to find the files, and the wildcards decide where they end up
205204
// Single experiments use relative paths, the allExperiment head uses absolute paths that grab from all experiments
206-
// The discrepency is accounted for manually.
205+
// The wildcard captures decide the paths. This discrepency is accounted for manually.
207206
// Logic here is the exact same that MSBuild uses to find and include the files we need.
208207
var assemblyName = typeof(ToolkitSampleRenderer).Assembly.GetName().Name;
208+
if (string.IsNullOrWhiteSpace(assemblyName))
209+
throw new InvalidOperationException();
210+
209211
var isAllExperimentHead = assemblyName.StartsWith("CommunityToolkit.Labs.", StringComparison.OrdinalIgnoreCase);
210212
var isProjectTemplateHead = assemblyName.StartsWith("ProjectTemplate");
211213
var isSingleExperimentHead = !isAllExperimentHead && !isProjectTemplateHead;

common/Labs.Head.props

Lines changed: 4 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -25,10 +25,10 @@
2525
<PropertyGroup>
2626
<IsAllExperimentHead Condition="$(MSBuildProjectName.StartsWith('CommunityToolkit.Labs.')) == 'true'">true</IsAllExperimentHead>
2727
<IsProjectTemplateHead Condition="$(MSBuildProjectName.StartsWith('ProjectTemplate')) == 'true'">true</IsProjectTemplateHead>
28-
<IsSingleExperimentHead Condition="$(IsAllExperimentHead) == 'false' AND $(IsProjectTemplateHead) == 'false'">true</IsSingleExperimentHead>
28+
<IsSingleExperimentHead Condition="'$(IsAllExperimentHead)' != 'true' AND '$(IsProjectTemplateHead)' != 'true'">true</IsSingleExperimentHead>
2929
</PropertyGroup>
3030

31-
<ItemGroup Condition="$(IsAllExperimentHead) == 'true'">
31+
<ItemGroup Condition="'$(IsAllExperimentHead)' == 'true'">
3232
<!-- These are also included in Labs.Samples.props, but added here to workaround https://github.com/unoplatform/uno/issues/2502 -->
3333
<Content Include="$(RepositoryDirectory)labs\**\samples\*.Sample\**\*.md" Exclude="$(RepositoryDirectory)**\**\samples\*.Sample\obj\**\*.md;$(RepositoryDirectory)**\**\samples\*.Sample\bin\**\*.md;$(RepositoryDirectory)\**\SourceAssets\**\*.md" Link="SourceAssets/%(RecursiveDir)%(FileName)%(Extension)"/>
3434
<Content Include="$(RepositoryDirectory)labs\**\samples\*.Sample\**\*.xaml" Exclude="$(RepositoryDirectory)**\**\samples\*.Sample\obj\**\*.xaml;$(RepositoryDirectory)**\**\samples\*.Sample\bin\**\*.xaml;$(RepositoryDirectory)\**\SourceAssets\**\*.xaml" Link="SourceAssets/%(RecursiveDir)%(FileName)%(Extension)"/>
@@ -40,7 +40,7 @@
4040
<AdditionalFiles Include="$(RepositoryDirectory)labs\**\samples\*.Sample\**\*.md" Exclude="$(RepositoryDirectory)**\**\samples\**\obj\**\*.md;$(RepositoryDirectory)**\**\samples\**\bin\**\*.md"/>
4141
</ItemGroup>
4242

43-
<ItemGroup Condition="$(IsSingleExperimentHead) == 'true'">
43+
<ItemGroup Condition="'$(IsSingleExperimentHead)' == 'true' or '$(IsProjectTemplateHead)' == 'true'">
4444
<!-- These are also included in Labs.Samples.props, but added here to workaround https://github.com/unoplatform/uno/issues/2502 -->
4545
<Content Include="..\*.Sample\**\*.md" Exclude="..\*.Sample\obj\**\*.md;..\*.Sample\bin\**\*.md;..\**\SourceAssets\**\*.md" Link="SourceAssets/%(RecursiveDir)%(FileName)%(Extension)"/>
4646
<Content Include="..\*.Sample\**\*.xaml" Exclude="..\*.Sample\obj\**\*.xaml;..\*.Sample\bin\**\*.xaml;..\**\SourceAssets\**\*.xaml" Link="SourceAssets/%(RecursiveDir)%(FileName)%(Extension)"/>
@@ -49,19 +49,7 @@
4949
<Content Include="..\*.Sample\**\*.cs" Exclude="..\*.Sample\obj\**\*.cs;..\*.Sample\bin\**\*.cs" Link="SourceAssets/%(RecursiveDir)%(FileName)%(Extension).dat" />
5050

5151
<!-- Include markdown files from all samples so the head can access them in the source generator -->
52-
<AdditionalFiles Include="..\*.Sample\**\*.md" Exclude="..\**\obj\**\*.md;..\**\bin\**\*.md"/>
53-
</ItemGroup>
54-
55-
<ItemGroup Condition="$(IsProjectTemplateHead) == 'true'">
56-
<!-- These are also included in Labs.Samples.props, but added here to workaround https://github.com/unoplatform/uno/issues/2502 -->
57-
<Content Include="$(RepositoryDirectory)template\**\samples\*.Sample\**\*.md" Exclude="$(RepositoryDirectory)**\**\samples\*.Sample\obj\**\*.md;$(RepositoryDirectory)**\**\samples\*.Sample\bin\**\*.md;$(RepositoryDirectory)\**\SourceAssets\**\*.md" Link="SourceAssets/%(RecursiveDir)%(FileName)%(Extension)"/>
58-
<Content Include="$(RepositoryDirectory)template\**\samples\*.Sample\**\*.xaml" Exclude="$(RepositoryDirectory)**\**\samples\*.Sample\obj\**\*.xaml;$(RepositoryDirectory)**\**\samples\*.Sample\bin\**\*.xaml;$(RepositoryDirectory)\**\SourceAssets\**\*.xaml" Link="SourceAssets/%(RecursiveDir)%(FileName)%(Extension)"/>
59-
60-
<!-- Link/.dat is a workaround for https://github.com/unoplatform/uno/issues/8649 -->
61-
<Content Include="$(RepositoryDirectory)template\**\samples\*.Sample\**\*.cs" Exclude="$(RepositoryDirectory)**\**\samples\*.Sample\obj\**\*.cs;$(RepositoryDirectory)**\**\samples\*.Sample\bin\**\*.cs" Link="SourceAssets/%(RecursiveDir)%(FileName)%(Extension).dat" />
62-
63-
<!-- Include markdown files from al lsamples so the head can access them in the source generator -->
64-
<AdditionalFiles Include="$(RepositoryDirectory)template\**\samples\*.Sample\**\*.md" Exclude="$(RepositoryDirectory)**\**\samples\*.Sample\obj\**\*.md;$(RepositoryDirectory)**\**\samples\*.Sample\bin\**\*.md"/>
52+
<AdditionalFiles Include="$(MSBuildProjectDirectory)\..\*.Sample\**\*.md" Exclude="$(MSBuildProjectDirectory)\..\**\obj\**\*.md;$(MSBuildProjectDirectory)\..\**\bin\**\*.md"/>
6553
</ItemGroup>
6654

6755
<PropertyGroup>

0 commit comments

Comments
 (0)