]> git.ipfire.org Git - thirdparty/vala.git/commitdiff
gir-importer: Add support for <instance-parameter>
authorFlorian Brosch <flo.brosch@gmail.com>
Tue, 19 Mar 2013 20:49:46 +0000 (21:49 +0100)
committerFlorian Brosch <flo.brosch@gmail.com>
Wed, 10 Apr 2013 17:29:45 +0000 (19:29 +0200)
src/libvaladoc/api/girsourcecomment.vala
src/libvaladoc/documentation/gtkdoccommentparser.vala
src/libvaladoc/importer/girdocumentationimporter.vala
src/libvaladoc/taglets/tagletparam.vala

index e554092386e820d2844ff21a255cb724334627eb..77bfb5f7a85c1a05ca29bcda0ea40b5b2b31efca 100644 (file)
@@ -30,6 +30,7 @@ using Gee;
 public class Valadoc.Api.GirSourceComment : SourceComment {
        private Map<string, SourceComment> parameters = new HashMap<string, SourceComment> ();
 
+       public string? instance_param_name { set; get; }
        public SourceComment return_comment { set; get; }
 
        public MapIterator<string, SourceComment> parameter_iterator () {
index 7b97bef65557534014be3c32daef7e911ea17685..5e0ce5ba8c0902e074e7020fc91b147ab75a031c 100644 (file)
@@ -279,6 +279,12 @@ public class Valadoc.Gtkdoc.Parser : Object, ResourceLocator {
                        }
 
                        taglet.parameter_name = iter.get_key ();
+
+                       if (taglet.parameter_name == gir_comment.instance_param_name) {
+                               taglet.parameter_name = "this";
+                               taglet.is_c_self_param = true;
+                       }
+
                        comment.taglets.add (taglet);
                }
 
@@ -1718,32 +1724,39 @@ public class Valadoc.Gtkdoc.Parser : Object, ResourceLocator {
                                run.content.add (this.create_type_link (current.content));
                                next ();
                        } else if (current.type == TokenType.GTKDOC_PARAM) {
-                               string? param_array_name;
-                               bool is_return_type_len;
-                               string? param_name;
-
-                               string? cname = resolve_parameter_ctype (current.content, out param_name, out param_array_name, out is_return_type_len);
-                               Run current_run = factory.create_run (Run.Style.MONOSPACED);
-                               run.content.add (current_run);
-
-                               if (is_return_type_len) {
-                                       Run keyword_run = factory.create_run (Run.Style.LANG_KEYWORD);
-                                       keyword_run.content.add (factory.create_text ("return"));
-                                       current_run.content.add (keyword_run);
-
-                                       current_run.content.add (factory.create_text (".length"));
-                               } else if (param_array_name != null) {
-                                       current_run.content.add (factory.create_text (param_array_name + ".length"));
+                               if (current.content == instance_param_name) {
+                                       Content.Run keyword_run = factory.create_run (Content.Run.Style.LANG_KEYWORD);
+                                       Content.Text text = factory.create_text ("this");
+                                       keyword_run.content.add (text);
+                                       run.content.add (keyword_run);
                                } else {
-                                       current_run.content.add (factory.create_text (param_name));
-                               }
-
-                               if (cname != null) {
-                                       run.content.add (factory.create_text ("."));
-
-                                       Taglets.Link link = factory.create_taglet ("link") as Taglets.Link;
-                                       link.symbol_name = cname;
-                                       run.content.add (link);
+                                       string? param_array_name;
+                                       bool is_return_type_len;
+                                       string? param_name;
+
+                                       string? cname = resolve_parameter_ctype (current.content, out param_name, out param_array_name, out is_return_type_len);
+                                       Run current_run = factory.create_run (Run.Style.MONOSPACED);
+                                       run.content.add (current_run);
+
+                                       if (is_return_type_len) {
+                                               Run keyword_run = factory.create_run (Run.Style.LANG_KEYWORD);
+                                               keyword_run.content.add (factory.create_text ("return"));
+                                               current_run.content.add (keyword_run);
+
+                                               current_run.content.add (factory.create_text (".length"));
+                                       } else if (param_array_name != null) {
+                                               current_run.content.add (factory.create_text (param_array_name + ".length"));
+                                       } else {
+                                               current_run.content.add (factory.create_text (param_name));
+                                       }
+
+                                       if (cname != null) {
+                                               run.content.add (factory.create_text ("."));
+
+                                               Taglets.Link link = factory.create_taglet ("link") as Taglets.Link;
+                                               link.symbol_name = cname;
+                                               run.content.add (link);
+                                       }
                                }
                                next ();
                        } else if (current.type == TokenType.GTKDOC_SIGNAL) {
index 73d721842840351869fb474ed4c9f07104af575b..02f9e85ab98c2adbec635f614197c3943249aea0 100644 (file)
@@ -663,6 +663,25 @@ public class Valadoc.Importer.GirDocumentationImporter : DocumentationImporter {
                        start_element ("parameters");
                        next ();
 
+                       if (current_token == MarkupTokenType.START_ELEMENT && reader.name == "instance-parameter") {
+                               string instance_param_name = reader.get_attribute ("name");
+                               next ();
+
+                               Api.SourceComment? param_comment = parse_doc ();
+                               parse_type (null);
+                               end_element ("instance-parameter");
+
+                               if (param_comment != null) {
+                                       if (comment == null) {
+                                               comment = new Api.GirSourceComment ("", file, begin.line, begin.column,
+                                                                                                                       end.line, end.column);
+                                       }
+
+                                       comment.add_parameter_content (instance_param_name, param_comment);
+                                       comment.instance_param_name = instance_param_name;
+                               }
+                       }
+
                        for (int pcount = 0; current_token == MarkupTokenType.START_ELEMENT; pcount++) {
                                Api.SourceComment? param_comment;
                                int array_length_pos;
@@ -700,6 +719,7 @@ public class Valadoc.Importer.GirDocumentationImporter : DocumentationImporter {
 
                attach_comment (c_identifier, comment, param_names, destroy_notifies, closures,
                                                array_lengths, array_length_ret);
+
                end_element (element_name);
        }
 
index 1fa30072a2598879edca395773b6ced38fca6597..b2a42be3cd30993e703b4d8d8ed5bad7834d6752 100644 (file)
@@ -32,6 +32,8 @@ public class Valadoc.Taglets.Param : InlineContent, Taglet, Block {
 
        public int position { private set; get; default = -1; }
 
+       public bool is_c_self_param { internal set; get; }
+
        public Rule? get_parser_rule (Rule run_rule) {
                return Rule.seq ({
                        Rule.option ({ Rule.many ({ TokenType.SPACE }) }),
@@ -105,7 +107,7 @@ public class Valadoc.Taglets.Param : InlineContent, Taglet, Block {
                        if (is_implicit) {
                                reporter.simple_note ("%s: %s: @param: warning: Implicit parameter `%s' exposed in documentation",
                                                                          file_path, container.get_full_name (), parameter_name);
-                       } else {
+                       } else if (!is_c_self_param) {
                                reporter.simple_warning ("%s: %s: @param: warning: Unknown parameter `%s'",
                                                                                 file_path, container.get_full_name (), parameter_name);
                        }