Native C language support for CodeMirror 6 using a dedicated Lezer grammar.
This package provides native CodeMirror 6 support for the C programming language. It is:
- Not a C++ wrapper
- Not a CodeMirror 5 mode wrapper
- Not a thin alias around
@codemirror/legacy-modes
Instead, it uses a purpose-built Lezer grammar that provides:
- Syntax highlighting
- Code indentation
- Code folding
- Incremental parsing
- Useful syntax tree structure
npm install @fazelstudio/codemirror-lang-cimport {EditorState} from "@codemirror/state"
import {EditorView} from "@codemirror/view"
import {basicSetup} from "codemirror"
import {c} from "@fazelstudio/codemirror-lang-c"
const state = EditorState.create({
doc: `#include <stdio.h>
struct User {
int id;
const char *name;
};
int main(void) {
struct User user = {1, "Fazel"};
printf("%s\\n", user.name);
return 0;
}`,
extensions: [
basicSetup,
c(),
],
})
new EditorView({
state,
parent: document.body,
})The LRLanguage instance for C. Can be used directly for advanced use cases:
import {cLanguage} from "@fazelstudio/codemirror-lang-c"
// Access the underlying parser
const parser = cLanguage.parserCreates a LanguageSupport instance with C language support:
import {c} from "@fazelstudio/codemirror-lang-c"
const support = c()Baseline: ISO C17 (ISO/IEC 9899:2018)
The parser targets C17 core syntax. The following C23 features are recognized where cleanly implementable:
_Static_assert(actually C11 but widely used)_Noreturn_Alignas/_Alignof_Atomic_Thread_local- Generic selection (
_Generic)
Not claimed as full C23 support - specific features are documented individually.
The parser tolerates common compiler extensions:
__attribute__((...))__declspec(...)typeof(...)/__typeof____asm__/asm(...)
These are recognized but not deeply integrated into semantic highlighting.
This package is a syntax parser, not a full C compiler:
-
Semantic ambiguity: Some constructs (e.g.,
foo * bar;) require semantic information to distinguish declaration from expression. -
Macro expansion: Preprocessor directives are recognized and highlighted, but macros are not expanded.
-
Type tracking: The parser doesn't track typedef declarations or struct tags for semantic highlighting.
-
Complete C23: Not all C23 features are implemented.
| Package | Relationship |
|---|---|
@codemirror/lang-cpp |
C++ support only, not C |
@codemirror/legacy-modes |
CodeMirror 5 API, not native CM6 |
This package is specifically for C and uses a dedicated Lezer grammar.
# Install dependencies
npm install
# Build the grammar
npm run build:grammar
# Build the package
npm run build
# Run tests
npm test
# Watch mode
npm run watchMIT