blob: ae755d9a41eb8e48c003420aefac7c317f4d7035 [file] [log] [blame]
<!DOCTYPE html>
<html lang="en" class="js csstransforms3d">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">
<meta name="generator" content="Hugo 0.70.0" />
<meta name="description" content="">
<meta name="buildDate" content="2022-08-12 13:01:23">
<link rel="shortcut icon" href="https://shardingsphere.apache.org/document/current/img/favicon.png" type="image/x-icon" />
<title>Code of Conduct :: ShardingSphere</title>
<link href="https://shardingsphere.apache.org/community/css/nucleus.css?1660280483" rel="stylesheet">
<link href="https://shardingsphere.apache.org/community/css/font-awesome.min.css?1660280483" rel="stylesheet">
<link href="https://shardingsphere.apache.org/community/css/hybrid.css?1660280483" rel="stylesheet">
<link href="https://shardingsphere.apache.org/community/css/featherlight.min.css?1660280483" rel="stylesheet">
<link href="https://shardingsphere.apache.org/community/css/perfect-scrollbar.min.css?1660280483" rel="stylesheet">
<link href="https://shardingsphere.apache.org/community/css/auto-complete.css?1660280483" rel="stylesheet">
<link href="https://shardingsphere.apache.org/community/css/theme.css?1660280483" rel="stylesheet">
<link href="https://shardingsphere.apache.org/community/css/hugo-theme.css?1660280483" rel="stylesheet">
<link href="https://shardingsphere.apache.org/community/css/theme-white.css?1660280483" rel="stylesheet">
<script src="https://shardingsphere.apache.org/community/js/jquery-2.x.min.js?1660280483"></script>
<script>
var _hmt = _hmt || [];
(function() {
var hm = document.createElement("script");
hm.src = "https://hm.baidu.com/hm.js?d5a1dc8dcf63a64ee55b80de01c7fb1a";
var s = document.getElementsByTagName("script")[0];
s.parentNode.insertBefore(hm, s);
})();
</script>
<script async src="https://www.googletagmanager.com/gtag/js?id=G-HPVGEN405S"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag(){window.dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', 'G-HPVGEN405S');
</script>
<style type="text/css">
:root #header + #content > #left > #rlblock_left{
display:none !important;
}
</style>
</head>
<body class="" data-url="/en/contribute/code-conduct/">
<div class="change-theme">
<div class="wrap">
<span data-item="retro">
<svg t="1649761460834" class="icon" viewBox="0 0 1243 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="2052" width="16" height="16"><path d="M755.093336 61.436797a511.973304 511.973304 0 1 0 207.495466 693.650688l-99.615377-53.757197a398.827204 398.827204 0 1 1-161.637286-540.351253l53.757197-99.615378z" fill="#ffffff" p-id="2053"></path><path d="M1204.971593 188.84501L534.652259 736.217612l-285.242269-364.086159 86.304071-67.653615 216.199012 275.953611 583.649567-476.574007 69.335813 84.987568z" fill="#ffffff" p-id="2054"></path></svg>
Retro
</span>
<span data-item="eyehelp">
<svg t="1649761460834" class="icon" viewBox="0 0 1243 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="2052" width="16" height="16"><path d="M755.093336 61.436797a511.973304 511.973304 0 1 0 207.495466 693.650688l-99.615377-53.757197a398.827204 398.827204 0 1 1-161.637286-540.351253l53.757197-99.615378z" fill="#ffffff" p-id="2053"></path><path d="M1204.971593 188.84501L534.652259 736.217612l-285.242269-364.086159 86.304071-67.653615 216.199012 275.953611 583.649567-476.574007 69.335813 84.987568z" fill="#ffffff" p-id="2054"></path></svg>
Eye care
</span>
<span data-item="haitian">
<svg t="1649761460834" class="icon" viewBox="0 0 1243 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="2052" width="16" height="16"><path d="M755.093336 61.436797a511.973304 511.973304 0 1 0 207.495466 693.650688l-99.615377-53.757197a398.827204 398.827204 0 1 1-161.637286-540.351253l53.757197-99.615378z" fill="#ffffff" p-id="2053"></path><path d="M1204.971593 188.84501L534.652259 736.217612l-285.242269-364.086159 86.304071-67.653615 216.199012 275.953611 583.649567-476.574007 69.335813 84.987568z" fill="#ffffff" p-id="2054"></path></svg>
Haitian
</span>
<span data-item="deep">
<svg t="1649761460834" class="icon" viewBox="0 0 1243 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="2052" width="16" height="16"><path d="M755.093336 61.436797a511.973304 511.973304 0 1 0 207.495466 693.650688l-99.615377-53.757197a398.827204 398.827204 0 1 1-161.637286-540.351253l53.757197-99.615378z" fill="#ffffff" p-id="2053"></path><path d="M1204.971593 188.84501L534.652259 736.217612l-285.242269-364.086159 86.304071-67.653615 216.199012 275.953611 583.649567-476.574007 69.335813 84.987568z" fill="#ffffff" p-id="2054"></path></svg>
Deep
</span>
<span data-item="dark">
<svg t="1649761460834" class="icon" viewBox="0 0 1243 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="2052" width="16" height="16"><path d="M755.093336 61.436797a511.973304 511.973304 0 1 0 207.495466 693.650688l-99.615377-53.757197a398.827204 398.827204 0 1 1-161.637286-540.351253l53.757197-99.615378z" fill="#ffffff" p-id="2053"></path><path d="M1204.971593 188.84501L534.652259 736.217612l-285.242269-364.086159 86.304071-67.653615 216.199012 275.953611 583.649567-476.574007 69.335813 84.987568z" fill="#ffffff" p-id="2054"></path></svg>
Dark
</span>
<span class="active">
<svg t="1649761460834" class="icon" viewBox="0 0 1243 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="2052" width="16" height="16"><path d="M755.093336 61.436797a511.973304 511.973304 0 1 0 207.495466 693.650688l-99.615377-53.757197a398.827204 398.827204 0 1 1-161.637286-540.351253l53.757197-99.615378z" fill="#ffffff" p-id="2053"></path><path d="M1204.971593 188.84501L534.652259 736.217612l-285.242269-364.086159 86.304071-67.653615 216.199012 275.953611 583.649567-476.574007 69.335813 84.987568z" fill="#ffffff" p-id="2054"></path></svg>
Default
</span>
</div>
</div>
<header>
<div class="wrap">
<a href="https://shardingsphere.apache.org/"><img src="https://shardingsphere.apache.org/document/current/img/logo_v3.png" /></a>
<section id="prefooter">
<ul>
<li>
<a class="padding">
<i class="fa fa-fw fa-language"></i>
<div class="select-style">
<select id="select-language" onchange="location = this.value;">
<option id="en" value="/community/en/contribute/code-conduct/" selected>English</option>
<option id="cn" value="/community/cn/contribute/code-conduct/">简体中文</option>
</select>
<svg t="1645437162166" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="2449" width="32" height="32"><path d="M483.072 714.496l30.165333 30.208 415.957334-415.829333a42.837333 42.837333 0 0 0 0-60.288 42.538667 42.538667 0 0 0-60.330667-0.042667l-355.541333 355.413333-355.242667-355.413333a42.496 42.496 0 0 0-60.288 0 42.837333 42.837333 0 0 0-0.085333 60.330667l383.701333 383.872 1.706667 1.749333z" fill="#3D3D3D" p-id="2450"></path></svg>
</div>
</a>
</li>
</ul>
</section>
</div>
</header>
<div class="wrap">
<nav id="sidebar" class="">
<div id="header-wrapper">
<div class="searchbox">
<label for="search-by"><i class="fa fa-search"></i></label>
<input data-search-input id="search-by" type="text" placeholder="Search...">
<span data-search-clear=""><i class="fa fa-close"></i></span>
</div>
<script type="text/javascript" src="https://shardingsphere.apache.org/community/js/lunr.min.js?1660280483"></script>
<script type="text/javascript" src="https://shardingsphere.apache.org/community/js/auto-complete.js?1660280483"></script>
<script type="text/javascript">
var baseurl = "\/en";
</script>
<script type="text/javascript" src="https://shardingsphere.apache.org/community/js/search.js?1660280483"></script>
</div>
<div class="highlightable">
<div class="leftMenu">
<ul class="topics">
<li data-nav-id="/en/contribute/" title="Get Involved" class="dd-item
parent
">
<a href="https://shardingsphere.apache.org/community/en/contribute/">
<i class="collapse" style="display:inline; font-family:'courier';">
<svg class="icon icon-down"
style="display: inline-block;"
viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" width="20" height="20" fill="#777">
<path d="M500.8 604.778667L267.306667 371.392l-45.226667 45.269333 278.741333 278.613334 278.485334-278.613334-45.248-45.248z" p-id="5376" ></path>
</svg>
<svg class="icon icon-right"
style="display: none;"
viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" width="20" height="20" fill="#777">
<path d="M593.450667 512.128L360.064 278.613333l45.290667-45.226666 278.613333 278.762666L405.333333 790.613333l-45.226666-45.269333z" p-id="5605" ></path>
</svg>
</i>
<b>1. </b>Get Involved
</a>
<ul>
<li data-nav-id="/en/contribute/subscribe/" title="Subscribe Guide" class="dd-item ">
<a href="https://shardingsphere.apache.org/community/en/contribute/subscribe/">
<svg viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="5375" width="20" height="20"></svg>
Subscribe Guide
</a>
</li>
<li data-nav-id="/en/contribute/establish-project/" title="How to Set Up Your DEV Environment" class="dd-item ">
<a href="https://shardingsphere.apache.org/community/en/contribute/establish-project/">
<svg viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="5375" width="20" height="20"></svg>
How to Set Up Your DEV Environment
</a>
</li>
<li data-nav-id="/en/contribute/contributor/" title="Contributor Guide" class="dd-item ">
<a href="https://shardingsphere.apache.org/community/en/contribute/contributor/">
<svg viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="5375" width="20" height="20"></svg>
Contributor Guide
</a>
</li>
<li data-nav-id="/en/contribute/committer/" title="Committer Guide" class="dd-item ">
<a href="https://shardingsphere.apache.org/community/en/contribute/committer/">
<svg viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="5375" width="20" height="20"></svg>
Committer Guide
</a>
</li>
<li data-nav-id="/en/contribute/code-conduct/" title="Code of Conduct" class="dd-item active">
<a href="https://shardingsphere.apache.org/community/en/contribute/code-conduct/">
<svg viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="5375" width="20" height="20"></svg>
Code of Conduct
</a>
</li>
<li data-nav-id="/en/contribute/document-conduct/" title="Document Specification" class="dd-item ">
<a href="https://shardingsphere.apache.org/community/en/contribute/document-conduct/">
<svg viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="5375" width="20" height="20"></svg>
Document Specification
</a>
</li>
<li data-nav-id="/en/contribute/issue-conduct/" title="Issue Conduct" class="dd-item ">
<a href="https://shardingsphere.apache.org/community/en/contribute/issue-conduct/">
<svg viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="5375" width="20" height="20"></svg>
Issue Conduct
</a>
</li>
<li data-nav-id="/en/contribute/document-contributor/" title="Documents Contributor Guide" class="dd-item ">
<a href="https://shardingsphere.apache.org/community/en/contribute/document-contributor/">
<svg viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="5375" width="20" height="20"></svg>
Documents Contributor Guide
</a>
</li>
<li data-nav-id="/en/contribute/release/" title="ShardingSphere Release Guide" class="dd-item ">
<a href="https://shardingsphere.apache.org/community/en/contribute/release/">
<svg viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="5375" width="20" height="20"></svg>
ShardingSphere Release Guide
</a>
</li>
<li data-nav-id="/en/contribute/release-elasticjob/" title="ElasticJob Release Guide" class="dd-item ">
<a href="https://shardingsphere.apache.org/community/en/contribute/release-elasticjob/">
<svg viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="5375" width="20" height="20"></svg>
ElasticJob Release Guide
</a>
</li>
<li data-nav-id="/en/contribute/release-elasticjob-ui/" title="ElasticJob-UI Release Guide" class="dd-item ">
<a href="https://shardingsphere.apache.org/community/en/contribute/release-elasticjob-ui/">
<svg viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="5375" width="20" height="20"></svg>
ElasticJob-UI Release Guide
</a>
</li>
<li data-nav-id="/en/contribute/2fa/" title="2FA" class="dd-item ">
<a href="https://shardingsphere.apache.org/community/en/contribute/2fa/">
<svg viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="5375" width="20" height="20"></svg>
2FA
</a>
</li>
<li data-nav-id="/en/contribute/icla/" title="Sign ICLA Guide" class="dd-item ">
<a href="https://shardingsphere.apache.org/community/en/contribute/icla/">
<svg viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="5375" width="20" height="20"></svg>
Sign ICLA Guide
</a>
</li>
<li data-nav-id="/en/contribute/vote/" title="New committer voting process" class="dd-item ">
<a href="https://shardingsphere.apache.org/community/en/contribute/vote/">
<svg viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="5375" width="20" height="20"></svg>
New committer voting process
</a>
</li>
</ul>
</li>
<li data-nav-id="/en/powered-by/" title="Powered By ShardingSphere" class="dd-item
">
<a href="https://shardingsphere.apache.org/community/en/powered-by/">
<i class="collapse" style="display:inline; font-family:'courier';">
<svg viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="5375" width="20" height="20"></svg>
</i>
<b>2. </b>Powered By ShardingSphere
</a>
</li>
<li data-nav-id="/en/team/" title="Team" class="dd-item
">
<a href="https://shardingsphere.apache.org/community/en/team/">
<i class="collapse" style="display:inline; font-family:'courier';">
<svg viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="5375" width="20" height="20"></svg>
</i>
<b>3. </b>Team
</a>
</li>
<li data-nav-id="/en/security/" title="Security" class="dd-item
">
<a href="https://shardingsphere.apache.org/community/en/security/">
<i class="collapse" style="display:inline; font-family:'courier';">
<svg viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="5375" width="20" height="20"></svg>
</i>
<b>4. </b>Security
</a>
</li>
</ul>
</div>
<a class="padding" href="https://shardingsphere.apache.org/pdf/shardingsphere_docs_en.pdf">
Download PDF
</a>
<section id="footer">
<p></p>
</section>
</div>
</nav>
<section id="body">
<div id="overlay"></div>
<div class="padding highlightable">
<div>
<div id="top-bar">
<div id="top-github-link">
<a class="github-link" title='Edit this page' href="https://github.com/apache/shardingsphere/tree/master/docs/community/content/contribute/code-conduct.en.md" target="blank">
<i class="fa fa-code-fork"></i>
<span id="top-github-link-text">Edit this page</span>
</a>
</div>
<div id="breadcrumbs" itemscope="" itemtype="http://data-vocabulary.org/Breadcrumb">
<span id="sidebar-toggle-span">
<a href="#" id="sidebar-toggle" data-sidebar-toggle="">
<i class="fa fa-bars"></i>
</a>
</span>
<span class="links">
<a href='https://shardingsphere.apache.org/community/en/'>ShardingSphere</a> > <a href='https://shardingsphere.apache.org/community/en/contribute/'>Get Involved</a> > Code of Conduct
</span>
</div>
</div>
</div>
<div id="chapter">
<div id="body-inner">
<nav id="TableOfContents">
<ul>
<li><a href="#development-guidelines">Development Guidelines</a></li>
<li><a href="#contributor-covenant-submitting-of-conduct">Contributor Covenant Submitting of Conduct</a></li>
<li><a href="#contributor-covenant-code-of-conduct">Contributor Covenant Code of Conduct</a></li>
<li><a href="#contributor-covenant-unit-test-of-conduct">Contributor Covenant Unit Test of Conduct</a></li>
<li><a href="#contributor-covenant-g4-code-of-conduct">Contributor Covenant G4 Code of Conduct</a></li>
</ul>
</nav>
<p>The following code of conduct is based on full compliance with <a href="https://www.apache.org/foundation/policies/conduct.html">ASF CODE OF CONDUCT</a>.</p>
<h2 id="development-guidelines">Development Guidelines</h2>
<ul>
<li>Write codes with heart. Pursue clean, simplified and extremely elegant codes. Agree with concepts in &lt;Refactoring: Improving the Design of Existing Code&gt; and &lt;Clean Code: A Handbook of Agile Software Craftsmanship&gt;.</li>
<li>Be familiar with codes already had, to keep consistent with the style and use.</li>
<li>Highly reusable, no duplicated codes or configurations.</li>
<li>Delete codes out of use in time.</li>
</ul>
<h2 id="contributor-covenant-submitting-of-conduct">Contributor Covenant Submitting of Conduct</h2>
<ul>
<li>Make sure Maven build process success. Run <code>mvn -T 1C clean install</code> or <code>./mvnw -T 1C clean install</code> command in shell to start Maven build process. On which directory to run Maven build process, there are 2 alternatives, we could select one of them: 1) if we&rsquo;re not familiar with Apache ShardingSphere, then we could run it on project root directory, 2) if we know which modules will be affected by the changes, then we could run it on these modules to save build time.</li>
<li>Make sure the test coverage rate is not lower than the master branch.</li>
<li>Careful consideration for each <code>pull request</code>; Small and frequent <code>pull request</code> with complete unit function is welcomed.</li>
<li>Conform to <code>Contributor Covenant Code of Conduct</code> below.</li>
<li>If using IDEA, you can import the recommended <code>src/resources/code-style-idea.xml</code>.</li>
<li>Through the uniform code style of spotless, execute the <code>mvn spotless:apply</code> formatted code.</li>
</ul>
<h2 id="contributor-covenant-code-of-conduct">Contributor Covenant Code of Conduct</h2>
<ul>
<li>Use linux line separators.</li>
<li>No meaningless blank lines. Please extract private methods to instead of blank lines if too long method body or different logic code fragments.</li>
<li>Use meaningful class, method and variable names, avoid to use abbreviate.</li>
<li>Return values are named with <code>result</code>; Variables in the loop structure are named with <code>each</code>; Replace <code>each</code> with <code>entry</code> in map.</li>
<li>Exceptions when catch are named with <code>ex</code>; Exceptions when catch but do nothing are named with <code>ignored</code>.</li>
<li>Name property files with <code>Spinal Case</code>(a variant of <code>Snake Case</code> which uses hyphens <code>-</code> to separate words).</li>
<li>Split codes that need to add notes with it into small methods, which are explained with method names.</li>
<li>Have constants on the left and variable on the right in <code>=</code> and <code>equals</code> conditional expressions; Have variable on the left and constants on the right in <code>greater than</code> and <code>less than</code> conditional expressions.</li>
<li>Beside using same names as input parameters and global fields in assign statement, avoid using <code>this</code> modifier.</li>
<li>Design class as <code>final</code> class except abstract class for extend.</li>
<li>Make nested loop structures a new method.</li>
<li>Order of members definition and parameters should be consistent during classes and methods.</li>
<li>Use guard clauses in priority.</li>
<li>Minimize the access permission for classes and methods.</li>
<li>Private method should be just next to the method in which it is used; Multiple private methods should be in the same as the appearance order of original methods.</li>
<li>No <code>null</code> parameters or return values.</li>
<li>Replace if else return and assign statement with ternary operator in priority.</li>
<li>Replace constructors, getters, setter methods and log variable with lombok in priority.</li>
<li>Use <code>LinkedList</code> in priority. Use <code>ArrayList</code> for use index to get element only.</li>
<li>Use capacity based <code>Collection</code> such as <code>ArrayList</code>, <code>HashMap</code> must indicate initial capacity to avoid recalculate capacity.</li>
<li>Use English in all the logs and javadoc.</li>
<li>Include Javadoc, todo and fixme only in the comments.</li>
<li>Only <code>public</code> classes and methods need javadoc, other methods, classes and override methods do not need javadoc.</li>
<li>conditional operator(<expression1> ? <expression2> : <expression3>) <code>nested use</code> is forbidden.</li>
<li>Avoid using Java Stream in hot methods, unless the performance of using Stream is better than using loop in that situation.</li>
</ul>
<h2 id="contributor-covenant-unit-test-of-conduct">Contributor Covenant Unit Test of Conduct</h2>
<ul>
<li>Test codes and production codes should follow the same kind of code of conduct.</li>
<li>Unit test should follow AIR (Automatic, Independent, Repeatable) principle.
<ul>
<li>Automatic: Unit test should run automatically, not interactively. Check test result manually and <code>System.out</code>, <code>log</code> are prohibited, use assert to check test results.</li>
<li>Independent: Call each other and sequence dependency during unit test cases are prohibited. Every test case should run independent.</li>
<li>Repeatable: Unit test case should not dependency external environment, they can run repeatable.</li>
</ul>
</li>
<li>Unit test should follow BCDE (Border, Correct, Design, Error) design principle.
<ul>
<li>Border: Border value test, test for loop border, special value and value sequence to get expect result.</li>
<li>Correct: Correct value test, test for correct value to get expect result.</li>
<li>Design: Design with production codes.</li>
<li>Error: Error value test, test for error input, exception to get expect result.</li>
</ul>
</li>
<li>Without particular reasons, test cases should be fully covered.</li>
<li>Test cases should be fully covered expect simply <code>getter /setter</code> methods, and declared static codes of SPI, such as: <code>getType / getOrder</code>.</li>
<li>Every test case need precised assertion.</li>
<li>Environment preparation codes should be separate from test codes.</li>
<li>Only those that relate to junit <code>Assert</code>, hamcrest <code>CoreMatchers</code> and <code>Mockito</code> can use static import.</li>
<li>For single parameter asserts, <code>assertTrue</code>, <code>assertFalse</code>, <code>assertNull</code> and <code>assertNotNull</code> should be used.</li>
<li>For multiple parameter asserts, <code>assertThat</code> should be used.</li>
<li>For accurate asserts, try not to use <code>not</code>, <code>containsString</code> to make assertions.</li>
<li>Actual values of test cases should be named <code>actualXXX</code>, expected values <code>expectedXXX</code>.</li>
<li>Class for test case and <code>@Test</code> annotation do not need javadoc.</li>
<li>Mockito mockStatic and mockConstruction methods must be used with try-with-resource or closed in the teardown method to avoid leaks.</li>
</ul>
<h2 id="contributor-covenant-g4-code-of-conduct">Contributor Covenant G4 Code of Conduct</h2>
<ul>
<li>Common Conduct
<ul>
<li>Every line cannot over <code>200</code> chars, guarantee every line have complete semantics.</li>
</ul>
</li>
<li>Lexer Conduct
<ul>
<li>Every rule should be in single line, no empty line between rules.</li>
<li>Rule of lexer name should capitalization. If name composite with more than one word, use <code>underline</code> to separate. Rule name of <code>DataType</code> and <code>Symbol</code> should end with <code>underline</code>. If rule name is conflicted with ANTLR&rsquo;s keyword, should take an <code>underline</code> behind rule name.</li>
<li>For private rule in lexer should use <code>fragment</code>, rule with <code>fragment</code> should define behind of public rule which they served.</li>
<li>Common rule of lexer should put in file <code>Keyword.g4</code>, every database may has customized rule file by themselves. For example: <code>MySQLKeyword.g4</code>.</li>
</ul>
</li>
<li>Parser Conduct
<ul>
<li>After every rule finish, blank line should no indents.</li>
<li>No space before rule name definition. One space between <code>colon</code> and rule, <code>semicolon</code> should take a new line and keep indents (including blank lines) consistent with the previous one.</li>
<li>If a rule&rsquo;s branch is over than <code>5</code>, every branch take a new line.</li>
<li>Rule name of parser should same with java variable&rsquo;s camel case.</li>
<li>Define separate files for every SQL type, file name should consist of <code>database</code> + <code>SQL type</code> + <code>Statement</code>. For example: <code>MySQLDQLStatement.g4</code>.</li>
<li>Each <code>SQLStatement</code> and <code>SQLSegment</code> implementation class must add lombok <code>@ToString</code> annotation, if the implementation class inherits a parent class, you need to add <code>callSuper = true</code> parameter.</li>
</ul>
</li>
</ul>
<footer class=" footline" >
</footer>
</div>
</div>
</div>
<div id="navigation" >
<a class="nav nav-prev" href="https://shardingsphere.apache.org/community/en/contribute/committer/" title="Committer Guide"> <i class="fa fa-long-arrow-left fa-lg"></i> Previous</a>
<a class="nav nav-next" href="https://shardingsphere.apache.org/community/en/contribute/document-conduct/" title="Document Specification" style="margin-right: 0px;">Next<i class="fa fa-long-arrow-right fa-lg"></i></a>
</div>
</section>
</div>
<div style="left: -1000px; overflow: scroll; position: absolute; top: -1000px; border: none; box-sizing: content-box; height: 200px; margin: 0px; padding: 0px; width: 200px;">
<div style="border: none; box-sizing: content-box; height: 200px; margin: 0px; padding: 0px; width: 200px;"></div>
</div>
<script src="https://shardingsphere.apache.org/community/js/clipboard.min.js?1660280483"></script>
<script src="https://shardingsphere.apache.org/community/js/perfect-scrollbar.min.js?1660280483"></script>
<script src="https://shardingsphere.apache.org/community/js/perfect-scrollbar.jquery.min.js?1660280483"></script>
<script src="https://shardingsphere.apache.org/community/js/jquery.sticky.js?1660280483"></script>
<script src="https://shardingsphere.apache.org/community/js/featherlight.min.js?1660280483"></script>
<script src="https://shardingsphere.apache.org/community/js/html5shiv-printshiv.min.js?1660280483"></script>
<script src="https://shardingsphere.apache.org/community/js/highlight.pack.js?1660280483"></script>
<script>hljs.initHighlightingOnLoad();</script>
<script src="https://shardingsphere.apache.org/community/js/modernizr.custom.71422.js?1660280483"></script>
<script src="https://shardingsphere.apache.org/community/js/learn.js?1660280483"></script>
<script src="https://shardingsphere.apache.org/community/js/hugo-learn.js?1660280483"></script>
<script>
try{
function log(fileName, category, locale){
window._hmt.push(['_trackEvent', 'document', 'download', locale ? 'PDF_'+locale : fileName]);
gtag('event', 'Downloads', {
'event_category' : locale ? 'PDF' : category,
'event_label' : locale ? locale+'.pdf' : fileName
});
}
$('.padding[href*=shardingsphere]').on('click', function(){
var locale = /cn/.test(location.pathname) ?'cn':'en';
log('','', locale)
})
function getFileName(str){
var strs = str.split('/');
return strs[strs.length - 1]
}
$('a[href$="src.zip"]').on('click', function(){
log(getFileName($(this).attr('href')), "SRC")
})
$('a[href$="zip.asc"]').on('click', function(){
log(getFileName($(this).attr('href')), "ASC")
})
$('a[href$="zip.sha512"]').on('click', function(){
log(getFileName($(this).attr('href')), "SHA512")
})
$('a[href$="tar.gz.asc"]').on('click', function(){
log(getFileName($(this).attr('href')), "ASC")
})
$('a[href$="tar.gz.sha512"]').on('click', function(){
log(getFileName($(this).attr('href')), "SHA512")
})
$('a[href$="tar.gz"]').on('click', function(){
log(getFileName($(this).attr('href')), "TAR")
})
}catch(ex){}
</script>
</body>
</html>