[anjuta] anjuta-tags: add scope information in the Vala parser
- From: Johannes Schmid <jhs src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [anjuta] anjuta-tags: add scope information in the Vala parser
- Date: Mon, 22 Feb 2010 23:24:35 +0000 (UTC)
commit ab5ab09b5f1b169f98d05bcb5d37ea240b0719c7
Author: Abderrahim Kitouni <a kitouni gmail com>
Date: Mon Feb 15 19:10:09 2010 +0100
anjuta-tags: add scope information in the Vala parser
plugins/symbol-db/anjuta-tags/ctags-visitor.vala | 64 ++++++++++++++++------
plugins/symbol-db/anjuta-tags/vala.c | 2 +
2 files changed, 48 insertions(+), 18 deletions(-)
---
diff --git a/plugins/symbol-db/anjuta-tags/ctags-visitor.vala b/plugins/symbol-db/anjuta-tags/ctags-visitor.vala
index 09ac68e..d171a5c 100644
--- a/plugins/symbol-db/anjuta-tags/ctags-visitor.vala
+++ b/plugins/symbol-db/anjuta-tags/ctags-visitor.vala
@@ -21,7 +21,7 @@
using Vala;
-public class CTagsEntry {
+public struct CTagsEntry {
public int line_number;
public string name;
public string kind_name;
@@ -29,6 +29,7 @@ public class CTagsEntry {
public string access;
public string implementation;
public string inheritance;
+ public string scope[2];
public string signature;
public string typeref;
}
@@ -44,7 +45,7 @@ public delegate void CTagsEntryMaker (CTagsEntry entry);
public class CTagsVisitor : CodeVisitor {
Parser vala_parser;
Genie.Parser genie_parser;
- GLib.List<CTagsEntry> taglist;
+ GLib.List<CTagsEntry?> taglist;
public CTagsVisitor () {
vala_parser = new Parser();
genie_parser = new Genie.Parser();
@@ -130,6 +131,20 @@ public class CTagsVisitor : CodeVisitor {
ret.append (")");
return ret.str;
}
+ static void scope (Symbol s, string[] scope) {
+ var par = s.parent_symbol;
+ if (par != null && par.name != null) {
+ if (par is Class)
+ scope[0] = "class";
+ else if (par is Struct)
+ scope[0] = "struct";
+ else if (par is Interface)
+ scope[0] = "interface";
+ else
+ return;
+ scope[1] = par.name;
+ }
+ }
/*static void print_tag(CTagsEntry en) {
stdout.printf("%s: %s at %d\n", en.name, en.kind_name, en.line_number);
}*/
@@ -139,7 +154,7 @@ public class CTagsVisitor : CodeVisitor {
}
public override void visit_class (Class cl) {
- var entry = new CTagsEntry();
+ var entry = CTagsEntry();
entry.line_number = cl.source_reference.first_line;
entry.name = cl.name;
@@ -148,25 +163,27 @@ public class CTagsVisitor : CodeVisitor {
entry.access = get_access (cl);
entry.implementation = implementation(cl);
entry.inheritance = to_string(cl.get_base_types(), ",");
+ scope (cl, entry.scope);
taglist.append(entry);
// print_tag(entry);
cl.accept_children(this);
}
public override void visit_struct (Struct st) {
- var entry = new CTagsEntry();
+ var entry = CTagsEntry();
entry.line_number = st.source_reference.first_line;
entry.name = st.name;
entry.kind_name = "struct";
entry.kind = 's';
entry.access = get_access (st);
+ scope (st, entry.scope);
taglist.append(entry);
// print_tag(entry);
st.accept_children(this);
}
public override void visit_interface (Interface iface) {
- var entry = new CTagsEntry();
+ var entry = CTagsEntry();
entry.line_number = iface.source_reference.first_line;
entry.name = iface.name;
@@ -174,6 +191,7 @@ public class CTagsVisitor : CodeVisitor {
entry.kind = 'i';
entry.access = get_access (iface);
entry.inheritance = to_string(iface.get_prerequisites());
+ scope (iface, entry.scope);
taglist.append(entry);
// print_tag(entry);
@@ -181,26 +199,28 @@ public class CTagsVisitor : CodeVisitor {
}
public override void visit_enum (Vala.Enum en) {
- var entry = new CTagsEntry();
+ var entry = CTagsEntry();
entry.line_number = en.source_reference.first_line;
entry.name = en.name;
entry.kind_name = "enum";
entry.kind = 'e';
entry.access = get_access (en);
+ scope (en, entry.scope);
taglist.append(entry);
// print_tag(entry);
en.accept_children(this);
}
public override void visit_error_domain (ErrorDomain edomain) {
- var entry = new CTagsEntry();
+ var entry = CTagsEntry();
entry.line_number = edomain.source_reference.first_line;
entry.name = edomain.name;
entry.kind_name = "errordomain";
entry.kind = 'E';
entry.access = get_access (edomain);
+ scope (edomain, entry.scope);
taglist.append(entry);
// print_tag(entry);
@@ -208,38 +228,41 @@ public class CTagsVisitor : CodeVisitor {
}
public override void visit_enum_value (Vala.EnumValue ev) {
- var entry = new CTagsEntry();
+ var entry = CTagsEntry();
entry.line_number = ev.source_reference.first_line;
entry.name = ev.name;
entry.kind_name = "enumvalue";
entry.kind = 'v';
entry.access = get_access (ev);
+ scope (ev, entry.scope);
taglist.append(entry);
// print_tag(entry);
}
public override void visit_error_code (ErrorCode ecode) {
- var entry = new CTagsEntry();
+ var entry = CTagsEntry();
//entry.line_number = ecode.source_reference.first_line;
entry.name = ecode.name;
entry.kind_name = "errorcode";
entry.kind = 'r';
entry.access = get_access (ecode);
+ scope (ecode, entry.scope);
taglist.append(entry);
// print_tag(entry);
}
public override void visit_delegate (Delegate d) {
- var entry = new CTagsEntry();
+ var entry = CTagsEntry();
entry.line_number = d.source_reference.first_line;
entry.name = d.name;
entry.kind_name = "delegate";
entry.kind = 'd';
entry.access = get_access (d);
+ scope (d, entry.scope);
entry.typeref = d.return_type.to_qualified_string();
entry.signature = signature(d.get_parameters());
@@ -247,7 +270,7 @@ public class CTagsVisitor : CodeVisitor {
// print_tag(entry);
}
public override void visit_signal (Vala.Signal sig) {
- var entry = new CTagsEntry();
+ var entry = CTagsEntry();
entry.line_number = sig.source_reference.first_line;
entry.name = sig.name;
@@ -255,6 +278,7 @@ public class CTagsVisitor : CodeVisitor {
entry.kind = 'S';
entry.access = get_access (sig);
entry.implementation = implementation(sig);
+ scope (sig, entry.scope);
entry.typeref = sig.return_type.to_qualified_string();
entry.signature = signature(sig.get_parameters());
@@ -262,33 +286,35 @@ public class CTagsVisitor : CodeVisitor {
// print_tag(entry);
}
public override void visit_field (Field f) {
- var entry = new CTagsEntry();
+ var entry = CTagsEntry();
entry.line_number = f.source_reference.first_line;
entry.name = f.name;
entry.kind_name = "field";
entry.kind = 'f';
entry.access = get_access (f);
+ scope (f, entry.scope);
entry.typeref = f.field_type.to_qualified_string();
taglist.append(entry);
// print_tag(entry);
}
public override void visit_constant (Constant c) {
- var entry = new CTagsEntry();
+ var entry = CTagsEntry();
entry.line_number = c.source_reference.first_line;
entry.name = c.name;
entry.kind_name = "field";
entry.kind = 'f';
entry.access = get_access (c);
+ scope (c, entry.scope);
entry.typeref = c.type_reference.to_qualified_string();
taglist.append(entry);
// print_tag(entry);
}
public override void visit_property (Property prop) {
- var entry = new CTagsEntry();
+ var entry = CTagsEntry();
entry.line_number = prop.source_reference.first_line;
entry.name = prop.name;
@@ -296,6 +322,7 @@ public class CTagsVisitor : CodeVisitor {
entry.kind = 'p';
entry.access = get_access (prop);
entry.implementation = implementation(prop);
+ scope (prop, entry.scope);
entry.typeref = prop.property_type.to_qualified_string();
taglist.append(entry);
@@ -303,7 +330,7 @@ public class CTagsVisitor : CodeVisitor {
}
public override void visit_method (Method m) {
- var entry = new CTagsEntry();
+ var entry = CTagsEntry();
entry.line_number = m.source_reference.first_line;
entry.name = m.name;
@@ -311,6 +338,7 @@ public class CTagsVisitor : CodeVisitor {
entry.kind = 'm';
entry.access = get_access (m);
entry.implementation = implementation(m);
+ scope (m, entry.scope);
entry.typeref = m.return_type.to_qualified_string();
entry.signature = signature(m.get_parameters());
@@ -319,7 +347,7 @@ public class CTagsVisitor : CodeVisitor {
}
public override void visit_local_variable (LocalVariable local) {
- var entry = new CTagsEntry();
+ var entry = CTagsEntry();
entry.line_number = local.source_reference.first_line;
entry.name = local.name;
@@ -332,7 +360,7 @@ public class CTagsVisitor : CodeVisitor {
}
public void parse_vala (string filename, CTagsEntryMaker maker ) {
- taglist = new GLib.List<CTagsEntry>();
+ taglist = new GLib.List<CTagsEntry?>();
/* We create a context for every source file so that Parser.parse(context)
* don't parse a file multiple times causing errors. Parser.parse_file(source_file)
* assumes that Parser.context is the same as source_file.context anyway */
@@ -351,7 +379,7 @@ public class CTagsVisitor : CodeVisitor {
CodeContext.pop();
}
public void parse_genie (string filename, CTagsEntryMaker maker ) {
- taglist = new GLib.List<CTagsEntry>();
+ taglist = new GLib.List<CTagsEntry?>();
var context = new CodeContext();
context.report = new DummyReport();
var source_file = new SourceFile(context, filename);
diff --git a/plugins/symbol-db/anjuta-tags/vala.c b/plugins/symbol-db/anjuta-tags/vala.c
index 075dd6b..66bad97 100644
--- a/plugins/symbol-db/anjuta-tags/vala.c
+++ b/plugins/symbol-db/anjuta-tags/vala.c
@@ -43,6 +43,8 @@ static void make_ctags_entry (CTagsEntry* entry) {
tag.extensionFields.access = entry->access;
tag.extensionFields.implementation = entry->implementation;
tag.extensionFields.inheritance = entry->inheritance;
+ tag.extensionFields.scope[0] = entry->scope[0];
+ tag.extensionFields.scope[1] = entry->scope[1];
tag.extensionFields.typeRef[0] = entry->typeref;
tag.extensionFields.signature = entry->signature;
makeTagEntry(&tag);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]