Coder Social home page Coder Social logo

ievangelist / pathological.globbing Goto Github PK

View Code? Open in Web Editor NEW
6.0 2.0 1.0 103 KB

.NET globbing library—built atop Microsoft.Extensions.FileSystemGlobbing.

License: MIT License

C# 100.00%
csharp dotnet glob globbing globbing-library file-system-globbing globber

pathological.globbing's Introduction

Pathological: Globbing

.NET: Build & Test Nuget: Pathological.Globbing License C# IEvangelist followers GitHub Sponsors

Welcome to the Pathological Globbing library. This library is a wrapper around the Microsoft.Extensions.FileSystemGlobbing NuGet package, which provides a fast, efficient, and cross-platform globbing functionality for .NET.

This library strives to simplify globbing by exposing a Glob type, which provides an approachable API for matching file paths against globbing patterns.

📦 Install

To install the Pathological.Globbing NuGet package, run the following command:

dotnet add package Pathological.Globbing

Alternatively, you can install the Pathological.Globbing NuGet package from the package manager in Visual Studio.

*️⃣ Usage

To use the Pathological.Globbing library, you must first create a Glob instance. The Glob instance is the entry point to the library, and provides a number of methods for matching file paths against globbing patterns.

using Pathological.Globbing;

var glob = new Glob();

// All js files, but don't look in node_modules
var files = glob.GetMatches("**/*.js", "node_modules/**");

foreach (var filePath in files)
{
    // Use file...
}

Note

There are various extensions methods that expose, in addition to a string representing the fully qualified file path of the matched file, a GlobMatch instance. The GlobMatch instance provides additional information about the matched file, it can also be used to easily convert to a FileInfo type as well.

📂 Streaming API

To use the streaming API, call any of the available IAsyncEnumerable<T> returning extension methods.

using Pathological.Globbing;

var glob = new Glob(basePath: "../");

// All js files, but don't look in node_modules
var files = glob.GetMatchesAsync("**/*.js", "node_modules/**");

await foreach (var file in files)
{
    // Use file...
}

Important

All streaming APIs support CancellationToken for signaling a manual cancellation, or TimeSpan for signaling cancellation after a certain amount of time.

☑️ Builder-pattern fluent API

To use the builder-pattern fluent API, create a new GlobOptionsBuilder instance, and chain any available With* method. When you're done, call Build which validates the options, and returns a GlobOptions instance. The GlobOptions instance can be used to execute the globbing operation.

using Pathological.Globbing;
using Pathological.Globbing.Options;

// Build glob options.
var builder = new GlobOptionsBuilder()
    .WithBasePath("../../")
    .WithCaseInsensitive(isCaseInsensitive: true)
    .WithPattern("**/*.cs")
    .WithIgnorePatterns(["**/bin/**", "**/obj/**"]);

// Build the globbing options.
var options = builder.Build();

// Get matching file infos.
var files = glob.GetMatchingFileInfos();

foreach (var fileInfo in files)
{
    // Use fileInfo...
}

// Alternatively, execute the globbing operation, evaluating results.
var result = options.ExecuteEvaluation();

_ = result.HasMatches;  // true
_ = result.Matches;     // IEnumerable<GlobMatch>

🔥 File-system globbing

This library relies on the Microsoft.Extensions.FileSystemGlobbing NuGet package for file-system globbing.

All of the following patterns are supported:

  • Exact directory or file name

    • some-file.txt
    • path/to/file.txt
  • Wildcards * in file and directory names that represent zero to many characters not including separator characters.

    Value Description
    *.txt All files with .txt file extension.
    *.* All files with an extension.
    * All files in top-level directory.
    .* File names beginning with '.'.
    *word* All files with 'word' in the filename.
    readme.* All files named 'readme' with any file extension.
    styles/*.css All files with extension '.css' in the directory 'styles/'.
    scripts/*/* All files in 'scripts/' or one level of subdirectory under 'scripts/'.
    images*/* All files in a folder with name that is or begins with 'images'.
  • Arbitrary directory depth (/**/).

    Value Description
    **/* All files in any subdirectory.
    dir/ All files in any subdirectory under 'dir/'.
    dir/**/* All files in any subdirectory under 'dir/'.

For more information, see File globbing in .NET: Pattern formats.

pathological.globbing's People

Contributors

ievangelist avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar

Forkers

dickbaker

pathological.globbing's Issues

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.