- 修复所有 33 个原始 tsc 编译错误(ink JSX 声明、类型不匹配、null check 等) - 清理 176 处 `: any` 类型标注,全部替换为具体推断类型 - 修复清理过程中引入的 41 个回归错误 - 最终结果:0 tsc 错误,0 个非注释 any 标注 - Build 验证通过(25.75MB bundle) Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
53 lines
1.7 KiB
TypeScript
53 lines
1.7 KiB
TypeScript
/**
|
|
* Keybindings template generator.
|
|
* Generates a well-documented template file for ~/.claude/keybindings.json
|
|
*/
|
|
|
|
import { jsonStringify } from '../utils/slowOperations.js'
|
|
import { DEFAULT_BINDINGS } from './defaultBindings.js'
|
|
import {
|
|
NON_REBINDABLE,
|
|
normalizeKeyForComparison,
|
|
} from './reservedShortcuts.js'
|
|
import type { KeybindingBlock } from './types.js'
|
|
|
|
/**
|
|
* Filter out reserved shortcuts that cannot be rebound.
|
|
* These would cause /doctor to warn, so we exclude them from the template.
|
|
*/
|
|
function filterReservedShortcuts(blocks: KeybindingBlock[]): KeybindingBlock[] {
|
|
const reservedKeys = new Set(
|
|
NON_REBINDABLE.map(r => normalizeKeyForComparison(r.key)),
|
|
)
|
|
|
|
return blocks
|
|
.map(block => {
|
|
const filteredBindings: Record<string, string | null> = {}
|
|
for (const [key, action] of Object.entries(block.bindings)) {
|
|
if (!reservedKeys.has(normalizeKeyForComparison(key))) {
|
|
filteredBindings[key] = action as string | null
|
|
}
|
|
}
|
|
return { context: block.context, bindings: filteredBindings }
|
|
})
|
|
.filter(block => Object.keys(block.bindings).length > 0)
|
|
}
|
|
|
|
/**
|
|
* Generate a template keybindings.json file content.
|
|
* Creates a fully valid JSON file with all default bindings that users can customize.
|
|
*/
|
|
export function generateKeybindingsTemplate(): string {
|
|
// Filter out reserved shortcuts that cannot be rebound
|
|
const bindings = filterReservedShortcuts(DEFAULT_BINDINGS)
|
|
|
|
// Format as object wrapper with bindings array
|
|
const config = {
|
|
$schema: 'https://www.schemastore.org/claude-code-keybindings.json',
|
|
$docs: 'https://code.claude.com/docs/en/keybindings',
|
|
bindings,
|
|
}
|
|
|
|
return jsonStringify(config, null, 2) + '\n'
|
|
}
|