Skip to content

Commit 1cdb983

Browse files
feat(discover): add user-defined extension→language mappings via config files
Read extra_extensions from ~/.config/codebase-memory-mcp/config.json (global) and {repo}/.codebase-memory.json (project), merging them with project config taking precedence. Unknown language values warn and skip. Missing files are silently ignored (fail-open). Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
1 parent de42777 commit 1cdb983

File tree

7 files changed

+706
-0
lines changed

7 files changed

+706
-0
lines changed

Makefile.cbm

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -148,6 +148,7 @@ MCP_SRCS = src/mcp/mcp.c
148148
# Discover module (new)
149149
DISCOVER_SRCS = \
150150
src/discover/language.c \
151+
src/discover/userconfig.c \
151152
src/discover/gitignore.c \
152153
src/discover/discover.c
153154

@@ -259,6 +260,7 @@ TEST_MCP_SRCS = \
259260

260261
TEST_DISCOVER_SRCS = \
261262
tests/test_language.c \
263+
tests/test_userconfig.c \
262264
tests/test_gitignore.c \
263265
tests/test_discover.c
264266

src/discover/language.c

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,11 @@
33
*
44
* Maps file extensions and special filenames to CBMLanguage enum values.
55
* Handles .m disambiguation (Objective-C vs Magma vs MATLAB).
6+
* Consults the process-global user config (set via cbm_set_user_lang_config)
7+
* before the built-in lookup table.
68
*/
79
#include "discover/discover.h"
10+
#include "discover/userconfig.h"
811
#include "cbm.h" // CBMLanguage, CBM_LANG_*
912

1013
#include <ctype.h>
@@ -354,6 +357,15 @@ CBMLanguage cbm_language_for_extension(const char *ext) {
354357
return CBM_LANG_COUNT;
355358
}
356359

360+
/* Check user-defined overrides first */
361+
const cbm_userconfig_t *ucfg = cbm_get_user_lang_config();
362+
if (ucfg) {
363+
CBMLanguage ulang = cbm_userconfig_lookup(ucfg, ext);
364+
if (ulang != CBM_LANG_COUNT) {
365+
return ulang;
366+
}
367+
}
368+
357369
for (size_t i = 0; i < EXT_TABLE_SIZE; i++) {
358370
if (strcmp(EXT_TABLE[i].ext, ext) == 0) {
359371
return EXT_TABLE[i].language;

0 commit comments

Comments
 (0)