2011-07-25 25 views
9

Có cách nào để ctags xử lý các mẫu nguyên mẫu đa chức năng trong C?ctags nguyên mẫu hàm đa dòng C

Tôi đã tìm kiếm xung quanh và --fields=+S là nghĩa vụ phải làm nguyên mẫu multiline, nhưng tôi không thể có được nó để làm việc:

ctags -x --c-kinds=pf --fields=+S file 

file:

int 
foo(int 
    x, int y 
    ); 

ctags chỉ trả về:

foo(int 

(Lưu ý rằng kiểu trả về cũng bị thiếu)

Cuối cùng, tôi muốn để có được một kết quả tương tự như

int foo(int x, int y); 

hoặc

int foo(int x, int y 

--fields=+S không phải là cách đúng không? Có một phần của các trường ctags mà tôi bị thiếu không? Bất kỳ con trỏ nào nói chung?

Nếu không có cách nào để thực hiện việc này trong ctags, thì có chương trình được khuyến nghị nào không? (Tôi hiện đang xem xét không xác minh)

Trả lời

0

tôi đã không thể tìm thấy bất cứ điều gì với ctags vì vậy tôi đã viết một kịch bản python để sắp xếp lại tập tin của tôi để ctags có thể nắm bắt được nguyên mẫu.

Lưu ý: mã của tôi có nhận xét và rất nhiều việc này sẽ giúp bạn loại bỏ chúng (nếu không chúng sẽ cản trở các dấu gạch ngang).

thao tác được thực hiện theo thứ tự này:

# concat to one line 
file_str = '' 
for line in read_from.readlines(): 
    file_str += line 

# remove all /* */ comments 
file_str = re.sub('/\*(.|[\r\n])*?\*/', '', file_str) 

# remove '//' comments 
file_str = re.sub('//.*', '', file_str) 

# split on '\n' 
file_as_list = file_str.splitlines(True) 

# strip everything 
for index in range(len(file_as_list)): 
    file_as_list[index] = file_as_list[index].strip() 

# add in newlines where appropriate 
for line in file_as_list: 
    # if the line ends in ';' or '}' 
    if line.endswith(';') or line.endswith('}'): 
     # append a newline to the stripped line 
     write_to.write(line.strip() + '\n') 
    else: 
     # append a space to the stripped line 
     write_to.write(line.strip() + ' ') 
-1

Bạn có thể xóa các ngắt dòng không cần thiết bằng một bộ lọc đơn giản, ví dụ:

tr '\n' ' ' | sed 's/\([{};]\)/\1\n/g' 
1

tôi đã cùng một vấn đề với mã của tôi nhưng tôi không thể sửa đổi nó. Khi tôi sử dụng tham số --fields = + S, có vẻ như nó hoạt động vì tôi nhận được một dòng bổ sung trong tệp thẻ. Chữ ký: phần chứa tất cả các tham số của hàm.

CopyToTX26 D: \ BiseL \ My Dropbox \ làm việc \ 0_BSW \ PKG_CMD \ Memory.c/^ trống CopyToTX26 (uint16 memory_ID, uint32 ** pt_data_address, uint32 nb_recover, $ /;" f chữ ký :(uint16 memory_ID, uint32 ** pt_data_address, uint32 nb_recover, uint32 * nb_copied, uint32 max_length)

0
tùy chọn

--_ xformat có thể giúp bạn.

[[email protected] ~]$ cat /tmp/foo.h 
int 
foo(int 
    x, int y 
    ); 
[[email protected] ~]$ ~/var/ctags/ctags -x --c-kinds=pf --_xformat="%-16N %4n %-16F %C %S" /tmp/foo.h 
foo     2 /tmp/foo.h  foo(int (int x,int y) 
Các vấn đề liên quan