Learning QL
###########


`QL <https://semmle.com/ql>`__ is the query language used in Semmle's `variant analysis <https://semmle.com/variant-analysis>`__ engine. 
You can use queries written in QL to explore code and quickly find variants of security vulnerabilities and bugs. 
The QL language is also part of the technology behind `LGTM <https://lgtm.com>`__,  Semmle's analysis platform that combines deep semantic code search with data science insights to help developers ship secure code.

QL queries are easy to write and share–visit the topics below and `our open source repository on GitHub <https://github.com/Semmle/ql>`__ to learn more. 
You can also try out QL in the `query console <https://lgtm.com/query>`__ on `LGTM.com <https://lgtm.com>`__. 
Here, you can write QL code to query open source projects directly, without having to download snapshots and libraries. 

.. _getting-started:

Getting started
***************

If you are new to QL, start by looking at the following topics:

.. toctree::
   :maxdepth: 1

   introduction-to-ql
   about-ql
   beginner/ql-tutorials
   ql-etudes/river-crossing

QL training and variant analysis examples
******************************************

To start learning how to use QL in variant analysis for a specific language, see:

.. toctree::
   :maxdepth: -1

   ql-training

.. _writing-ql-queries:

Writing QL queries
******************

To learn more about writing your own queries, see:

.. toctree::
   :maxdepth: 3
   :includehidden:

   writing-queries/writing-queries

For more information on writing QL to query code written in a specific language see:

.. toctree::
   :maxdepth: 2
   :includehidden:

   cpp/ql-for-cpp
   csharp/ql-for-csharp
   cobol/ql-for-cobol
   java/ql-for-java
   javascript/ql-for-javascript
   python/ql-for-python

Advanced QL and technical information
*************************************

For more technical information see:

.. toctree::
   :maxdepth: 2
   :includehidden:

   advanced/advanced-ql
   technical-info    

Reference topics
****************

For a more comprehensive guide to QL see the following reference topics: 

- `QL language handbook <https://help.semmle.com/QL/ql-handbook/index.html>`__—a description of important concepts in QL
- `QL language specification <https://help.semmle.com/QL/ql-spec/language.html>`__—a formal specification of the QL language.

Search
******

.. * :ref:`genindex` remove index for the time being as we currently have no tags

* :ref:`search`