.. _doc_updating_the_class_reference: Updating the class reference ============================ Godot Engine provides an extensive panel of nodes and singletons that you can use with GDScript to develop your games. All those classes are listed and documented in the :ref:`class reference `, which is available both in the online documentation and offline from within the engine. The class reference is however not 100% complete. Some methods, constants and signals have not been described yet, while others may have their implementation changed and thus need an update. Updating the class reference is a tedious work and the responsibility of the community: if we all partake in the effort, we can fill in the blanks and ensure a good documentation level in no time! **Important notes:** - To coordinate the effort and have an overview of the current status, we use `a collaborative pad `_. Please follow the instructions there to notify the other documentation writers about what you are working on. - We aim at completely filling the class reference in English first. Once it nears 90-95% completion, we could start thinking about localisating in other languages. Workflow for updating the class reference ----------------------------------------- The source file of the class reference is an XML file in the main Godot source repository on GitHub, `doc/base/classes.xml `_. As of now, it is relatively heavy (more than 1 MB), so it can't be edited online using GitHub's text editor. The workflow to update the class reference is therefore: - Fork the `upstream repository `_ and clone your fork. - Edit the ``doc/base/classes.xml`` file, commit your changes and push to your fork. - Make a pull request on the upstream repository. The following section details this workflow, and gives also additional information about how to synchronise the XML template with the current state of the source code, or what should be the formatting of the added text. **Important:** The class reference is also :ref:`available in the online documentation `, which is hosted alongside the rest of the documentation in the `godot-docs `_ git repository. The rST files should however **not be edited directly**, they are generated via a script from the ``doc/base/classes.xml`` file described above. Getting started with GitHub --------------------------- This section describes step-by-step the typical workflow to fork the git repository, or update an existing local clone of your fork, and then prepare a pull request. Fork Godot Engine ~~~~~~~~~~~~~~~~~ First of all, you need to fork the Godot Engine on your own GitHub repository. You will then need to clone the master branch of Godot Engine in order to work on the most recent version of the engine, including all of its features. :: git clone https://github.com/your_name/godot.git Then, create a new git branch that will contain your changes. :: git checkout -b classref-edit The branch you just created is identical to current master branch of Godot Engine. It already contains a ``doc/`` folder, with the current state of the class reference. Note that you can set whatever name you want for the branch, ``classref-edit`` is just an example. Keeping your local clone up-to-date ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ If you already have a local clone of your own fork, it might happen pretty fast that it will diverge with the upstream git repository. For example other contributors might have updated the class reference since you last worked on it, or your own commits might have been squashed together when merging your pull request, and thus appear as diverging from the upstream master branch. To keep your local clone up-to-date, you should first add an ``upstream`` git *remote* to work with: :: git remote add upstream https://github.com/godotengine/godot git fetch upstream You only need to run this once to define this remote. The following steps will have to be run each time you want to sync your branch to the state of the upstream repo: :: git pull --rebase upstream/master This command would reapply your local changes (if any) on top of the current state of the upstream branch, thus bringing you up-to-date with your own commits on top. In case you have local commits that should be discarded (e.g. if your previous pull request had 5 small commits that were all merged into one bigger commit in the upstream branch), you need to *reset* your branch: :: git fetch upstream git reset --hard upstream/master **Warning:** The above command will reset your branch to the state of the ``upstream/master`` branch, i.e. it will discard all changes which are specific to your local branch. So make sure to run this *before* making new changes and not afterwards. Alternatively, you can also keep your own master branch (``origin/master``) up-to-date and create new branches when wanting to commit changes to the class reference: :: git checkout master git branch -d my-previous-doc-branch git pull --rebase upstream/master git checkout -b my-new-doc-branch In case of doubt, ask for help on our IRC channels, we have some git gurus there. Updating the documentation template ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ When classes are modified in the source code, the documentation template might become outdated. To make sure that you are editing an up-to-date version, you first need to compile Godot (you can follow the :ref:`doc_introduction_to_the_buildsystem` page), and then run the following command (assuming 64-bit Linux): :: ./bin/godot.x11.tools.64 --doctool doc/base/classes.xml The doc/base/classes.xml should then be up-to-date with current Godot Engine features. You can then check what changed using the ``git diff`` command. If there are changes to other classes than the one you are planning to document, please commit those changes first before starting to edit the template: :: git add doc/base/classes.xml git commit -m "Sync classes reference template with current code base" You are now ready to edit this file to add stuff. **Note:** If this has been done recently by another contributor, you don't forcefully need to go through these steps (unless you know that the class you plan to edit *has* been modified recently). Push and request a pull of your changes ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Once your modifications are finished, push your changes on your GitHub repository: :: git add doc/base/classes.xml git commit -m "Explain your modifications." git push When it's done, you can ask for a Pull Request via the GitHub UI of your Godot fork. Editing the doc/base/classes.xml file ------------------------------------- This file is generated and updated by Godot Engine. It is used by the editor as base for the Help section. You can edit this file using your favourite text editor. If you use a code editor, make sure that it won't needlessly change the indentation behaviour (e.g. change all tabs to spaces). Formatting of the XML file ~~~~~~~~~~~~~~~~~~~~~~~~~~ Here is an example with the Node2D class: .. code:: xml Base node for 2D system. Base node for 2D system. Node2D contains a position, rotation and scale, which is used to position and animate. It can alternatively be used with a custom 2D transform ([Matrix32]). A tree of Node2Ds allows complex hierarchies for animation and positioning. Set the position of the 2d node. Set the rotation of the 2d node. Set the scale of the 2d node. Return the position of the 2D node. Return the rotation of the 2D node. Return the scale of the 2D node. Return the global position of the 2D node. As you can see, some methods in this class have no description (i.e. there is no text between their marks). This can also happen for the ``description`` and ``brief_description`` of the class, but in our example they are already filled. Let's edit the description of the ``rotate()`` method: .. code:: xml Rotates the node of a given number of degrees. That's all! You simply have to write any missing text between these marks: - - - - - Describe clearly and shortly what the method does, or what the constant, member variable or signal mean. You can include an example of use if needed. Try to use grammatically correct English, and check the other descriptions to get an impression of the writing style. For setters/getters, the convention is to describe in depth what the method does in the setter, and to say only the minimal in the getter to avoid duplication of the contents. Tags available for improved formatting ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ For more control over the formatting of the help, Godot's XML documentation supports various BBcode-like tags which are interpreted by both the offline in-editor Help, as well as the online documentation (via the reST converter). Those tags are listed below. See existing documentation entries for more examples of how to use them properly. +---------------------------+--------------------------------+-----------------------------------+--------------------------------------------+ | Tag | Effect | Usage | Result | +===========================+================================+===================================+============================================+ | [Class] | Link a class | Move the [Sprite]. | Move the :ref:`class_sprite`. | +---------------------------+--------------------------------+-----------------------------------+--------------------------------------------+ | [method methodname] | Link a method of this class | See [method set_pos]. | See :ref:`set_pos `. | +---------------------------+--------------------------------+-----------------------------------+--------------------------------------------+ | [method Class.methodname] | Link a method of another class | See [method Node2D.set_pos]. | See :ref:`set_pos `. | +---------------------------+--------------------------------+-----------------------------------+--------------------------------------------+ | [b] [/b] | Bold | Some [b]bold[/b] text. | Some **bold** text. | +---------------------------+--------------------------------+-----------------------------------+--------------------------------------------+ | [i] [/i] | Italic | Some [i]italic[/i] text. | Some *italic* text. | +---------------------------+--------------------------------+-----------------------------------+--------------------------------------------+ | [code] [/code] | Monospace | Some [code]monospace[/code] text. | Some ``monospace`` text. | +---------------------------+--------------------------------+-----------------------------------+--------------------------------------------+ | [codeblock] [/codeblock] | Multiline preformatted block | *See below.* | *See below.* | +---------------------------+--------------------------------+-----------------------------------+--------------------------------------------+ The ``[codeblock]`` is meant to be used for pre-formatted code block, using spaces as indentation (tabs will be removed by the reST converter). For example: .. code:: xml [codeblock] func _ready(): var sprite = get_node("Sprite") print(sprite.get_pos()) [/codeblock] Which would be rendered as: :: func _ready(): var sprite = get_node("Sprite") print(sprite.get_pos()) I don't know what this method does! ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Not a problem. Leave it behind for now, and don't forget to notify the missing methods when you request a pull of your changes. Another editor will take care of it. If you wonder what a method does, you can still have a look at its implementation in Godot Engine's source code on GitHub. Also, if you have a doubt, feel free to ask on the `Q&A website `__ and on IRC (freenode, #godotengine).