Contribuir a Vali-Flow
Este documento es para contribuidores que trabajan en los paquetes de Vali-Flow: agregando características, corrigiendo bugs, escribiendo tests o mejorando la documentación.
Layout del repositorio
loading...Vali-Flow.Core se mantiene en un repositorio separado. Los cambios a Core se hacen allí; los cambios a los evaluadores y traductores se hacen aquí.
Requisitos previos
- .NET 8 SDK o .NET 9 SDK
- Rider o Visual Studio (o VS Code con C# DevKit)
Vali-Flow.Coreclonado en/Users/feliperafaelmontenegro/RiderProjects/Vali-Flow.Core(la ruta delProjectReferencelocal)
Build
# Build completo de la solución
dotnet build
# Build en Release (usado antes de empaquetar)
dotnet build --configuration Release
Ejecutar tests
# Todos los proyectos de test
dotnet test
# Proyecto específico
dotnet test Vali-Flow.Sql.Tests/
# Con verbosidad
dotnet test --logger "console;verbosity=detailed"
Los proyectos de test usan xUnit y FluentAssertions.
Empaquetar un paquete NuGet
dotnet pack Vali-Flow/Vali-Flow.csproj --configuration Release
dotnet pack Vali-Flow.InMemory/Vali-Flow.InMemory.csproj --configuration Release
dotnet pack Vali-Flow.Sql/Vali-Flow.Sql.csproj --configuration Release
Los archivos .nupkg se generan en <proyecto>/bin/Release/.
Agregar un nuevo método a ValiFlow<T> (Core)
Los nuevos métodos de filtro (p.ej., un nuevo operador de cadenas) van en Vali-Flow.Core. El proceso:
- Agregar el nuevo nodo IR a
Vali-Flow.Core/IR/(si se necesita un nuevo tipo de nodo). - Agregar el método fluido a
ValiFlow<T>que crea el nodo. - Actualizar
ExpressionToIRVisitorenVali-Flow.NoSqlpara manejar el nuevo nodo. - Actualizar el traductor de cada adaptador NoSQL para emitir la consulta nativa correspondiente.
- Actualizar el
ExpressionToSqlVisitorde SQL para emitir el fragmento SQL. - Agregar tests en todos los proyectos de test afectados.
- Actualizar la documentación en
docs/en/ydocs/es/.
Agregar un nuevo dialecto SQL
- Crear una clase que implemente
ISqlDialectenVali-Flow.Sql/Dialects/. - Implementar:
QuoteIdentifier(string name)— retornar la forma entre comillas específica del dialecto.ParameterPrefix— retornar"@",":", etc.CaseInsensitiveLike— retornar el operador o función para LIKE insensible a mayúsculas.
- Agregar tests en
Vali-Flow.Sql.Tests/. - Documentar en
docs/adapters/sql/*(y su equivalente eni18n/es/.../adapters/sql/*).
Agregar un nuevo adaptador NoSQL
- Crear un nuevo proyecto
Vali-Flow.NoSql.<Tecnología>/. - Referenciar
Vali-Flow.NoSql(para la base IR) y el cliente NuGet oficial de la tecnología. - Implementar un
<Tecnología>FilterTranslatorque recorraIRNodey emita la consulta nativa. - Exponer un método de extensión en
ValiFlow<T>y enExpression<Func<T, bool>>. - Agregar un proyecto de test
Vali-Flow.NoSql.<Tecnología>.Tests/. - Agregar documentación en
docs/en/ydocs/es/.
Documentación
La documentación vive en docs/en/ (inglés) y docs/es/ (español). Ambos idiomas deben mantenerse sincronizados.
- Los docs de referencia de cada paquete viven en
docs/{idioma}/vali-flow-<paquete>.md. - Las guías viven en
docs/{idioma}/guides/. - Los docs de arquitectura viven en
docs/{idioma}/architecture/. - Los docs internos de contribuidores viven en
docs/{idioma}/internal/.
Cuando agregues o cambies una característica, actualiza los docs en en/ y es/ en el mismo commit.
Benchmarks
Vali-Flow.Benchmarks usa BenchmarkDotNet. Ejecuta los benchmarks en modo Release:
cd Vali-Flow.Benchmarks
dotnet run --configuration Release
Los resultados se generan en BenchmarkDotNet.Artifacts/. No commitear los resultados de benchmarks.
Estilo de commits
- Usar commits convencionales:
feat:,fix:,refactor:,test:,docs:,chore:. - Mantener los commits enfocados: un cambio lógico por commit.
- Referenciar números de issue en el cuerpo del commit cuando aplique.
Gestión de la versión de Core
El ProjectReference local a Core debe mantenerse consistente en todos los archivos .csproj. Cuando Core se publique en NuGet:
- Reemplazar cada
<ProjectReference Include="...Vali-Flow.Core.csproj" />con:<PackageReference Include="Vali-Flow.Core" Version="2.6.0" /> - Verificar que todos los proyectos compilen y que todos los tests pasen.
- Incrementar la versión de cada paquete que cambie.