59 lines
2.7 KiB
C
59 lines
2.7 KiB
C
#ifndef CBM_LANG_SPECS_H
|
|
#define CBM_LANG_SPECS_H
|
|
|
|
#include "cbm.h"
|
|
|
|
// CBMEmbeddedLangSpec describes a sub-language embedded inside a host AST.
|
|
// Used by host grammars whose tree-sitter parser does not recurse into the
|
|
// embedded content (e.g. Svelte, Vue, Astro: script_element -> raw_text holds
|
|
// JavaScript verbatim that the host grammar leaves unparsed). The generic
|
|
// embedded-imports walker locates each script_node_type in the host AST,
|
|
// finds its content_node_type child, and re-parses that slice with the
|
|
// embedded_language's grammar so existing extractors run on the inner AST.
|
|
typedef struct {
|
|
const char *script_node_type; // e.g. "script_element"
|
|
const char *content_node_type; // e.g. "raw_text"
|
|
CBMLanguage embedded_language; // grammar used to re-parse the content slice
|
|
} CBMEmbeddedLangSpec;
|
|
|
|
// CBMLangSpec mirrors Go's lang.LanguageSpec with NULL-terminated string arrays.
|
|
typedef struct {
|
|
CBMLanguage language;
|
|
const char **function_node_types;
|
|
const char **class_node_types;
|
|
const char **field_node_types;
|
|
const char **module_node_types;
|
|
const char **call_node_types;
|
|
const char **import_node_types;
|
|
const char **import_from_types;
|
|
const char **branching_node_types;
|
|
const char **variable_node_types;
|
|
const char **assignment_node_types;
|
|
const char **throw_node_types;
|
|
const char *throws_clause_field; // NULL if none
|
|
const char **decorator_node_types;
|
|
const char **env_access_functions; // NULL-terminated (NULL if none)
|
|
const char **env_access_member_patterns; // NULL-terminated (NULL if none)
|
|
const TSLanguage *(*ts_factory)(void); // Tree-sitter grammar factory (NULL if shared)
|
|
// NULL-terminated list of embedded sub-languages (NULL if host grammar has
|
|
// no embedded content to re-parse). The terminator is an entry whose
|
|
// script_node_type is NULL.
|
|
const CBMEmbeddedLangSpec *embedded_imports;
|
|
} CBMLangSpec;
|
|
|
|
// Returns a NULL-terminated list of callee-name suffixes that indicate a
|
|
// string-dispatch call for a given language (e.g. ".classMethodValue" for
|
|
// Python/IRIS), or NULL if the language has no such dispatch pattern.
|
|
// Kept out of CBMLangSpec to avoid -Wmissing-field-initializers across 155
|
|
// language rows; the table lives in extract_calls.c next to the dispatch code.
|
|
const char **cbm_string_dispatch_suffixes(CBMLanguage lang);
|
|
|
|
// Get the language spec for a given language. Returns NULL for unsupported.
|
|
const CBMLangSpec *cbm_lang_spec(CBMLanguage lang);
|
|
|
|
// Get the TSLanguage* for a given language. Returns NULL for unsupported.
|
|
// These resolve at link time to grammar symbols from Go tree-sitter modules.
|
|
const TSLanguage *cbm_ts_language(CBMLanguage lang);
|
|
|
|
#endif // CBM_LANG_SPECS_H
|