Languages and compilers

CodeQL and LGTM version 1.23 support analysis of the following languages compiled by the following compilers. (CodeQL was previously known as QL.)

Note that where there are several versions or dialects of a language, the supported variants are listed. If your code requires a particular version of a compiler, check that this version is included below. Customers with any questions should contact their usual Semmle contact with any questions. If you’re not a customer yet, contact us at with any questions you have about language and compiler support.


CodeQL for COBOL is being deprecated after the 1.23 release of CodeQL. Future releases, starting with 1.24, will no longer contain support for analyzing COBOL source code. We are not aware of any customers who will be affected by this change. If you do have any concerns, please contact your account manager.

Language Variants Compilers Extensions
C/C++ C89, C99, C11, C++98, C++03, C++11, C++14, C++17

Clang (and clang-cl [1]) extensions (up to Clang 8.0),

GNU extensions (up to GCC 8.3),

Microsoft extensions (up to VS 2019),

Arm Compiler 5.0 [2]

.cpp, .c++, .cxx, .hpp, .hh, .h++, .hxx, .c, .cc, .h
C# C# up to 8.0. with .NET up to 4.8 [3]

Microsoft Visual Studio up to 2019,

.NET Core up to 3.0

.sln, .csproj, .cs, .cshtml, .xaml
COBOL ANSI 85 or newer [4] Not applicable .cbl, .CBL, .cpy, .CPY, .copy, .COPY
Go (aka Golang) Go up to 1.13 Go 1.11 or more recent .go
Java Java 6 to 13 [5]

javac (OpenJDK and Oracle JDK),

Eclipse compiler for Java (ECJ) [6]

JavaScript ECMAScript 2019 or lower Not applicable .js, .jsx, .mjs, .es, .es6, .htm, .html, .xhm, .xhtml, .vue, .json, .yaml, .yml, .raml, .xml [7]
Python 2.7, 3.5, 3.6, 3.7, 3.8 Not applicable .py
TypeScript [8] 2.6-3.7 Standard TypeScript compiler .ts, .tsx
[1]Support for the clang-cl compiler is preliminary.
[2]Support for the Arm Compiler (armcc) is preliminary.
[3]In addition, support is included for the preview features of C# 8.0 and .NET Core 3.0.
[4]The best results are achieved with COBOL code that stays close to the ANSI 85 standard.
[5]Builds that execute on Java 6 to 12 can be analyzed. The analysis understands Java 12 language features.
[6]ECJ is supported when the build invokes it via the Maven Compiler plugin or the Takari Lifecycle plugin.
[7]JSX and Flow code, YAML, JSON, HTML, and XML files may also be analyzed with JavaScript files.
[8]TypeScript analysis is performed by running the JavaScript extractor with TypeScript enabled. This is the default for LGTM.