Files
compiler-explorer/docs/AddingAFormatter.md
Matt Godbolt 54e2dae21f Add comprehensive Configuration.md documentation (#7626)
This PR adds a detailed Configuration.md document that comprehensively
explains the Compiler Explorer configuration system. It covers:

- Configuration file structure and hierarchical loading
- Property types and automatic conversions
- List separators and specialized formats
- Group inheritance and compiler configuration
- Variable substitution mechanisms
- Advanced features like remote compilers and property debugging

Additionally, it updates all related documentation to reference this
central document for configuration details, reducing duplication and
ensuring consistency.

This document will serve as the foundation for future configuration
system improvements by providing clear documentation of the current
implementation.
2025-04-26 18:12:58 -05:00

34 lines
1.7 KiB
Markdown

# Adding a new formatter
- Add a `etc/config/compiler-explorer.local.properties` file (for details on the configuration system, see [Configuration.md](Configuration.md))
- Add a new formatter under the `formatters` key
- The new formatter can have the following keys: name, exe, styles, type, explicitVersion (to override version
parsing), version (argument to get version info), versionRe (regex to filter out the right version info)
- Add a `lib/formatters/<formatter>.ts` file using the template below, replacing `Type` and `type` as appropriate
```js
import {UnprocessedExecResult} from '../../types/execution/execution.interfaces';
import {BaseFormatter} from './base';
import {FormatOptions} from './base.interfaces';
export class TypeFormatter extends BaseFormatter {
static get key() {
return 'type';
}
}
```
- The value returned by `key` above corresponds to the `type` property you set in the compiler-explorer properties
configuration file.
- Tweak `format(source: string, options: FormatOptions): Promise<UnprocessedExecResult>` and
`isValidStyle(style: string): boolean` as necessary. See the JSDoc for `format` and the implementations for other
formatters to get a further understanding of how to implement `format(source, options)`.
- Add your `TypeFormatter` to `lib/formatters/_all.ts` in alphabetical order
- You can check the output of http://localhost:10240/api/formats to be sure your formatter is there.
- Make an installer in the [infra](https://github.com/compiler-explorer/infra) repository. An example patch for adding
an installer can be found [here](https://github.com/compiler-explorer/infra/pull/560)