|
| 1 | +# Copilot Instructions for Ionide.ProjInfo |
| 2 | + |
| 3 | +## Project Overview |
| 4 | +- **Ionide.ProjInfo** is a set of F# libraries and tools for parsing and evaluating `.fsproj` and `.sln` files, used by F# tooling (e.g., Ionide, FSAC, Fable, FSharpLint). |
| 5 | +- Major components: |
| 6 | + - `Ionide.ProjInfo`: Core project/solution parsing logic (uses Microsoft.Build APIs). |
| 7 | + - `Ionide.ProjInfo.FCS`: Maps project data to FSharp.Compiler.Service types. |
| 8 | + - `Ionide.ProjInfo.ProjectSystem`: High-level project system for editor tooling (change tracking, notifications, caching). |
| 9 | + - `Ionide.ProjInfo.Tool`: CLI for debugging project cracking. |
| 10 | + |
| 11 | +## Build & Test Workflows |
| 12 | +- **Restore tools:** `dotnet tool restore` |
| 13 | +- **Build solution:** `dotnet build ionide-proj-info.sln` |
| 14 | +- **Run all tests:** `dotnet run --project build -- Test` |
| 15 | +- **Multi-TFM testing:** |
| 16 | + - For specific TFM: |
| 17 | + - LTS (net8.0) `dotnet run --project build -- Test:net8.0` |
| 18 | + - STS (net9.0) `dotnet run --project build -- Test:net9.0` |
| 19 | + |
| 20 | +- **Test assets:** Test projects in `test/examples/` cover a wide range of real-world project structures (multi-TFM, C#/F#, old/new SDK, solution filters, etc.). |
| 21 | + |
| 22 | +## Key Patterns & Conventions |
| 23 | +- **Project loading:** Prefer using the MSBuild loader; use `--graph` for graph-based loading in CLI tool. |
| 24 | +- **Output formats:** CLI tool supports structured text, FCS options (`--fcs`), or JSON (`--serialize`). |
| 25 | +- **Cross-language:** Handles both F# and C# projects/references. |
| 26 | +- **Persistent caching:** ProjectSystem caches data for fast reloads. |
| 27 | +- **Testing:** Uses Expecto for tests; see `test/Ionide.ProjInfo.Tests/` for patterns. |
| 28 | +- **Release process:** Update `CHANGELOG.md`, tag, and push (see `CONTRIBUTING.md`). |
| 29 | + |
| 30 | +## Integration Points |
| 31 | +- Consumed by Fable, FSAC, Ionide, FSharpLint, and F# Formatting. |
| 32 | +- External dependencies: Microsoft.Build, FSharp.Compiler.Service (FCS). |
| 33 | +- Nightly builds may require custom NuGet feeds (see `CONTRIBUTING.md`). |
| 34 | + |
| 35 | +## Where to Look |
| 36 | +- **Architecture:** See `README.md` (root), `src/` for main libraries, `test/examples/` for project scenarios. |
| 37 | +- **Developer workflow:** `CONTRIBUTING.md` for build/test/release details. |
| 38 | +- **Tool usage:** `src/Ionide.ProjInfo.Tool/README.md` and `Program.fs`. |
| 39 | +- **Test patterns:** `test/Ionide.ProjInfo.Tests/` and helpers in `FileUtils.fs`. |
| 40 | + |
| 41 | +## Code of Conduct |
| 42 | +- See `CODE_OF_CONDUCT.md` for community standards. |
| 43 | + |
| 44 | +--- |
| 45 | +For more, see https://github.com/ionide/dotnet-proj-info and linked docs. |
| 46 | + |
| 47 | + |
| 48 | +### MCP Tools |
| 49 | + |
| 50 | +> [!IMPORTANT] |
| 51 | +
|
| 52 | +You have access to a long-term memory system via the Model Context Protocol (MCP) at the endpoint `memorizer`. Use the following tools: |
| 53 | +- `store`: Store a new memory. Parameters: `type`, `content` (markdown), `source`, `tags`, `confidence`, `relatedTo` (optional, memory ID), `relationshipType` (optional). |
| 54 | +- `search`: Search for similar memories. Parameters: `query`, `limit`, `minSimilarity`, `filterTags`. |
| 55 | +- `get`: Retrieve a memory by ID. Parameter: `id`. |
| 56 | +- `getMany`: Retrieve multiple memories by their IDs. Parameter: `ids` (list of IDs). |
| 57 | +- `delete`: Delete a memory by ID. Parameter: `id`. |
| 58 | +- `createRelationship`: Create a relationship between two memories. Parameters: `fromId`, `toId`, `type`. |
| 59 | +Use these tools to remember, recall, relate, and manage information as needed to assist the user. You can also manually retrieve or relate memories by their IDs when necessary. |
0 commit comments