blob: 1f6dbdd84ff15daeef411f2ffdf860557b8e4e96 [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="2023-06-08 18:34:29">
<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?1686220469" rel="stylesheet">
<link href="https://shardingsphere.apache.org/community/css/font-awesome.min.css?1686220469" rel="stylesheet">
<link href="https://shardingsphere.apache.org/community/css/hybrid.css?1686220469" rel="stylesheet">
<link href="https://shardingsphere.apache.org/community/css/featherlight.min.css?1686220469" rel="stylesheet">
<link href="https://shardingsphere.apache.org/community/css/perfect-scrollbar.min.css?1686220469" rel="stylesheet">
<link href="https://shardingsphere.apache.org/community/css/auto-complete.css?1686220469" rel="stylesheet">
<link href="https://shardingsphere.apache.org/community/css/theme.css?1686220469" rel="stylesheet">
<link href="https://shardingsphere.apache.org/community/css/hugo-theme.css?1686220469" rel="stylesheet">
<link href="https://shardingsphere.apache.org/community/css/theme-white.css?1686220469" rel="stylesheet">
<script src="https://shardingsphere.apache.org/community/js/jquery-2.x.min.js?1686220469"></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/involved/conduct/code/">
<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/involved/conduct/code/" selected>English</option>
<option id="cn" value="/community/cn/involved/conduct/code/">简体中文</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?1686220469"></script>
<script type="text/javascript" src="https://shardingsphere.apache.org/community/js/auto-complete.js?1686220469"></script>
<script type="text/javascript">
var baseurl = "\/en";
</script>
<script type="text/javascript" src="https://shardingsphere.apache.org/community/js/search.js?1686220469"></script>
</div>
<div class="highlightable">
<div class="leftMenu">
<ul class="topics">
<li data-nav-id="/en/involved/" title="Get Involved" class="dd-item
parent
">
<a href="https://shardingsphere.apache.org/community/en/involved/">
<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/involved/subscribe/" title="Subscribe Guide" class="dd-item ">
<a href="https://shardingsphere.apache.org/community/en/involved/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/involved/contribute/" title="Contribute Guide" class="dd-item
">
<a href="https://shardingsphere.apache.org/community/en/involved/contribute/">
<i class="collapse" style="display:inline; font-family:'courier';">
<svg class="icon icon-down"
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="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: 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="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>
Contribute Guide
</a>
<ul>
<li data-nav-id="/en/involved/contribute/contributor/" title="Contributor Guide" class="dd-item ">
<a href="https://shardingsphere.apache.org/community/en/involved/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/involved/contribute/dev-env/" title="How to Set Up Your DEV Environment" class="dd-item ">
<a href="https://shardingsphere.apache.org/community/en/involved/contribute/dev-env/">
<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/involved/contribute/document/" title="Documents Contribute Guide" class="dd-item ">
<a href="https://shardingsphere.apache.org/community/en/involved/contribute/document/">
<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 Contribute Guide
</a>
</li>
</ul>
</li>
<li data-nav-id="/en/involved/conduct/" title="Contribution Conduct" class="dd-item
parent
">
<a href="https://shardingsphere.apache.org/community/en/involved/conduct/">
<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>
Contribution Conduct
</a>
<ul>
<li data-nav-id="/en/involved/conduct/issue/" title="Issue of Conduct" class="dd-item ">
<a href="https://shardingsphere.apache.org/community/en/involved/conduct/issue/">
<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 of Conduct
</a>
</li>
<li data-nav-id="/en/involved/conduct/code/" title="Code of Conduct" class="dd-item active">
<a href="https://shardingsphere.apache.org/community/en/involved/conduct/code/">
<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/involved/conduct/document/" title="Document of Conduct" class="dd-item ">
<a href="https://shardingsphere.apache.org/community/en/involved/conduct/document/">
<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 of Conduct
</a>
</li>
</ul>
</li>
<li data-nav-id="/en/involved/committer/" title="Committer Guide" class="dd-item
">
<a href="https://shardingsphere.apache.org/community/en/involved/committer/">
<i class="collapse" style="display:inline; font-family:'courier';">
<svg class="icon icon-down"
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="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: 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="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>
Committer Guide
</a>
<ul>
<li data-nav-id="/en/involved/committer/responsibilities/" title="Responsibilities &amp; Routine" class="dd-item ">
<a href="https://shardingsphere.apache.org/community/en/involved/committer/responsibilities/">
<svg viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="5375" width="20" height="20"></svg>
Responsibilities &amp; Routine
</a>
</li>
<li data-nav-id="/en/involved/committer/vote/" title="New committer voting process" class="dd-item ">
<a href="https://shardingsphere.apache.org/community/en/involved/committer/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>
<li data-nav-id="/en/involved/committer/icla/" title="Sign ICLA Guide" class="dd-item ">
<a href="https://shardingsphere.apache.org/community/en/involved/committer/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/involved/committer/2fa/" title="2FA" class="dd-item ">
<a href="https://shardingsphere.apache.org/community/en/involved/committer/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>
</ul>
</li>
<li data-nav-id="/en/involved/release/" title="Release Guide" class="dd-item
">
<a href="https://shardingsphere.apache.org/community/en/involved/release/">
<i class="collapse" style="display:inline; font-family:'courier';">
<svg class="icon icon-down"
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="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: 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="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>
Release Guide
</a>
<ul>
<li data-nav-id="/en/involved/release/shardingsphere/" title="ShardingSphere Release Guide" class="dd-item ">
<a href="https://shardingsphere.apache.org/community/en/involved/release/shardingsphere/">
<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/involved/release/shardingsphere-on-cloud/" title="ShardingSphere on Cloud Release Guide" class="dd-item ">
<a href="https://shardingsphere.apache.org/community/en/involved/release/shardingsphere-on-cloud/">
<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 on Cloud Release Guide
</a>
</li>
<li data-nav-id="/en/involved/release/elasticjob/" title="ElasticJob Release Guide" class="dd-item ">
<a href="https://shardingsphere.apache.org/community/en/involved/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/involved/release/elasticjob-ui/" title="ElasticJob UI Release Guide" class="dd-item ">
<a href="https://shardingsphere.apache.org/community/en/involved/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>
</ul>
</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/involved/conduct/code.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/involved/'>Get Involved</a> > <a href='https://shardingsphere.apache.org/community/en/involved/conduct/'>Contribution Conduct</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-of-conduct">Contributor Covenant G4 of Conduct</a></li>
<li><a href="#github-action-of-conduct">GitHub Action 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>Conform to <code>Contributor Covenant Code of Conduct</code> below.</li>
<li>Make sure Maven build process success. Run <code>./mvnw clean install -B -T1C -Dmaven.javadoc.skip -Dmaven.jacoco.skip -e</code> command in shell to start Maven build process.</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>Through the uniform code style of spotless, execute the <code>mvn spotless:apply</code> formatted code.</li>
<li>If using IDEA, you can import the recommended <code>src/resources/code-style-idea.xml</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, class and method name avoid to use abbreviation. Some variables could use abbreviation.
<ul>
<li>Variable <code>arguments</code> could abbreviate to <code>args</code>;</li>
<li>Variable <code>parameters</code> could abbreviate to <code>params</code>;</li>
<li>Variable <code>environment</code> could abbreviate to <code>env</code>;</li>
<li>Variable <code>properties</code> could abbreviate to <code>props</code>;</li>
<li>Variable <code>configuration</code> could abbreviate to <code>config</code>.</li>
</ul>
</li>
<li>Abbreviation composed less than 3 characters should be uppercase, more than 3 characters must use camel case naming rule.
<ul>
<li>Example for abbreviation composed less than 3 characters: SQL92Lexer, XMLTransfer, MySQLAdminExecutorCreator;</li>
<li>Example for abbreviation composed more than 3 characters: JdbcUrlAppender, YamlAgentConfigurationSwapper;</li>
<li>A variable composed of abbreviation should use lower camel case: mysqlAuthenticationMethod, sqlStatement, mysqlConfig.</li>
</ul>
</li>
<li>Except return an input parameter as result, returning variable should be 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 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, the Javadoc for the user API and SPI needs to be written clearly and comprehensively, other methods, classes and override methods do not need javadoc.</li>
<li>Replace if else return and assign statement with ternary operator in priority.</li>
<li>Nested using ternary operator is forbidden.</li>
<li>Use forward semantics in priority for better understanding code logic in conditional expressions. For example: <code>if (null == param) {} else {}</code>.</li>
<li>Use concentrate <code>@SuppressWarnings(&quot;xxx&quot;)</code> instead of <code>@SuppressWarnings(&quot;all&quot;)</code>.</li>
<li>Avoid using Java Stream in hot methods, unless the performance of using Stream is better than using loop in that situation.</li>
<li>Utility class should be named in the form of <code>xxUtils</code>.</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, try not to use <code>not</code>, <code>containsString</code> to make assertions.</li>
<li>Environment preparation codes should be separate from test codes.</li>
<li>Only those that relate to <code>Mockito</code>, junit <code>Assertions</code>, hamcrest <code>CoreMatchers</code> and <code>MatcherAssert</code> can use static import.</li>
<li>Usage of assertion methods: for boolean type asserts, <code>assertTrue</code> and <code>assertFalse</code> should be used, <code>assertNull</code> and <code>assertNotNull</code> should be used to assert whether the assertion is null, and <code>assertThat</code> should be used for other scenarios.</li>
<li>Usage of assertion methods:
<ul>
<li>Use <code>assertTrue</code> and <code>assertFalse</code> for boolean value;</li>
<li>Use <code>assertNull</code> and <code>assertNotNull</code> for null value;</li>
<li>Use <code>assertThat</code> for other values.</li>
</ul>
</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 <code>mockStatic</code> and <code>mockConstruction</code> methods must be used with try-with-resource or closed in the teardown method to avoid leaks.</li>
<li>Using <code>mock</code> should follow following specifications:
<ul>
<li>Using <code>mock</code> when unit tests need to connect to an environment;</li>
<li>Using <code>mock</code> when unit tests contain objects that are not easy to build, for example, objects that are more than two layers nested and unrelated to the test.</li>
<li>When mocking static methods or constructors, it is recommended to use the testing framework&rsquo;s <code>AutoMockExtension</code> and <code>StaticMockSettings</code> to release resources automatically; If using Mockito&rsquo;s <code>mockStatic</code> and <code>mockConstruction</code> methods, please use <code>try-with-resource</code> or close them in the cleanup method to avoid resource leaks.</li>
<li>When verifying only one invocation, there is no need to use <code>times(1)</code> parameter, please use the single-argument method of <code>verify</code>.</li>
</ul>
</li>
</ul>
<h2 id="contributor-covenant-g4-of-conduct">Contributor Covenant G4 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 have 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>
</ul>
</li>
</ul>
<h2 id="github-action-of-conduct">GitHub Action of Conduct</h2>
<ul>
<li>Workflow file name must end with <code>.yml</code>.</li>
<li>Workflow file name must consist with the lowercase of <code>triggerType-actionType</code>, for example: <code>nightly-check.yml</code>. Omit trigger type for pull_request, for example: <code>check.yml</code>.</li>
<li>Trigger type includes: pull_request (without prefix), nightly.</li>
<li>Action type includes: check, ci, e2e, build.</li>
<li><code>name</code> property in workflow file should be same with file name, Words separated by <code>-</code>, add space between <code>-</code> and words, first letter of every word should be capital, for example: <code>Nightly - Check</code>.</li>
<li><code>job</code> property in workflow should be unique in that workflow file.</li>
<li>When using <code>matrix</code> property, must add job parallelism limit to 5: <code>max-parallel: 5</code>.</li>
<li>Must set timeout for job, max timeout is 1 hour. For example: <code>timeout-minutes: 10</code>.</li>
</ul>
<footer class=" footline" >
</footer>
</div>
</div>
</div>
<div id="navigation" >
<a class="nav nav-prev" href="https://shardingsphere.apache.org/community/en/involved/conduct/issue/" title="Issue of Conduct"> <i class="fa fa-long-arrow-left fa-lg"></i> Previous</a>
<a class="nav nav-next" href="https://shardingsphere.apache.org/community/en/involved/conduct/document/" title="Document of Conduct" 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?1686220469"></script>
<script src="https://shardingsphere.apache.org/community/js/perfect-scrollbar.min.js?1686220469"></script>
<script src="https://shardingsphere.apache.org/community/js/perfect-scrollbar.jquery.min.js?1686220469"></script>
<script src="https://shardingsphere.apache.org/community/js/jquery.sticky.js?1686220469"></script>
<script src="https://shardingsphere.apache.org/community/js/featherlight.min.js?1686220469"></script>
<script src="https://shardingsphere.apache.org/community/js/html5shiv-printshiv.min.js?1686220469"></script>
<script src="https://shardingsphere.apache.org/community/js/highlight.pack.js?1686220469"></script>
<script>hljs.initHighlightingOnLoad();</script>
<script src="https://shardingsphere.apache.org/community/js/modernizr.custom.71422.js?1686220469"></script>
<script src="https://shardingsphere.apache.org/community/js/learn.js?1686220469"></script>
<script src="https://shardingsphere.apache.org/community/js/hugo-learn.js?1686220469"></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>