Ctags: рд╕реА: рдореИрдХреНрд░реЛ рд▓рд╛рдЗрди рдХреЗ рдмрд╛рдж рд╕рдорд╛рд░реЛрд╣ рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛

рдХреЛ рдирд┐рд░реНрдорд┐рдд 21 рджрд┐рд╕ре░ 2014  ┬╖  8рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: universal-ctags/ctags

рдирдорд╕реНрддреЗ,
рдореБрдЭреЗ ctags рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ C рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░рдиреЗ рдореЗрдВ рдПрдХ рдмрдЧ рдорд┐рд▓рд╛ (рдпрд╣ рд╡рд┐рдкреБрд▓-ctags рдореЗрдВ рднреА рд╣реИ)ред

рд╕рдорд╕реНрдпрд╛ рдирд┐рдореНрди рд╣реИ:

#include <stdio.h>

#define PRAGMA(x) _Pragma(#x)
PRAGMA(bar)
int foo() {
    int a = 1;
    printf("a = %d\n", a);
}

void main(void) {
    foo();
}

ctags рдлрд╝рд╛рдЗрд▓ рдХреЗ рдЖрдЙрдЯрдкреБрдЯ рдореЗрдВ рдиреАрдЪреЗ рдХреЗ рд░реВрдк рдореЗрдВ foo() рдлрд╝рдВрдХреНрд╢рди рдирд╣реАрдВ рдерд╛ред

PRAGMA  f.c /^#define PRAGMA(/;"    d   file:
PRAGMA  f.c /^PRAGMA(bar)$/;"   f
main    f.c /^void main(void) {$/;" f

рдзрдиреНрдпрд╡рд╛рдж!!

Parser buenhancement

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

рдореИрдВ рдЪрд╛рд▓ рдирд╣реАрдВ рдЬрд╛рдирддрд╛ рд▓реЗрдХрд┐рди рдирдпрд╛ рдкрд╛рд░реНрд╕ рдЗрд╕реЗ рд╣рд▓ рдХрд░рддрд╛ рд╣реИред
рдореИрдВрдиреЗ рдкрд╛рдпрд╛:

PRAGMA  /tmp/enum.c /^#define PRAGMA(/;"    d   file:
foo /tmp/enum.c /^int foo() {$/;"   f
main    /tmp/enum.c /^void main(void) {$/;" f

рд╕рднреА 8 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

рд░рд┐рдкреЛрд░реНрдЯрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред
рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ рд▓реЗрдХрд┐рди рдЗрд╕реЗ рдареАрдХ рдХрд░рдирд╛ рдЖрд╕рд╛рди рдирд╣реАрдВ рд╣реИред

рдирд┐рдЬреА рдиреЛрдЯ: рд╣рдореЗрдВ get.c . рдХреЗ рдирд┐рд░реНрджреЗрд╢ рдореЗрдВ рдореИрдХреНрд░реЛ рдкрд░рд┐рднрд╛рд╖рд╛ рдХреЛ рд░рд┐рдХреЙрд░реНрдб рдХрд░рдирд╛ рд╣реЛрдЧрд╛
рдореИрдВ рдПрдХ рд╢рд╛рдЦрд╛ рдореЗрдВ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реВрдБ рдХрд╛рдЧ рдкрд░рдд рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЗрдирдкреБрдЯ рд╕реНрдЯреНрд░реАрдо рдХреЛ рд╣реИрдХ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред
рдореБрдЭреЗ рдЧреЗрдиреА рдХреА рдореЗрдореЛрд░реА рдЖрдзрд╛рд░рд┐рдд рдЗрдирдкреБрдЯ рд╕реНрдЯреНрд░реАрдо рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреА рд╣реИред

@masatake
рдХреНрдпрд╛ рдЖрдкрдиреЗ рдЗрд╕ рдкрд░ рдкреНрд░рдЧрддрд┐ рдХреА рд╣реИ?
рдХреНрдпрд╛ рдЖрдкрдХреА рд╢рд╛рдЦрд╛ рдХрд╣реАрдВ рдЙрдкрд▓рдмреНрдз рд╣реИ?

рдирд╣реАрдВ, рдореИрдВ рдЗрд╕ рд╡рд┐рд╖рдп рдкрд░ рдХреБрдЫ рдирд╣реАрдВ рдХрд░рддрд╛ред

рд╢рд╛рдпрдж рдЖрдк рдореИрдХреНрд░реЛ рд╡рд┐рд╕реНрддрд╛рд░ рднрд╛рдЧ рдХреЛ рдЫреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП ctags -I 'PRAGMA+' рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдирд┐рдЬреА рдиреЛрдЯ: рд╣рдореЗрдВ get.c рдХреЙрд░реНрдХ рдкрд░рдд рдХреЗ рдирд┐рд░реНрджреЗрд╢ рдореЗрдВ рдореИрдХреНрд░реЛ рдкрд░рд┐рднрд╛рд╖рд╛ рдХреЛ рд░рд┐рдХреЙрд░реНрдб рдХрд░рдирд╛ рд╣реЛрдЧрд╛

рдпрд╣ рд╕рднреА рдореИрдХреНрд░реЛ рдЙрдкрдпреЛрдЧ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рдирд╣реАрдВ рд╣реЛрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рдХрдИ рд╢рд╛рдорд┐рд▓ рд╣реЗрдбрд░ рд╕реЗ рдЖ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдЕрдЬреАрдм рдЪреАрдЬреЛрдВ рддрдХ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдкреВрд░реНрдг рд╡рд┐рдХрд╕рд┐рдд рд╕реА рдкреНрд░реАрдкреНрд░реЛрд╕реЗрд╕рд░ рдХреЗ рдмрд┐рдирд╛ рдпрд╣ рдХрднреА рднреА рд╕рд╣реА рдирд╣реАрдВ рд╣реЛрдЧрд╛ред рддреЛ рдореБрдЭреЗ рдЖрд╢реНрдЪрд░реНрдп рд╣реИ рдХрд┐ рдореИрдХреНрд░реЛ рд╡рд┐рд╕реНрддрд╛рд░ рдХреЛ рдЯреНрд░реИрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╕рднреА рдЬрдЯрд┐рд▓рддрд╛рдУрдВ рдХреЛ рдЬреЛрдбрд╝рдирд╛ рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИ рдпрджрд┐ рдпрд╣ рдХрднреА рдкрд░реНрдпрд╛рдкреНрдд рдирд╣реАрдВ рд╣реЛрдЧрд╛ред

@ рдмреА 4 рдПрди , рдореИрдВ рд╕рд╣рдордд рд╣реВрдВред

рдореИрдВ рдЪрд╛рд▓ рдирд╣реАрдВ рдЬрд╛рдирддрд╛ рд▓реЗрдХрд┐рди рдирдпрд╛ рдкрд╛рд░реНрд╕ рдЗрд╕реЗ рд╣рд▓ рдХрд░рддрд╛ рд╣реИред
рдореИрдВрдиреЗ рдкрд╛рдпрд╛:

PRAGMA  /tmp/enum.c /^#define PRAGMA(/;"    d   file:
foo /tmp/enum.c /^int foo() {$/;"   f
main    /tmp/enum.c /^void main(void) {$/;" f
рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

lvc picture lvc  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

jagjordi picture jagjordi  ┬╖  9рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

liuchengxu picture liuchengxu  ┬╖  8рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

jespinal picture jespinal  ┬╖  8рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

trevordmiller picture trevordmiller  ┬╖  9рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ