Ctags: C: НСвозмоТно ΠΏΡ€ΠΎΠ°Π½Π°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ послС строки макроса

Π‘ΠΎΠ·Π΄Π°Π½Π½Ρ‹ΠΉ Π½Π° 21 Π΄Π΅ΠΊ. 2014  Β·  8ΠšΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ  Β·  Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ: universal-ctags/ctags

ΠŸΡ€ΠΈΠ²Π΅Ρ‚,
Π― ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΠ» ΠΎΡˆΠΈΠ±ΠΊΡƒ Π² синтаксичСском Π°Π½Π°Π»ΠΈΠ·Π΅ C с использованиСм ctags (ΠΎΠ½ Ρ‚Π°ΠΊΠΆΠ΅ находится Π² exuberant-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 ΠšΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ

Бпасибо Π·Π° сообщСниС.
Π’Π°ΠΆΠ½ΠΎ, Π½ΠΎ ΠΈΡΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ это нСпросто.

Π›ΠΈΡ‡Π½ΠΎΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅: ΠΌΡ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π·Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ макроса Π² directiveDefine Ρ„Π°ΠΉΠ»Π° get.c
ΠΏΡ€ΠΎΠ±ΠΊΠΎΠ²Ρ‹ΠΉ слой я Ρ€Π°Π±ΠΎΡ‚Π°ΡŽ Π² Π²Π΅Ρ‚ΠΊΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ. Π’Ρ…ΠΎΠ΄Π½ΠΎΠΉ ΠΏΠΎΡ‚ΠΎΠΊ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ Π²Π·Π»ΠΎΠΌΠ°Π½.
МнС Π½ΡƒΠΆΠ½ΠΎ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ Π²Ρ…ΠΎΠ΄Π½ΠΎΠΉ ΠΏΠΎΡ‚ΠΎΠΊ Π½Π° основС памяти geany.

@masatake
Π’Ρ‹ добились Π² этом прогрСсса?
Π•ΡΡ‚ΡŒ Π»ΠΈ Π³Π΄Π΅-Π½ΠΈΠ±ΡƒΠ΄ΡŒ ваш Ρ„ΠΈΠ»ΠΈΠ°Π»?

НСт. Π― Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ дСлаю ΠΏΠΎ этой Ρ‚Π΅ΠΌΠ΅.

Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π²Ρ‹ ΠΌΠΎΠ³Π»ΠΈ Π±Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ctags -I 'PRAGMA+' Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΎΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ Ρ‡Π°ΡΡ‚ΡŒ раскрытия макроса.

Π›ΠΈΡ‡Π½ΠΎΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅: ΠΌΡ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π·Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ макроса Π² directiveDefine слоя ΠΏΡ€ΠΎΠ±ΠΊΠΈ get.c

Π­Ρ‚ΠΎΠ³ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ нСдостаточно, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Ρ€Π΅ΡˆΠΈΡ‚ΡŒ всС ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ с использованиСм макросов, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ ΠΈΠ· Π½ΠΈΡ… ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΡΡ…ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΈΠ· Π²ΠΊΠ»ΡŽΡ‡Π΅Π½Π½Ρ‹Ρ… Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΎΠ² ΠΈ Ρ€Π°ΡΡˆΠΈΡ€ΡΡ‚ΡŒΡΡ Π΄ΠΎ странных Π²Π΅Ρ‰Π΅ΠΉ, поэтому Π±Π΅Π· ΠΏΠΎΠ»Π½ΠΎΡ†Π΅Π½Π½ΠΎΠ³ΠΎ прСпроцСссора C ΠΎΠ½ Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΠ΄Π΅Π°Π»ΡŒΠ½Ρ‹ΠΌ. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ ΠΌΠ½Π΅ интСрСсно, ΠΈΠΌΠ΅Π΅Ρ‚ Π»ΠΈ смысл Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒ всю ΡΠ»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡƒΡŽ для отслСТивания Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ макросов, Ссли этого Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ достаточно.

@ b4n , согласСн.

Π― Π½Π΅ знаю Ρ‚Ρ€ΡŽΠΊΠ°, Π½ΠΎ Π½ΠΎΠ²Ρ‹ΠΉ синтаксичСский Π°Π½Π°Π»ΠΈΠ· Ρ€Π΅ΡˆΠ°Π΅Ρ‚ эту ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ.
Π― ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»:

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 Ρ€Π΅ΠΉΡ‚ΠΈΠ½Π³ΠΈ