mirror of
https://github.com/hohn/codeql-info.git
synced 2025-12-17 05:03:05 +01:00
304 lines
24 KiB
HTML
304 lines
24 KiB
HTML
<!DOCTYPE html>
|
||
|
||
<html lang="en" data-content_root="../">
|
||
<head>
|
||
<meta charset="utf-8" />
|
||
<meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="viewport" content="width=device-width, initial-scale=1" />
|
||
|
||
<title>Defining the results of a query — CodeQL</title>
|
||
<link rel="stylesheet" type="text/css" href="../_static/pygments.css?v=fa44fd50" />
|
||
<link rel="stylesheet" type="text/css" href="../_static/alabaster.css?v=93459777" />
|
||
<script src="../_static/documentation_options.js?v=5929fcd5"></script>
|
||
<script src="../_static/doctools.js?v=888ff710"></script>
|
||
<script src="../_static/sphinx_highlight.js?v=dc90522c"></script>
|
||
<link rel="icon" href="../_static/favicon.ico"/>
|
||
<link rel="index" title="Index" href="../genindex.html" />
|
||
<link rel="search" title="Search" href="../search.html" />
|
||
<link rel="next" title="Providing locations in CodeQL queries" href="providing-locations-in-codeql-queries.html" />
|
||
<link rel="prev" title="Query help files" href="query-help-files.html" />
|
||
|
||
<title>CodeQL docs</title>
|
||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||
<link rel="stylesheet" href="../_static/custom.css" type="text/css" />
|
||
<link rel="stylesheet" href="../_static/primer.css" type="text/css" />
|
||
|
||
|
||
</head><body>
|
||
<header class="Header">
|
||
<div class="Header-item--full">
|
||
<a href="https://codeql.github.com/docs" class="Header-link f2 d-flex flex-items-center">
|
||
<!-- <%= octicon "mark-github", class: "mr-2", height: 32 %> -->
|
||
<svg height="32" class="octicon octicon-mark-github mr-2" viewBox="0 0 16 16" version="1.1" width="32"
|
||
aria-hidden="true">
|
||
<path fill-rule="evenodd"
|
||
d="M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.82.64-.18 1.32-.27 2-.27.68 0 1.36.09 2 .27 1.53-1.04 2.2-.82 2.2-.82.44 1.1.16 1.92.08 2.12.51.56.82 1.27.82 2.15 0 3.07-1.87 3.75-3.65 3.95.29.25.54.73.54 1.48 0 1.07-.01 1.93-.01 2.2 0 .21.15.46.55.38A8.013 8.013 0 0 0 16 8c0-4.42-3.58-8-8-8z">
|
||
</path>
|
||
</svg>
|
||
<span class="hide-sm">CodeQL documentation</span>
|
||
</a>
|
||
</div>
|
||
<div class="Header-item hide-sm hide-md">
|
||
<script src="https://addsearch.com/js/?key=93b4d287e2fc079a4089412b669785d5&categories=!0xhelp.semmle.com,0xcodeql.github.com,1xdocs,1xcodeql-standard-libraries,1xcodeql-query-help"></script>
|
||
</div>
|
||
<div class="Header-item">
|
||
|
||
<details class="dropdown details-reset details-overlay d-inline-block">
|
||
<summary class="btn bg-gray-dark text-white border" aria-haspopup="true">
|
||
CodeQL resources
|
||
<div class="dropdown-caret"></div>
|
||
</summary>
|
||
|
||
<ul class="dropdown-menu dropdown-menu-se dropdown-menu-dark">
|
||
<li><a class="dropdown-item" href="https://codeql.github.com/docs/codeql-overview">CodeQL overview</a></li>
|
||
<li class="dropdown-divider" role="separator"></li>
|
||
<div class="dropdown-header">
|
||
CodeQL tools
|
||
</div>
|
||
<li><a class="dropdown-item" href="https://codeql.github.com/docs/codeql-for-visual-studio-code">CodeQL for VS Code</a>
|
||
<li><a class="dropdown-item" href="https://codeql.github.com/docs/codeql-cli">CodeQL CLI</a>
|
||
</li>
|
||
<li class="dropdown-divider" role="separator"></li>
|
||
<div class="dropdown-header">
|
||
CodeQL guides
|
||
</div>
|
||
<li><a class="dropdown-item" href="https://codeql.github.com/docs/writing-codeql-queries">Writing CodeQL queries</a></li>
|
||
<li><a class="dropdown-item" href="https://codeql.github.com/docs/codeql-language-guides">CodeQL language guides</a>
|
||
<li class="dropdown-divider" role="separator"></li>
|
||
<div class="dropdown-header">
|
||
Reference docs
|
||
</div>
|
||
<li><a class="dropdown-item" href="https://codeql.github.com/docs/ql-language-reference/">QL language
|
||
reference</a>
|
||
<li><a class="dropdown-item" href="https://codeql.github.com/codeql-standard-libraries">CodeQL
|
||
standard-libraries</a>
|
||
<li><a class="dropdown-item" href="https://codeql.github.com/codeql-query-help">CodeQL
|
||
query help</a>
|
||
<li class="dropdown-divider" role="separator"></li>
|
||
<div class="dropdown-header">
|
||
Source files
|
||
</div>
|
||
<li><a class="dropdown-item" href="https://github.com/github/codeql">CodeQL repository</a>
|
||
</ul>
|
||
</details>
|
||
|
||
</div>
|
||
|
||
</header>
|
||
<main class="bg-gray-light clearfix">
|
||
<nav class="SideNav position-sticky top-0 col-lg-3 col-md-3 float-left p-4 hide-sm hide-md overflow-y-auto">
|
||
|
||
<ul class="current">
|
||
<li class="toctree-l1"><a class="reference internal" href="../codeql-overview/index.html">CodeQL overview</a></li>
|
||
<li class="toctree-l1"><a class="reference internal" href="../codeql-for-visual-studio-code/index.html">CodeQL for Visual Studio Code</a></li>
|
||
<li class="toctree-l1"><a class="reference internal" href="../codeql-cli/index.html">CodeQL CLI</a></li>
|
||
<li class="toctree-l1 current"><a class="reference internal" href="index.html">Writing CodeQL queries</a><ul class="current">
|
||
<li class="toctree-l2 current"><a class="reference internal" href="codeql-queries.html">CodeQL queries</a><ul class="current">
|
||
<li class="toctree-l3"><a class="reference internal" href="about-codeql-queries.html">About CodeQL queries</a></li>
|
||
<li class="toctree-l3"><a class="reference internal" href="metadata-for-codeql-queries.html">Metadata for CodeQL queries</a></li>
|
||
<li class="toctree-l3"><a class="reference internal" href="query-help-files.html">Query help files</a></li>
|
||
<li class="toctree-l3 current"><a class="current reference internal" href="#">Defining the results of a query</a></li>
|
||
<li class="toctree-l3"><a class="reference internal" href="providing-locations-in-codeql-queries.html">Providing locations in CodeQL queries</a></li>
|
||
<li class="toctree-l3"><a class="reference internal" href="about-data-flow-analysis.html">About data flow analysis</a></li>
|
||
<li class="toctree-l3"><a class="reference internal" href="creating-path-queries.html">Creating path queries</a></li>
|
||
<li class="toctree-l3"><a class="reference internal" href="troubleshooting-query-performance.html">Troubleshooting query performance</a></li>
|
||
<li class="toctree-l3"><a class="reference internal" href="debugging-data-flow-queries-using-partial-flow.html">Debugging data-flow queries using partial flow</a></li>
|
||
</ul>
|
||
</li>
|
||
<li class="toctree-l2"><a class="reference internal" href="ql-tutorials.html">QL tutorials</a></li>
|
||
</ul>
|
||
</li>
|
||
<li class="toctree-l1"><a class="reference internal" href="../codeql-language-guides/index.html">CodeQL language guides</a></li>
|
||
<li class="toctree-l1"><a class="reference internal" href="../ql-language-reference/index.html">QL language reference</a></li>
|
||
</ul>
|
||
|
||
|
||
</nav>
|
||
|
||
|
||
<div class="body col-sm-12 col-md-9 col-lg-9 float-left border-left">
|
||
|
||
<div class="hide-lg hide-xl px-4 pt-4">
|
||
|
||
<div class="related" role="navigation" aria-label="related navigation">
|
||
<ul>
|
||
<li class="nav-item nav-item-0"><a href="../contents.html">CodeQL</a> »</li>
|
||
<li class="nav-item nav-item-1"><a href="index.html"
|
||
>Writing CodeQL queries</a> »</li>
|
||
<li class="nav-item nav-item-2"><a href="codeql-queries.html"
|
||
accesskey="U">CodeQL queries</a> »</li>
|
||
</ul>
|
||
</div>
|
||
</div>
|
||
|
||
<article class="p-4 col-lg-10 col-md-10 col-sm-12">
|
||
|
||
<section id="defining-the-results-of-a-query">
|
||
<span id="id1"></span><h1>Defining the results of a query<a class="headerlink" href="#defining-the-results-of-a-query" title="Link to this heading">¶</a></h1>
|
||
<p>You can control how analysis results are displayed in source code by modifying a query’s <code class="docutils literal notranslate"><span class="pre">select</span></code> statement.</p>
|
||
<section id="about-query-results">
|
||
<h2>About query results<a class="headerlink" href="#about-query-results" title="Link to this heading">¶</a></h2>
|
||
<p>The information contained in the results of a query is controlled by the <code class="docutils literal notranslate"><span class="pre">select</span></code> statement. Part of the process of developing a useful query is to make the results clear and easy for other users to understand.
|
||
When you write your own queries in the query console or in the CodeQL <a class="reference internal" href="../codeql-for-visual-studio-code/index.html#codeql-for-visual-studio-code"><span class="std std-ref">extension for VS Code</span></a> there are no constraints on what can be selected.
|
||
However, if you want to use a query to create alerts in LGTM or generate valid analysis results using the <a class="reference internal" href="../codeql-cli/index.html#codeql-cli"><span class="std std-ref">CodeQL CLI</span></a>, you’ll need to make the <code class="docutils literal notranslate"><span class="pre">select</span></code> statement report results in the required format.
|
||
You must also ensure that the query has the appropriate metadata properties defined.
|
||
This topic explains how to write your select statement to generate helpful analysis results.</p>
|
||
</section>
|
||
<section id="overview">
|
||
<h2>Overview<a class="headerlink" href="#overview" title="Link to this heading">¶</a></h2>
|
||
<p>Alert queries must have the property <code class="docutils literal notranslate"><span class="pre">@kind</span> <span class="pre">problem</span></code> defined in their metadata. For more information, see “<a class="reference internal" href="metadata-for-codeql-queries.html"><span class="doc">Metadata for CodeQL queries</span></a>.”
|
||
In their most basic form, the <code class="docutils literal notranslate"><span class="pre">select</span></code> statement must select two ‘columns’:</p>
|
||
<ul class="simple">
|
||
<li><p><strong>Element</strong>—a code element that’s identified by the query. This defines the location of the alert.</p></li>
|
||
<li><p><strong>String</strong>—a message to display for this code element, describing why the alert was generated.</p></li>
|
||
</ul>
|
||
<p>If you look at some of the LGTM queries, you’ll see that they can select extra element/string pairs, which are combined with <code class="docutils literal notranslate"><span class="pre">$@</span></code> placeholder markers in the message to form links. For example, <a class="reference external" href="https://lgtm.com/query/rule:1954750296/lang:java/">Dereferenced variable may be null</a> (Java), or <a class="reference external" href="https://lgtm.com/query/rule:7890077/lang:javascript/">Duplicate switch case</a> (JavaScript).</p>
|
||
<blockquote class="pull-quote">
|
||
<div><p>Note</p>
|
||
<p>An in-depth discussion of <code class="docutils literal notranslate"><span class="pre">select</span></code> statements for path queries is not included in this topic. However, you can develop the string column of the <code class="docutils literal notranslate"><span class="pre">select</span></code> statement in the same way as for alert queries. For more specific information about path queries, see “<a class="reference internal" href="creating-path-queries.html"><span class="doc">Creating path queries</span></a>.”</p>
|
||
</div></blockquote>
|
||
</section>
|
||
<section id="developing-a-select-statement">
|
||
<h2>Developing a select statement<a class="headerlink" href="#developing-a-select-statement" title="Link to this heading">¶</a></h2>
|
||
<p>Here’s a simple query that uses the standard CodeQL <code class="docutils literal notranslate"><span class="pre">CodeDuplication.qll</span></code> library to identify similar files.</p>
|
||
<section id="basic-select-statement">
|
||
<h3>Basic select statement<a class="headerlink" href="#basic-select-statement" title="Link to this heading">¶</a></h3>
|
||
<div class="highlight-ql notranslate"><div class="highlight"><pre><span></span>import java
|
||
import external.CodeDuplication
|
||
|
||
from File f, File other, int percent
|
||
where similarFiles(f, other, percent)
|
||
select f, "This file is similar to another file."
|
||
</pre></div>
|
||
</div>
|
||
<p>This basic select statement has two columns:</p>
|
||
<ol class="arabic simple">
|
||
<li><p>Element to display the alert on: <code class="docutils literal notranslate"><span class="pre">f</span></code> corresponds to <code class="docutils literal notranslate"><span class="pre">File</span></code>.</p></li>
|
||
<li><p>String message to display: <code class="docutils literal notranslate"><span class="pre">"This</span> <span class="pre">file</span> <span class="pre">is</span> <span class="pre">similar</span> <span class="pre">to</span> <span class="pre">another</span> <span class="pre">file."</span></code></p></li>
|
||
</ol>
|
||
<img alt="Results of basic select statement" class="border" src="../_images/ql-select-statement-basic.png" />
|
||
</section>
|
||
<section id="including-the-name-of-the-similar-file">
|
||
<h3>Including the name of the similar file<a class="headerlink" href="#including-the-name-of-the-similar-file" title="Link to this heading">¶</a></h3>
|
||
<p>The alert message defined by the basic select statement is constant and doesn’t give users much information. Since the query identifies the similar file (<code class="docutils literal notranslate"><span class="pre">other</span></code>), it’s easy to extend the <code class="docutils literal notranslate"><span class="pre">select</span></code> statement to report the name of the similar file. For example:</p>
|
||
<div class="highlight-ql notranslate"><div class="highlight"><pre><span></span>select f, "This file is similar to " + other.getBaseName()
|
||
</pre></div>
|
||
</div>
|
||
<ol class="arabic simple">
|
||
<li><p>Element: <code class="docutils literal notranslate"><span class="pre">f</span></code> as before.</p></li>
|
||
<li><p>String message: <code class="docutils literal notranslate"><span class="pre">"This</span> <span class="pre">file</span> <span class="pre">is</span> <span class="pre">similar</span> <span class="pre">to</span> <span class="pre">"</span></code>—the string text is combined with the file name for the <code class="docutils literal notranslate"><span class="pre">other</span></code>, similar file, returned by <code class="docutils literal notranslate"><span class="pre">getBaseName()</span></code>.</p></li>
|
||
</ol>
|
||
<img alt="Results of extended select statement" class="border" src="../_images/ql-select-statement-filename.png" />
|
||
<p>While this is more informative than the original select statement, the user still needs to find the other file manually.</p>
|
||
</section>
|
||
<section id="adding-a-link-to-the-similar-file">
|
||
<h3>Adding a link to the similar file<a class="headerlink" href="#adding-a-link-to-the-similar-file" title="Link to this heading">¶</a></h3>
|
||
<p>You can use placeholders in the text of alert messages to insert additional information, such as links to the similar file. Placeholders are defined using <code class="docutils literal notranslate"><span class="pre">$@</span></code>, and filled using the information in the next two columns of the select statement. For example, this select statement returns four columns:</p>
|
||
<div class="highlight-ql notranslate"><div class="highlight"><pre><span></span>select f, "This file is similar to $@.", other, other.getBaseName()
|
||
</pre></div>
|
||
</div>
|
||
<ol class="arabic simple">
|
||
<li><p>Element: <code class="docutils literal notranslate"><span class="pre">f</span></code> as before.</p></li>
|
||
<li><p>String message: <code class="docutils literal notranslate"><span class="pre">"This</span> <span class="pre">file</span> <span class="pre">is</span> <span class="pre">similar</span> <span class="pre">to</span> <span class="pre">$@."</span></code>—the string text now includes a placeholder, which will display the combined content of the next two columns.</p></li>
|
||
<li><p>Element for placeholder: <code class="docutils literal notranslate"><span class="pre">other</span></code> corresponds to the similar file.</p></li>
|
||
<li><p>String text for placeholder: the short file name returned by <code class="docutils literal notranslate"><span class="pre">other.getBaseName()</span></code>.</p></li>
|
||
</ol>
|
||
<p>When the alert message is displayed, the <code class="docutils literal notranslate"><span class="pre">$@</span></code> placeholder is replaced by a link created from the contents of the third and fourth columns defined by the <code class="docutils literal notranslate"><span class="pre">select</span></code> statement.</p>
|
||
<p>If you use the <code class="docutils literal notranslate"><span class="pre">$@</span></code> placeholder marker multiple times in the description text, then the <code class="docutils literal notranslate"><span class="pre">N</span></code>th use is replaced by a link formed from columns <code class="docutils literal notranslate"><span class="pre">2N+2</span></code> and <code class="docutils literal notranslate"><span class="pre">2N+3</span></code>. If there are more pairs of additional columns than there are placeholder markers, then the trailing columns are ignored. Conversely, if there are fewer pairs of additional columns than there are placeholder markers, then the trailing markers are treated as normal text rather than placeholder markers.</p>
|
||
</section>
|
||
<section id="adding-details-of-the-extent-of-similarity">
|
||
<h3>Adding details of the extent of similarity<a class="headerlink" href="#adding-details-of-the-extent-of-similarity" title="Link to this heading">¶</a></h3>
|
||
<p>You could go further and change the <code class="docutils literal notranslate"><span class="pre">select</span></code> statement to report on the similarity of content in the two files, since this information is already available in the query. For example:</p>
|
||
<div class="highlight-ql notranslate"><div class="highlight"><pre><span></span>select f, percent + "% of the lines in " + f.getBaseName() + " are similar to lines in $@.", other, other.getBaseName()
|
||
</pre></div>
|
||
</div>
|
||
<p>The new elements added here don’t need to be clickable, so we added them directly to the description string.</p>
|
||
<img alt="Results showing the extent of similarity" class="border" src="../_images/ql-select-statement-similarity.png" />
|
||
</section>
|
||
</section>
|
||
<section id="further-reading">
|
||
<h2>Further reading<a class="headerlink" href="#further-reading" title="Link to this heading">¶</a></h2>
|
||
<ul class="simple">
|
||
<li><p><a class="reference external" href="https://github.com/github/codeql">CodeQL repository</a></p></li>
|
||
</ul>
|
||
</section>
|
||
</section>
|
||
|
||
|
||
</article>
|
||
|
||
<!-- GitHub footer, with links to terms and privacy statement -->
|
||
<div class="px-3 px-md-6 f6 py-4 d-sm-flex flex-justify-between flex-row-reverse flex-items-center border-top">
|
||
<ul class="list-style-none d-flex flex-items-center mb-3 mb-sm-0 lh-condensed-ultra">
|
||
<li class="mr-3">
|
||
<a href="https://twitter.com/github" title="GitHub on Twitter" style="color: #959da5;">
|
||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 273.5 222.3" class="d-block" height="18">
|
||
<path
|
||
d="M273.5 26.3a109.77 109.77 0 0 1-32.2 8.8 56.07 56.07 0 0 0 24.7-31 113.39 113.39 0 0 1-35.7 13.6 56.1 56.1 0 0 0-97 38.4 54 54 0 0 0 1.5 12.8A159.68 159.68 0 0 1 19.1 10.3a56.12 56.12 0 0 0 17.4 74.9 56.06 56.06 0 0 1-25.4-7v.7a56.11 56.11 0 0 0 45 55 55.65 55.65 0 0 1-14.8 2 62.39 62.39 0 0 1-10.6-1 56.24 56.24 0 0 0 52.4 39 112.87 112.87 0 0 1-69.7 24 119 119 0 0 1-13.4-.8 158.83 158.83 0 0 0 86 25.2c103.2 0 159.6-85.5 159.6-159.6 0-2.4-.1-4.9-.2-7.3a114.25 114.25 0 0 0 28.1-29.1"
|
||
fill="currentColor"></path>
|
||
</svg>
|
||
</a>
|
||
</li>
|
||
<li class="mr-3">
|
||
<a href="https://www.facebook.com/GitHub" title="GitHub on Facebook" style="color: #959da5;">
|
||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 15.3 15.4" class="d-block" height="18">
|
||
<path
|
||
d="M14.5 0H.8a.88.88 0 0 0-.8.9v13.6a.88.88 0 0 0 .8.9h7.3v-6h-2V7.1h2V5.4a2.87 2.87 0 0 1 2.5-3.1h.5a10.87 10.87 0 0 1 1.8.1v2.1h-1.3c-1 0-1.1.5-1.1 1.1v1.5h2.3l-.3 2.3h-2v5.9h3.9a.88.88 0 0 0 .9-.8V.8a.86.86 0 0 0-.8-.8z"
|
||
fill="currentColor"></path>
|
||
</svg>
|
||
</a>
|
||
</li>
|
||
<li class="mr-3">
|
||
<a href="https://www.youtube.com/github" title="GitHub on YouTube" style="color: #959da5;">
|
||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 19.17 13.6" class="d-block" height="16">
|
||
<path
|
||
d="M18.77 2.13A2.4 2.4 0 0 0 17.09.42C15.59 0 9.58 0 9.58 0a57.55 57.55 0 0 0-7.5.4A2.49 2.49 0 0 0 .39 2.13 26.27 26.27 0 0 0 0 6.8a26.15 26.15 0 0 0 .39 4.67 2.43 2.43 0 0 0 1.69 1.71c1.52.42 7.5.42 7.5.42a57.69 57.69 0 0 0 7.51-.4 2.4 2.4 0 0 0 1.68-1.71 25.63 25.63 0 0 0 .4-4.67 24 24 0 0 0-.4-4.69zM7.67 9.71V3.89l5 2.91z"
|
||
fill="currentColor"></path>
|
||
</svg>
|
||
</a>
|
||
</li>
|
||
<li class="mr-3 flex-self-start">
|
||
<a href="https://www.linkedin.com/company/github" title="GitHub on Linkedin" style="color: #959da5;">
|
||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 19 18" class="d-block" height="18">
|
||
<path
|
||
d="M3.94 2A2 2 0 1 1 2 0a2 2 0 0 1 1.94 2zM4 5.48H0V18h4zm6.32 0H6.34V18h3.94v-6.57c0-3.66 4.77-4 4.77 0V18H19v-7.93c0-6.17-7.06-5.94-8.72-2.91z"
|
||
fill="currentColor"></path>
|
||
</svg>
|
||
</a>
|
||
</li>
|
||
<li>
|
||
<a href="https://github.com/github" title="GitHub's organization" style="color: #959da5;">
|
||
<svg version="1.1" width="20" height="20" viewBox="0 0 16 16" class="octicon octicon-mark-github"
|
||
aria-hidden="true">
|
||
<path fill-rule="evenodd"
|
||
d="M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.82.64-.18 1.32-.27 2-.27.68 0 1.36.09 2 .27 1.53-1.04 2.2-.82 2.2-.82.44 1.1.16 1.92.08 2.12.51.56.82 1.27.82 2.15 0 3.07-1.87 3.75-3.65 3.95.29.25.54.73.54 1.48 0 1.07-.01 1.93-.01 2.2 0 .21.15.46.55.38A8.013 8.013 0 0016 8c0-4.42-3.58-8-8-8z">
|
||
</path>
|
||
</svg>
|
||
</a>
|
||
</li>
|
||
</ul>
|
||
<ul class="list-style-none d-flex text-gray">
|
||
<li class="mr-3">©
|
||
<script type="text/javascript">document.write(new Date().getFullYear());</script> GitHub, Inc.</li>
|
||
<li class="mr-3"><a
|
||
href="https://docs.github.com/github/site-policy/github-terms-of-service"
|
||
class="link-gray">Terms </a></li>
|
||
<li><a href="https://docs.github.com/github/site-policy/github-privacy-statement"
|
||
class="link-gray">Privacy </a></li>
|
||
</ul>
|
||
</div>
|
||
</div>
|
||
</main>
|
||
|
||
<script type="text/javascript">
|
||
$(document).ready(function () {
|
||
$(".toggle > *").hide();
|
||
$(".toggle .name").show();
|
||
$(".toggle .name").click(function () {
|
||
$(this).parent().children().not(".name").toggle(400);
|
||
$(this).parent().children(".name").toggleClass("open");
|
||
})
|
||
});
|
||
</script>
|
||
|
||
</body>
|
||
</html> |