Added a contributing guide.
This commit is contained in:
parent
2dd5d996c4
commit
a8bf6be00e
|
@ -0,0 +1,80 @@
|
|||
# Contributing
|
||||
|
||||
Everybody is more than welcome to contribute to Oga, no matter how small the
|
||||
change. To keep everything running smoothly there are a few guidelines that one
|
||||
should follow. These are as following:
|
||||
|
||||
* When changing code make sure to write RSpec tests for the changes.
|
||||
* Document code using YARD. At the very least the method arguments and return
|
||||
value(s) should be documented.
|
||||
* Wrap lines at 79 characters per line.
|
||||
* Git commits should have a <= 50 character summary, optionally followed by a
|
||||
blank line and a more in depth description of 79 characters per line.
|
||||
|
||||
## Editor Setup
|
||||
|
||||
Whatever editor you use doesn't matter as long as it can do two things:
|
||||
|
||||
* Use spaces for indentation.
|
||||
* Hard wrap lines at 79 characters per line.
|
||||
|
||||
To make this process easier Oga comes with an [EditorConfig][editorconfig]
|
||||
configuration file. If your editor supports this it will automatically apply
|
||||
the required settings for you.
|
||||
|
||||
## Hacking on Oga
|
||||
|
||||
Assuming you have a local Git clone of Oga, the first step should be to install
|
||||
all the required Gems:
|
||||
|
||||
bundle install
|
||||
|
||||
Next up, compile the required files and run the tests:
|
||||
|
||||
rake
|
||||
|
||||
You can compile the various parsers/extensions by running:
|
||||
|
||||
rake generate
|
||||
|
||||
For more information about the available tasks, run `rake -T`.
|
||||
|
||||
## Extension Setup
|
||||
|
||||
Oga uses native extensions for the XML lexer. This is due to Ruby sadly not
|
||||
being fast enough to chew through large amounts of XML (at least when using
|
||||
Ragel). For example, the benchmark `benchmark/lexer/big_xml_time.rb` would take
|
||||
around 6 seconds to complete on MRI 2.1.1. The native extensions on the other
|
||||
hand can complete this benchmark in roughly 600 milliseconds.
|
||||
|
||||
Oga has two native extensions: one for MRI/Rubinius (written in C) and one for
|
||||
JRuby (written in Java). Both extensions share the same Ragel grammar, found in
|
||||
`ext/ragel/base_lexer.rl`. This grammar is set up in such a way that the syntax
|
||||
is compatible with both C and Java. Specific details on how the grammar is used
|
||||
can be found in the documentation of said grammar file.
|
||||
|
||||
The native extensions call back in to Ruby to actually perform the task of
|
||||
creating tokens, validating input and so forth. As a result of this you'll most
|
||||
likely never have to touch the C and/or Java code when changing the behaviour
|
||||
of the lexer.
|
||||
|
||||
To compile the extensions run `rake generate` using your Ruby implementation of
|
||||
choice. Note that extensions compiled for MRI can not be used on Rubinius and
|
||||
vice-versa. To compile the JRuby extension you'll have to switch your active
|
||||
Ruby version to JRuby first.
|
||||
|
||||
## Contact
|
||||
|
||||
In case you have any further questions or would like to receive feedback before
|
||||
submitting a change, feel free to contact me. You can either open an issue,
|
||||
send a tweet to [@yorickpeterse][twitter] or send an Email to
|
||||
<yorickpeterse@gmail.com>.
|
||||
|
||||
## Legal
|
||||
|
||||
By contributing to Oga you agree with both the Developer's Certificate of
|
||||
origin, found in `doc/DCO.md` and the license, found in `LICENSE`. This applies
|
||||
to all content in this repository unless stated otherwise.
|
||||
|
||||
[editorconfig]:http://editorconfig.org/
|
||||
[twitter]: https://twitter.com/yorickpeterse
|
Loading…
Reference in New Issue