code-style.html 25 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. <!doctype html>
  2. <html lang="zh-CN">
  3. <head>
  4. <meta charset="utf-8" />
  5. <meta name="viewport" content="width=device-width,initial-scale=1" />
  6. <meta name="generator" content="VuePress 2.0.0-rc.14" />
  7. <style>
  8. :root {
  9. --c-bg: #fff;
  10. }
  11. html.dark {
  12. --c-bg: #22272e;
  13. }
  14. html,
  15. body {
  16. background-color: var(--c-bg);
  17. }
  18. </style>
  19. <script>
  20. const userMode = localStorage.getItem('vuepress-color-scheme')
  21. const systemDarkMode =
  22. window.matchMedia &&
  23. window.matchMedia('(prefers-color-scheme: dark)').matches
  24. if (userMode === 'dark' || (userMode !== 'light' && systemDarkMode)) {
  25. document.documentElement.classList.toggle('dark', true)
  26. }
  27. </script>
  28. <title>代码风格指南</title><meta name="description" content="">
  29. <link rel="preload" href="/assets/style-BDZmSSuf.css" as="style"><link rel="stylesheet" href="/assets/style-BDZmSSuf.css">
  30. <link rel="modulepreload" href="/assets/app-CmntYhet.js"><link rel="modulepreload" href="/assets/code-style.html-Dft_PBAz.js">
  31. <link rel="prefetch" href="/assets/index.html-DhRPs45k.js" as="script"><link rel="prefetch" href="/assets/index.html-BCLmUi-h.js" as="script"><link rel="prefetch" href="/assets/dragonos-community-conference.html-CWqW2Ctw.js" as="script"><link rel="prefetch" href="/assets/index.html-Cs92j2wW.js" as="script"><link rel="prefetch" href="/assets/cheat-sheet.html-DJabuBuk.js" as="script"><link rel="prefetch" href="/assets/code_of_conduct.html-BRXoVhOx.js" as="script"><link rel="prefetch" href="/assets/expectation.html-D4MbIHpL.js" as="script"><link rel="prefetch" href="/assets/github-workflow.html-DDOKpHFX.js" as="script"><link rel="prefetch" href="/assets/pull-requests.html-CUv4vZRf.js" as="script"><link rel="prefetch" href="/assets/resources.html-D_SKq8b5.js" as="script"><link rel="prefetch" href="/assets/index.html-CaVU4dIR.js" as="script"><link rel="prefetch" href="/assets/annual-reports.html-3Zax109j.js" as="script"><link rel="prefetch" href="/assets/community-membership.html-hG8VE2MV.js" as="script"><link rel="prefetch" href="/assets/dev-group.html-DCqkA65d.js" as="script"><link rel="prefetch" href="/assets/sig-wg-lifecycle.html-BVIdXIwQ.js" as="script"><link rel="prefetch" href="/assets/staff-info.html-J8TenB4n.js" as="script"><link rel="prefetch" href="/assets/index.html-B-cznJ4t.js" as="script"><link rel="prefetch" href="/assets/mentee-guide.html-OSMvyUzd.js" as="script"><link rel="prefetch" href="/assets/mentor-guide.html-DrxyuSxS.js" as="script"><link rel="prefetch" href="/assets/index.html-BwGOSl2V.js" as="script"><link rel="prefetch" href="/assets/index.html-CpIeeGQP.js" as="script"><link rel="prefetch" href="/assets/wg-list.html-NLo8doQM.js" as="script"><link rel="prefetch" href="/assets/index.html-DgSI4vRJ.js" as="script"><link rel="prefetch" href="/assets/sig-charter-guide.html-DcbPGLnG.js" as="script"><link rel="prefetch" href="/assets/index.html-D68EhPQF.js" as="script"><link rel="prefetch" href="/assets/educational-learning-courses.html-DYOCBrG9.js" as="script"><link rel="prefetch" href="/assets/ospp.html-25c83WzB.js" as="script"><link rel="prefetch" href="/assets/project-based-mentorship.html-BxGdnTkl.js" as="script"><link rel="prefetch" href="/assets/index.html-Dn1WaXao.js" as="script"><link rel="prefetch" href="/assets/charter.html-DtsiAJuU.js" as="script"><link rel="prefetch" href="/assets/contributing.html-BpSgDmJn.js" as="script"><link rel="prefetch" href="/assets/index.html-DT5VyEaA.js" as="script"><link rel="prefetch" href="/assets/charter.html-BhtRD8B_.js" as="script"><link rel="prefetch" href="/assets/contributing.html-DnbGEwHd.js" as="script"><link rel="prefetch" href="/assets/index.html-yAAvFzKW.js" as="script"><link rel="prefetch" href="/assets/charter.html-DmjcMf1C.js" as="script"><link rel="prefetch" href="/assets/contributing.html-DvlSk6rP.js" as="script"><link rel="prefetch" href="/assets/index.html-B9Ct9KCJ.js" as="script"><link rel="prefetch" href="/assets/charter.html-Sp9QwJSp.js" as="script"><link rel="prefetch" href="/assets/contributing.html-CtoV8Qqk.js" as="script"><link rel="prefetch" href="/assets/index.html-Ca5-MeJZ.js" as="script"><link rel="prefetch" href="/assets/charter.html-CBaqZrHX.js" as="script"><link rel="prefetch" href="/assets/contributing.html-Bg8pHL-9.js" as="script"><link rel="prefetch" href="/assets/index.html-jw0yVKN0.js" as="script"><link rel="prefetch" href="/assets/charter.html-Qw36XXO7.js" as="script"><link rel="prefetch" href="/assets/contributing.html-HnVPfuc2.js" as="script"><link rel="prefetch" href="/assets/index.html-DP-5am-4.js" as="script"><link rel="prefetch" href="/assets/404.html-BaFtCcSn.js" as="script">
  32. </head>
  33. <body>
  34. <div id="app"><!--[--><div class="vp-theme-container external-link-icon"><!--[--><header class="vp-navbar"><div class="vp-toggle-sidebar-button" title="toggle sidebar" aria-expanded="false" role="button" tabindex="0"><div class="icon" aria-hidden="true"><span></span><span></span><span></span></div></div><span><a class="route-link" href="/"><img class="vp-site-logo" src="/images/dragonos-full-logo.svg" alt><!----></a></span><div class="vp-navbar-items-wrapper" style=""><!--[--><!--]--><nav class="vp-navbar-items vp-hide-mobile" aria-label="site navigation"><!--[--><div class="vp-navbar-item"><a class="route-link auto-link" href="/" aria-label="首页"><!---->首页<!----></a></div><div class="vp-navbar-item"><a class="route-link auto-link" href="/governance/" aria-label="社区治理"><!---->社区治理<!----></a></div><div class="vp-navbar-item"><a class="route-link auto-link" href="/communication/" aria-label="社区交流"><!---->社区交流<!----></a></div><div class="vp-navbar-item"><a class="route-link route-link-active auto-link" href="/contributors/" aria-label="贡献者"><!---->贡献者<!----></a></div><div class="vp-navbar-item"><a class="route-link auto-link" href="/sigs/" aria-label="SIGs"><!---->SIGs<!----></a></div><div class="vp-navbar-item"><a class="route-link auto-link" href="/wgs/" aria-label="工作组"><!---->工作组<!----></a></div><div class="vp-navbar-item"><a class="route-link auto-link" href="/mentorship/" aria-label="导师制"><!---->导师制<!----></a></div><div class="vp-navbar-item"><a class="auto-link external-link" href="https://github.com/DragonOS-Community/community" aria-label="GitHub" rel="noopener noreferrer" target="_blank"><!---->GitHub<!----></a></div><!--]--></nav><!--[--><!--]--><button class="vp-toggle-color-mode-button" title="toggle color mode"><svg class="light-icon" viewbox="0 0 32 32" style=""><path d="M16 12.005a4 4 0 1 1-4 4a4.005 4.005 0 0 1 4-4m0-2a6 6 0 1 0 6 6a6 6 0 0 0-6-6z" fill="currentColor"></path><path d="M5.394 6.813l1.414-1.415l3.506 3.506L8.9 10.318z" fill="currentColor"></path><path d="M2 15.005h5v2H2z" fill="currentColor"></path><path d="M5.394 25.197L8.9 21.691l1.414 1.415l-3.506 3.505z" fill="currentColor"></path><path d="M15 25.005h2v5h-2z" fill="currentColor"></path><path d="M21.687 23.106l1.414-1.415l3.506 3.506l-1.414 1.414z" fill="currentColor"></path><path d="M25 15.005h5v2h-5z" fill="currentColor"></path><path d="M21.687 8.904l3.506-3.506l1.414 1.415l-3.506 3.505z" fill="currentColor"></path><path d="M15 2.005h2v5h-2z" fill="currentColor"></path></svg><svg class="dark-icon" viewbox="0 0 32 32" style="display:none;"><path d="M13.502 5.414a15.075 15.075 0 0 0 11.594 18.194a11.113 11.113 0 0 1-7.975 3.39c-.138 0-.278.005-.418 0a11.094 11.094 0 0 1-3.2-21.584M14.98 3a1.002 1.002 0 0 0-.175.016a13.096 13.096 0 0 0 1.825 25.981c.164.006.328 0 .49 0a13.072 13.072 0 0 0 10.703-5.555a1.01 1.01 0 0 0-.783-1.565A13.08 13.08 0 0 1 15.89 4.38A1.015 1.015 0 0 0 14.98 3z" fill="currentColor"></path></svg></button><!----></div></header><!--]--><div class="vp-sidebar-mask"></div><!--[--><aside class="vp-sidebar"><nav class="vp-navbar-items" aria-label="site navigation"><!--[--><div class="vp-navbar-item"><a class="route-link auto-link" href="/" aria-label="首页"><!---->首页<!----></a></div><div class="vp-navbar-item"><a class="route-link auto-link" href="/governance/" aria-label="社区治理"><!---->社区治理<!----></a></div><div class="vp-navbar-item"><a class="route-link auto-link" href="/communication/" aria-label="社区交流"><!---->社区交流<!----></a></div><div class="vp-navbar-item"><a class="route-link route-link-active auto-link" href="/contributors/" aria-label="贡献者"><!---->贡献者<!----></a></div><div class="vp-navbar-item"><a class="route-link auto-link" href="/sigs/" aria-label="SIGs"><!---->SIGs<!----></a></div><div class="vp-navbar-item"><a class="route-link auto-link" href="/wgs/" aria-label="工作组"><!---->工作组<!----></a></div><div class="vp-navbar-item"><a class="route-link auto-link" href="/mentorship/" aria-label="导师制"><!---->导师制<!----></a></div><div class="vp-navbar-item"><a class="auto-link external-link" href="https://github.com/DragonOS-Community/community" aria-label="GitHub" rel="noopener noreferrer" target="_blank"><!---->GitHub<!----></a></div><!--]--></nav><!--[--><!--]--><ul class="vp-sidebar-items"><!--[--><li><p tabindex="0" class="vp-sidebar-item vp-sidebar-heading active">贡献者指南 <!----></p><ul style="" class="vp-sidebar-children"><!--[--><li><a class="route-link route-link-active auto-link vp-sidebar-item" href="/contributors/" aria-label="为DragonOS社区作出贡献"><!---->为DragonOS社区作出贡献<!----></a><!----></li><li><a class="route-link route-link-active auto-link vp-sidebar-item active" href="/contributors/code-style.html" aria-label="代码风格指南"><!---->代码风格指南<!----></a><!----></li><li><a class="route-link auto-link vp-sidebar-item" href="/contributors/github-workflow.html" aria-label="GitHub 工作流程"><!---->GitHub 工作流程<!----></a><!----></li><li><a class="route-link auto-link vp-sidebar-item" href="/contributors/pull-requests.html" aria-label="Pull Requests指南"><!---->Pull Requests指南<!----></a><!----></li><li><a class="route-link auto-link vp-sidebar-item" href="/contributors/cheat-sheet.html" aria-label="贡献者备忘录"><!---->贡献者备忘录<!----></a><!----></li><li><a class="route-link auto-link vp-sidebar-item" href="/contributors/code_of_conduct.html" aria-label="贡献者行为准则"><!---->贡献者行为准则<!----></a><!----></li><li><a class="route-link auto-link vp-sidebar-item" href="/contributors/expectation.html" aria-label="对社区成员的期望"><!---->对社区成员的期望<!----></a><!----></li><li><a class="route-link auto-link vp-sidebar-item" href="/contributors/resources.html" aria-label="社区基础设施"><!---->社区基础设施<!----></a><!----></li><!--]--></ul></li><!--]--></ul><!--[--><!--]--></aside><!--]--><!--[--><main class="vp-page"><!--[--><!--]--><div class="theme-default-content"><!--[--><!--]--><div><h1 id="代码风格指南" tabindex="-1"><a class="header-anchor" href="#代码风格指南"><span>代码风格指南</span></a></h1><h2 id="rust语言代码风格" tabindex="-1"><a class="header-anchor" href="#rust语言代码风格"><span>Rust语言代码风格</span></a></h2><p>  这篇文档将会介绍DragonOS中的Rust语言代码风格。随着开发的进行,这些风格可能会发生变化,但是我们会尽量保持风格的一致性。</p><h3 id="_1-命名" tabindex="-1"><a class="header-anchor" href="#_1-命名"><span>1. 命名</span></a></h3><p>  这部分基于Rust语言圣经中的<a href="https://course.rs/practice/naming.html" target="_blank" rel="noopener noreferrer">命名规范</a>进行修改,本文未提及的部分,请参考Rust语言圣经中的<a href="https://course.rs/practice/naming.html" target="_blank" rel="noopener noreferrer">命名规范</a>。</p><h3 id="_2-格式" tabindex="-1"><a class="header-anchor" href="#_2-格式"><span>2. 格式</span></a></h3><h4 id="_2-1-缩进" tabindex="-1"><a class="header-anchor" href="#_2-1-缩进"><span>2.1 缩进</span></a></h4><p>  请在提交代码之前,使用<code>cargo fmt</code>命令对代码进行格式化。</p><h4 id="_2-2-函数返回值" tabindex="-1"><a class="header-anchor" href="#_2-2-函数返回值"><span>2.2 函数返回值</span></a></h4><p>  尽管Rust可以返回函数的最后一行的语句的值,但是,这种方式会使代码的可读性变差。因此,我们推荐您在函数的最后一行使用<code>return</code>语句,而不是直接返回值。</p><div class="language-rust line-numbers-mode" data-highlighter="prismjs" data-ext="rs" data-title="rs"><pre class="language-rust"><code><span class="line"><span class="token comment">// 不推荐</span></span>
  35. <span class="line"><span class="token keyword">fn</span> <span class="token function-definition function">foo</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">-&gt;</span> <span class="token keyword">i32</span> <span class="token punctuation">{</span></span>
  36. <span class="line"> <span class="token number">1</span> <span class="token operator">+</span> <span class="token number">2</span></span>
  37. <span class="line"><span class="token punctuation">}</span></span>
  38. <span class="line"></span>
  39. <span class="line"><span class="token comment">// 推荐</span></span>
  40. <span class="line"><span class="token keyword">fn</span> <span class="token function-definition function">foo</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">-&gt;</span> <span class="token keyword">i32</span> <span class="token punctuation">{</span></span>
  41. <span class="line"> <span class="token keyword">return</span> <span class="token number">1</span> <span class="token operator">+</span> <span class="token number">2</span><span class="token punctuation">;</span></span>
  42. <span class="line"><span class="token punctuation">}</span></span>
  43. <span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h4 id="_2-3-错误处理" tabindex="-1"><a class="header-anchor" href="#_2-3-错误处理"><span>2.3 错误处理</span></a></h4><p>  DragonOS采用返回Posix错误码作为<strong>模块间错误处理</strong>的方式。为了确保在模块之间,错误处理代码的一致性,我们推荐在发生错误的时候,返回<code>SystemError</code>类型,该类型表示posix错误码。这样做的优点尤其体现在跨模块调用函数时,可以直接返回通用的错误码,从而降低错误处理代码的耦合度。</p><div class="language-rust line-numbers-mode" data-highlighter="prismjs" data-ext="rs" data-title="rs"><pre class="language-rust"><code><span class="line"><span class="token comment">// 函数跨越模块边界时(由其他模块调用当前函数),不推荐</span></span>
  44. <span class="line"><span class="token keyword">fn</span> <span class="token function-definition function">foo</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">-&gt;</span> <span class="token class-name">Result</span><span class="token operator">&lt;</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token class-name">CustomErr</span><span class="token operator">&gt;</span> <span class="token punctuation">{</span></span>
  45. <span class="line"> <span class="token keyword">if</span> <span class="token number">1</span> <span class="token operator">+</span> <span class="token number">2</span> <span class="token operator">==</span> <span class="token number">3</span> <span class="token punctuation">{</span></span>
  46. <span class="line"> <span class="token keyword">return</span> <span class="token class-name">Ok</span><span class="token punctuation">(</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
  47. <span class="line"> <span class="token punctuation">}</span> <span class="token keyword">else</span> <span class="token punctuation">{</span></span>
  48. <span class="line"> <span class="token keyword">return</span> <span class="token class-name">Err</span><span class="token punctuation">(</span><span class="token class-name">CustomErr</span><span class="token punctuation">::</span>error<span class="token punctuation">)</span><span class="token punctuation">;</span></span>
  49. <span class="line"> <span class="token punctuation">}</span></span>
  50. <span class="line"><span class="token punctuation">}</span></span>
  51. <span class="line"></span>
  52. <span class="line"><span class="token comment">// 函数跨越模块边界时(由其他模块调用当前函数),推荐</span></span>
  53. <span class="line"><span class="token keyword">fn</span> <span class="token function-definition function">foo</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">-&gt;</span> <span class="token class-name">Result</span><span class="token operator">&lt;</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token class-name">SystemError</span><span class="token operator">&gt;</span> <span class="token punctuation">{</span></span>
  54. <span class="line"> <span class="token keyword">if</span> <span class="token number">1</span> <span class="token operator">+</span> <span class="token number">2</span> <span class="token operator">==</span> <span class="token number">3</span> <span class="token punctuation">{</span></span>
  55. <span class="line"> <span class="token keyword">return</span> <span class="token class-name">Ok</span><span class="token punctuation">(</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
  56. <span class="line"> <span class="token punctuation">}</span> <span class="token keyword">else</span> <span class="token punctuation">{</span></span>
  57. <span class="line"> <span class="token keyword">return</span> <span class="token class-name">Err</span><span class="token punctuation">(</span><span class="token class-name">SystemError</span><span class="token punctuation">::</span><span class="token constant">EINVAL</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
  58. <span class="line"> <span class="token punctuation">}</span></span>
  59. <span class="line"><span class="token punctuation">}</span></span>
  60. <span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><p>  在<strong>模块内部</strong>,您既可以采用返回自定义错误enum的方式,也可以采用返回<code>SystemError</code>的方式。但是,我们推荐您在模块内部,采用返回自定义错误enum的方式,这样可以使错误处理代码更加清晰。</p><p>  <strong>TODO</strong>: 将原有的使用i32作为错误码的代码,改为使用<code>SystemError</code>。</p><h3 id="_3-注释" tabindex="-1"><a class="header-anchor" href="#_3-注释"><span>3. 注释</span></a></h3><p>  DragonOS的注释风格与Rust官方的保持一致。同时,我们推荐您在代码中加入尽可能多的有效注释,以便于其他人理解您的代码。并且,变量、函数等声明,遵守第一节中提到的命名规范,使其能够“自注释”。</p><h4 id="_3-1-函数注释" tabindex="-1"><a class="header-anchor" href="#_3-1-函数注释"><span>3.1 函数注释</span></a></h4><p>  函数注释应该包含以下内容:</p><ul><li>函数的功能</li><li>函数的参数</li><li>函数的返回值</li><li>函数的错误处理</li><li>函数的副作用或者其他的需要说明的内容</li></ul><p>  函数注释的格式如下:</p><div class="language-rust line-numbers-mode" data-highlighter="prismjs" data-ext="rs" data-title="rs"><pre class="language-rust"><code><span class="line"><span class="token comment">/// # 函数的功能</span></span>
  61. <span class="line"><span class="token comment">/// </span></span>
  62. <span class="line"><span class="token comment">/// 函数的详细描述</span></span>
  63. <span class="line"><span class="token comment">/// </span></span>
  64. <span class="line"><span class="token comment">/// ## 参数</span></span>
  65. <span class="line"><span class="token comment">/// </span></span>
  66. <span class="line"><span class="token comment">/// - 参数1: 参数1的说明</span></span>
  67. <span class="line"><span class="token comment">/// - 参数2: 参数2的说明</span></span>
  68. <span class="line"><span class="token comment">/// - ...</span></span>
  69. <span class="line"><span class="token comment">/// </span></span>
  70. <span class="line"><span class="token comment">/// ## 返回值</span></span>
  71. <span class="line"><span class="token comment">/// - Ok(返回值类型): 返回值的说明</span></span>
  72. <span class="line"><span class="token comment">/// - Err(错误值类型): 错误的说明</span></span>
  73. <span class="line"><span class="token comment">/// </span></span>
  74. <span class="line"><span class="token comment">/// ## Safety</span></span>
  75. <span class="line"><span class="token comment">/// </span></span>
  76. <span class="line"><span class="token comment">/// 函数的安全性说明</span></span>
  77. <span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div></div><!--[--><!--]--></div><footer class="vp-page-meta"><div class="vp-meta-item edit-link"><a class="auto-link external-link label" href="https://github.com/DragonOS-Community/community/edit/master/contributors/code-style.md" aria-label="帮助我们改善此页面!" rel="noopener noreferrer" target="_blank"><!--[--><svg class="edit-icon" viewbox="0 0 1024 1024"><g fill="currentColor"><path d="M430.818 653.65a60.46 60.46 0 0 1-50.96-93.281l71.69-114.012 7.773-10.365L816.038 80.138A60.46 60.46 0 0 1 859.225 62a60.46 60.46 0 0 1 43.186 18.138l43.186 43.186a60.46 60.46 0 0 1 0 86.373L588.879 565.55l-8.637 8.637-117.466 68.234a60.46 60.46 0 0 1-31.958 11.229z"></path><path d="M728.802 962H252.891A190.883 190.883 0 0 1 62.008 771.98V296.934a190.883 190.883 0 0 1 190.883-192.61h267.754a60.46 60.46 0 0 1 0 120.92H252.891a69.962 69.962 0 0 0-69.098 69.099V771.98a69.962 69.962 0 0 0 69.098 69.098h475.911A69.962 69.962 0 0 0 797.9 771.98V503.363a60.46 60.46 0 1 1 120.922 0V771.98A190.883 190.883 0 0 1 728.802 962z"></path></g></svg><!--]-->帮助我们改善此页面!<!----></a></div><div class="vp-meta-item git-info"><div class="vp-meta-item last-updated"><span class="meta-item-label">Last Updated: </span><!----></div><div class="vp-meta-item contributors"><span class="meta-item-label">Contributors: </span><span class="meta-item-info"><!--[--><!--[--><span class="contributor" title="email: [email protected]">LoGin</span><!----><!--]--><!--]--></span></div></div></footer><nav class="vp-page-nav" aria-label="page navigation"><a class="route-link route-link-active auto-link prev" href="/contributors/" aria-label="为DragonOS社区作出贡献"><div class="hint"><span class="arrow left"></span> Prev</div><div class="link"><span>为DragonOS社区作出贡献</span></div></a><a class="route-link auto-link next" href="/contributors/github-workflow.html" aria-label="GitHub 工作流程"><div class="hint">Next <span class="arrow right"></span></div><div class="link"><span>GitHub 工作流程</span></div></a></nav><!--[--><!--]--></main><!--]--></div><!--[--><!----><!--]--><!--]--></div>
  78. <script type="module" src="/assets/app-CmntYhet.js" defer></script>
  79. </body>
  80. </html>