Files
GSL/.github/copilot-instructions.md
T
Carson Radtke c21970972b copilot: Provide more project context for the Copilot coding agent (#1207)
* copilot: create .github/copilot-instructions.md

This file provides additional context and instructions to GitHub
Copilot so it can better understand the codebase and coding conventions.

More can be found about this file at the following links:
 - [Best practices for using Copilot to work on tasks](https://docs.github.com/en/enterprise-cloud@latest/copilot/using-github-copilot/using-copilot-coding-agent-to-work-on-tasks/best-practices-for-using-copilot-to-work-on-taskshttps://docs.github.com/en/enterprise-cloud@latest/copilot/using-github-copilot/using-copilot-coding-agent-to-work-on-tasks/best-practices-for-using-copilot-to-work-on-tasks)
 - [Adding repository custom instructions for GitHub Copilot](https://docs.github.com/en/enterprise-cloud@latest/copilot/customizing-copilot/adding-repository-custom-instructions-for-github-copilot?tool=webuihttps://docs.github.com/en/enterprise-cloud@latest/copilot/customizing-copilot/adding-repository-custom-instructions-for-github-copilot)

* copilot: add copilot-setup-steps.yml

This new workflow is done when copilot loads into an environment and
enables copilot to be sure it has the proper dependencies before working
on changes. Also included in the change are explicit instructions on
what to do before reporting back "done".
2025-05-22 10:32:01 -06:00

3.2 KiB

GitHub Copilot Instructions for GSL (Guidelines Support Library)

Project Overview

This repository contains the Guidelines Support Library (GSL), a Microsoft implementation of types and functions suggested for use by the C++ Core Guidelines. It's a header-only C++ library with emphasis on safety, correctness, and zero overhead.

Coding Standards

General

  • Follow C++ Core Guidelines wherever possible
  • Use meaningful type, function, and template parameter names
  • Keep functions small and focused with clear preconditions/postconditions
  • Include comments for complex code, but prefer self-documenting code
  • Use the Expects() and Ensures() macros for contract verification

Style Guidelines

  • Use 4 spaces for indentation (not tabs)
  • Maximum line length of 100 characters
  • Follow GSL naming conventions (lowercase with underscores)
  • Keep templates clean and readable with appropriate spacing
  • Use C++14 features since this is the minimum standard supported

Error Handling

  • Use Expects() for preconditions and Ensures() for postconditions
  • Design for fail-fast semantics (std::terminate) on contract violations
  • Template constraints should use static_assert or SFINAE
  • Don't throw exceptions from basic operations

Testing

  • Write thorough unit tests for every component using GTest
  • Test for all edge cases and error conditions
  • Ensure cross-platform compatibility in tests
  • Maintain 100% code coverage for changed code

Project-Specific Conventions

Architecture

  • All public types must be in the gsl namespace
  • Design for zero overhead abstractions when possible
  • Respect the distinction between Owners and Views
  • Maintain backward compatibility with existing GSL code

Version Control

  • Link all PRs to related issues
  • Use clear commit messages explaining what and why
  • Follow the contribution guidelines documented in CONTRIBUTING.md
  • PRs should include appropriate tests with 100% coverage for changed code

Documentation

  • Document all public APIs with clarity on preconditions and postconditions
  • Keep header comments up-to-date
  • Include examples for complex functionality in docs/headers.md

Technology Stack

  • C++14 (minimum) for core implementation
  • CMake build system (3.14+)
  • Google Test for unit testing
  • Support for multiple compilers (MSVC, GCC, Clang)

Security Considerations

  • Bounds checking is a core principle - enforce it consistently
  • Design for safety while minimizing overhead
  • Ensure undefined behavior is explicitly detected where possible

Performance Guidelines

  • Optimize for both safety and performance
  • Constexpr-enable functions wherever possible
  • Avoid hidden allocations
  • Use noexcept appropriately for move operations and other performance-critical functions

Cross-Platform Support

  • Code must work across:
    • Windows (MSVC)
    • Linux (GCC, Clang)
    • macOS (AppleClang)
    • Android and iOS where applicable

Copilot Tasks

  • You can find the CMake artifacts for C++20 in build-cxx20 and C++14 in build-cxx14.
  • Before publishing a PR, verify the following:
    • There are no compiler warnings or errors when building the test suite.
    • The test suite passes on all supported platforms and compilers.
    • The test suite passes for both C++14 and C++20.