< Summary

Information
Class: EHonda.KicktippAi.Core.SolutionPathUtility
Assembly: EHonda.KicktippAi.Core
File(s): /home/runner/work/KicktippAi/KicktippAi/src/Core/SolutionPathUtility.cs
Line coverage
100%
Covered lines: 11
Uncovered lines: 0
Coverable lines: 11
Total lines: 45
Line coverage: 100%
Branch coverage
100%
Covered branches: 4
Total branches: 4
Branch coverage: 100%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
FindSolutionRoot()100%44100%
FindDirectoryUnderSolutionRoot(...)100%11100%

File(s)

/home/runner/work/KicktippAi/KicktippAi/src/Core/SolutionPathUtility.cs

#LineLine coverage
 1namespace EHonda.KicktippAi.Core;
 2
 3/// <summary>
 4/// Utility class for finding paths relative to the solution root
 5/// </summary>
 6public static class SolutionPathUtility
 7{
 8    private const string SolutionFileName = "KicktippAi.slnx";
 9
 10    /// <summary>
 11    /// Finds the solution root directory by looking for KicktippAi.slnx in parent directories.
 12    /// </summary>
 13    /// <returns>The path to the solution root directory.</returns>
 14    /// <exception cref="DirectoryNotFoundException">Thrown when the solution root cannot be found.</exception>
 15    public static string FindSolutionRoot()
 16    {
 117        var currentDirectory = Directory.GetCurrentDirectory();
 118        var directory = new DirectoryInfo(currentDirectory);
 19
 120        while (directory != null)
 21        {
 122            var solutionFile = Path.Combine(directory.FullName, SolutionFileName);
 123            if (File.Exists(solutionFile))
 24            {
 125                return directory.FullName;
 26            }
 127            directory = directory.Parent;
 28        }
 29
 130        throw new DirectoryNotFoundException(
 131            $"Could not find solution root ({SolutionFileName}) starting from: {currentDirectory}");
 32    }
 33
 34    /// <summary>
 35    /// Finds a directory under the solution root.
 36    /// </summary>
 37    /// <param name="relativePath">The relative path from the solution root (e.g., "prompts", "community-rules").</param
 38    /// <returns>The absolute path to the directory.</returns>
 39    /// <exception cref="DirectoryNotFoundException">Thrown when the solution root cannot be found.</exception>
 40    public static string FindDirectoryUnderSolutionRoot(string relativePath)
 41    {
 142        var solutionRoot = FindSolutionRoot();
 143        return Path.Combine(solutionRoot, relativePath);
 44    }
 45}