Skip to content

Commit 5165937

Browse files
committed
main: implement --describe-language option
Signed-off-by: Masatake YAMATO <[email protected]>
1 parent aef37df commit 5165937

File tree

3 files changed

+105
-1
lines changed

3 files changed

+105
-1
lines changed

main/options.c

Lines changed: 102 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2306,6 +2306,107 @@ static void processListSubparsersOption (const char *const option CTAGS_ATTR_UNU
23062306
exit (0);
23072307
}
23082308

2309+
static void proecssDescribeLanguage(const char *const option,
2310+
const char *const parameter)
2311+
{
2312+
/* Version, enable */
2313+
if (parameter == NULL || parameter[0] == '\0')
2314+
error (FATAL, "No language given in \"--%s\" option", option);
2315+
2316+
2317+
langType language = getNamedLanguage (parameter, 0);
2318+
if (language == LANG_IGNORE)
2319+
error (FATAL, "Unknown language \"--%s\" in \"%s\"", parameter, option);
2320+
2321+
initializeParser (language);
2322+
2323+
printf("About %s language\n", parameter);
2324+
puts("=======================================================");
2325+
2326+
printf("enabled: %s\n", isLanguageEnabled(language)? "yes": "no");
2327+
printf("version: %u.%u\n",
2328+
getLanguageVersionCurrent (language),
2329+
getLanguageVersionAge (language));
2330+
2331+
puts("");
2332+
puts("Mappings/patterns");
2333+
puts("-------------------------------------------------------");
2334+
printLanguageMaps (language, LMAP_PATTERN|LMAP_NO_LANG_PREFIX,
2335+
localOption.withListHeader, localOption.machinable,
2336+
stdout);
2337+
2338+
puts("");
2339+
puts("Mappings/extensions");
2340+
puts("-------------------------------------------------------");
2341+
printLanguageMaps (language, LMAP_EXTENSION|LMAP_NO_LANG_PREFIX,
2342+
localOption.withListHeader, localOption.machinable,
2343+
stdout);
2344+
2345+
puts("");
2346+
puts("Aliases");
2347+
puts("-------------------------------------------------------");
2348+
printLanguageAliases (language,
2349+
localOption.withListHeader, localOption.machinable, stdout);
2350+
2351+
puts("");
2352+
puts("Kinds");
2353+
puts("-------------------------------------------------------");
2354+
2355+
printLanguageKinds (language, true,
2356+
localOption.withListHeader, localOption.machinable, stdout);
2357+
2358+
puts("");
2359+
puts("Roles");
2360+
puts("-------------------------------------------------------");
2361+
printLanguageRoles (language, "*",
2362+
localOption.withListHeader,
2363+
localOption.machinable,
2364+
stdout);
2365+
2366+
puts("");
2367+
puts("Fields");
2368+
puts("-------------------------------------------------------");
2369+
{
2370+
writerCheckOptions (Option.fieldsReset);
2371+
struct colprintTable * table = fieldColprintTableNew ();
2372+
fieldColprintAddLanguageLines (table, language);
2373+
fieldColprintTablePrint (table, localOption.withListHeader, localOption.machinable, stdout);
2374+
colprintTableDelete (table);
2375+
}
2376+
2377+
puts("");
2378+
puts("Extras");
2379+
puts("-------------------------------------------------------");
2380+
{
2381+
struct colprintTable * table = xtagColprintTableNew ();
2382+
xtagColprintAddLanguageLines (table, language);
2383+
xtagColprintTablePrint (table, localOption.withListHeader, localOption.machinable, stdout);
2384+
colprintTableDelete (table);
2385+
}
2386+
2387+
puts("");
2388+
puts("Parameters");
2389+
puts("-------------------------------------------------------");
2390+
printLanguageParams (language,
2391+
localOption.withListHeader, localOption.machinable,
2392+
stdout);
2393+
2394+
puts ("");
2395+
puts("Sub parsers stacked on this parser");
2396+
puts("-------------------------------------------------------");
2397+
printLanguageSubparsers(language,
2398+
localOption.withListHeader, localOption.machinable,
2399+
stdout);
2400+
2401+
puts("");
2402+
puts("Implementation specific status");
2403+
puts("-------------------------------------------------------");
2404+
printf("allow null tags: %s\n", doesLanguageAllowNullTag(language)? "yes": "no");
2405+
2406+
exit (0);
2407+
2408+
}
2409+
23092410
static void processListOperators (const char *const option CTAGS_ATTR_UNUSED,
23102411
const char *const parameter)
23112412
{
@@ -2864,6 +2965,7 @@ static void processDumpOptionsOption (const char *const option, const char *cons
28642965
static void processDumpPreludeOption (const char *const option, const char *const parameter);
28652966

28662967
static parametricOption ParametricOptions [] = {
2968+
{ "describe-language", proecssDescribeLanguage, true, STAGE_ANY },
28672969
{ "etags-include", processEtagsInclude, false, STAGE_ANY },
28682970
{ "exclude", processExcludeOption, false, STAGE_ANY },
28692971
{ "exclude-exception", processExcludeExceptionOption, false, STAGE_ANY },

main/parse.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3761,7 +3761,8 @@ static void printMaps (const langType language, langmapType type)
37613761
unsigned int i;
37623762

37633763
parser = LanguageTable + language;
3764-
printf ("%-8s", parser->def->name);
3764+
if (! (LMAP_NO_LANG_PREFIX & type))
3765+
printf ("%-8s", parser->def->name);
37653766
if (parser->currentPatterns != NULL && (type & LMAP_PATTERN))
37663767
for (i = 0 ; i < stringListCount (parser->currentPatterns) ; ++i)
37673768
printf (" %s", vStringValue (

main/parse_p.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ typedef enum {
3535
LMAP_EXTENSION = 1 << 1,
3636
LMAP_ALL = LMAP_PATTERN | LMAP_EXTENSION,
3737
LMAP_TABLE_OUTPUT = 1 << 2,
38+
LMAP_NO_LANG_PREFIX = 1 << 3,
3839
} langmapType;
3940

4041
enum parserCategory

0 commit comments

Comments
 (0)