Swift: QL generation script

Also added code generation to the swift checks.
This commit is contained in:
Paolo Tranquilli
2022-04-14 17:51:45 +02:00
parent cbdd4927ce
commit de0fa9e456
577 changed files with 4236 additions and 58 deletions

View File

@@ -12,6 +12,17 @@ defaults:
working-directory: swift
jobs:
codegen:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- uses: ./.github/actions/fetch-codeql
- uses: bazelbuild/setup-bazelisk@v2
- name: Check code generation
run: |
bazel run //swift/codegen
git add .
git diff --exit-code --stat HEAD
qlformat:
runs-on: ubuntu-latest
steps:
@@ -28,18 +39,7 @@ jobs:
steps:
- uses: actions/checkout@v2
- uses: ./.github/actions/fetch-codeql
- name: Install bazelisk - Linux
if: runner.os == 'Linux'
run: |
sudo apt-get update
sudo apt-get install -y wget
wget https://github.com/bazelbuild/bazelisk/releases/download/v1.11.0/bazelisk-linux-amd64
mv bazelisk-linux-amd64 /usr/local/bin/bazel
chmod +x /usr/local/bin/bazel
- name: Install bazelisk - macOS
if: runner.os == 'MacOS'
run: |
brew install bazelisk
- uses: bazelbuild/setup-bazelisk@v2
- name: Build Swift extractor
run: |
bazel run //swift:create-extractor-pack
@@ -48,4 +48,3 @@ jobs:
codeql test run --threads=0 --ram 5000 --search-path "${{ github.workspace }}/swift/extractor-pack" --check-databases --check-unused-labels --check-repeated-labels --check-redefined-labels --check-use-before-definition ql/test
env:
GITHUB_TOKEN: ${{ github.token }}

View File

@@ -36,7 +36,7 @@ repos:
- id: swift-codegen
name: Run Swift checked in code generation
files: ^swift/(codegen/|.*/generated/|ql/lib/swift\.dbscheme$)
files: ^swift/(codegen/|.*/generated/|ql/lib/(swift\.dbscheme$|codeql/swift/elements))
language: system
entry: bazel run //swift/codegen
pass_filenames: false

View File

@@ -3,6 +3,7 @@
from lib import generator
import dbschemegen
import qlgen
if __name__ == "__main__":
generator.run(dbschemegen.generate)
generator.run(dbschemegen.generate, qlgen.generate)

View File

@@ -23,7 +23,5 @@ def run(*generators, tags=None):
`generators` should be callables taking as input an option namespace and a `render.Renderer` instance
"""
opts = _parse(tags)
renderer = render.Renderer(dryrun=opts.check)
for g in generators:
g(opts, renderer)
sys.exit(1 if opts.check and renderer.done_something else 0)
g(opts, render.Renderer())

View File

@@ -9,10 +9,12 @@ from . import paths
def _init_options():
Option("--check", "-c", action="store_true")
Option("--verbose", "-v", action="store_true")
Option("--schema", tags=["schema"], type=pathlib.Path, default=paths.swift_dir / "codegen/schema.yml")
Option("--dbscheme", tags=["dbscheme"], type=pathlib.Path, default=paths.swift_dir / "ql/lib/swift.dbscheme")
Option("--ql-output", tags=["ql"], type=pathlib.Path, default=paths.swift_dir / "ql/lib/codeql/swift/generated")
Option("--ql-stub-output", tags=["ql"], type=pathlib.Path, default=paths.swift_dir / "ql/lib/codeql/swift/elements")
Option("--codeql-binary", tags=["ql"], default="codeql")
_options = collections.defaultdict(list)

View File

@@ -5,7 +5,6 @@
https://mustache.github.io/
"""
import hashlib
import logging
import pathlib
@@ -16,29 +15,13 @@ from . import paths
log = logging.getLogger(__name__)
def _md5(data):
return hashlib.md5(data).digest()
class Renderer:
""" Template renderer using mustache templates in the `templates` directory """
def __init__(self, dryrun=False):
""" Construct the renderer, which will not write anything if `dryrun` is `True` """
def __init__(self):
self.r = pystache.Renderer(search_dirs=str(paths.lib_dir / "templates"), escape=lambda u: u)
self.generator = paths.exe_file.relative_to(paths.swift_dir)
self.dryrun = dryrun
self.written = set()
self.skipped = set()
self.erased = set()
@property
def done_something(self):
return bool(self.written or self.erased)
@property
def rendered(self):
return self.written | self.skipped
def render(self, data, output: pathlib.Path):
""" Render `data` to `output`.
@@ -50,27 +33,14 @@ class Renderer:
mnemonic = type(data).__name__
output.parent.mkdir(parents=True, exist_ok=True)
data = self.r.render_name(data.template, data, generator=self.generator)
if output.is_file():
with open(output, "rb") as file:
if _md5(data.encode()) == _md5(file.read()):
log.debug(f"skipped {output.name}")
self.skipped.add(output)
return
if self.dryrun:
log.error(f"would have generated {mnemonic} {output.name}")
else:
with open(output, "w") as out:
out.write(data)
log.info(f"generated {mnemonic} {output.name}")
log.debug(f"generated {mnemonic} {output.name}")
self.written.add(output)
def cleanup(self, existing):
""" Remove files in `existing` for which no `render` has been called """
for f in existing - self.written - self.skipped:
for f in existing - self.written:
if f.is_file():
if self.dryrun:
log.error(f"would have removed {f.name}")
else:
f.unlink()
log.info(f"removed {f.name}")
self.erased.add(f)

View File

@@ -0,0 +1,47 @@
// generated by {{generator}}
{{#imports}}
import {{.}}
{{/imports}}
class {{name}}Base extends {{db_id}}{{#bases}}, {{.}}{{/bases}} {
{{#root}}
string toString() { none() } // overridden by subclasses
{{name}}Base getResolveStep() { none() } // overridden by subclasses
{{name}}Base resolve() {
not exists(getResolveStep()) and result = this
or
result = getResolveStep().resolve()
}
{{/root}}
{{#final}}
override string toString() { result = "{{name}}" }
{{/final}}
{{#properties}}
{{#type_is_class}}
{{type}} get{{singular}}({{#params}}{{^first}}, {{/first}}{{type}} {{param}}{{/params}}) {
exists({{type}} {{local_var}} |
{{tablename}}({{#tableparams}}{{^first}}, {{/first}}{{param}}{{/tableparams}})
and
result = {{local_var}}.resolve())
}
{{/type_is_class}}
{{^type_is_class}}
{{type}} get{{singular}}({{#params}}{{^first}}, {{/first}}{{type}} {{param}}{{/params}}) {
{{tablename}}({{#tableparams}}{{^first}}, {{/first}}{{param}}{{/tableparams}})
}
{{/type_is_class}}
{{#indefinite_article}}
{{type}} get{{.}}{{singular}}() {
result = get{{singular}}({{#params}}{{^first}}, {{/first}}_{{/params}})
}
int getNumberOf{{plural}}() {
result = count(get{{.}}{{singular}}())
}
{{/indefinite_article}}
{{/properties}}
}

View File

@@ -0,0 +1,4 @@
// generated by {{generator}}
{{#imports}}
import {{.}}
{{/imports}}

View File

@@ -0,0 +1,4 @@
// generated by {{generator}}, remove this comment if you wish to edit this file
private import {{base_import}}
class {{name}} extends {{name}}Base { }

View File

@@ -7,4 +7,4 @@ sourceLocationPrefix(
answer_to_life_the_universe_and_everything(
int answer: int ref
)
);

202
swift/codegen/qlgen.py Executable file
View File

@@ -0,0 +1,202 @@
#!/usr/bin/env python3
import logging
import pathlib
import subprocess
from dataclasses import dataclass, field
from typing import List, ClassVar
import inflection
from lib import schema, paths, generator
log = logging.getLogger(__name__)
@dataclass
class QlParam:
param: str
type: str = None
first: bool = False
@dataclass
class QlProperty:
singular: str
type: str
tablename: str
tableparams: List[QlParam]
plural: str = None
params: List[QlParam] = field(default_factory=list)
first: bool = False
local_var: str = "x"
def __post_init__(self):
if self.params:
self.params[0].first = True
while self.local_var in (p.param for p in self.params):
self.local_var += "_"
assert self.tableparams
if self.type_is_class:
self.tableparams = [x if x != "result" else self.local_var for x in self.tableparams]
self.tableparams = [QlParam(x) for x in self.tableparams]
self.tableparams[0].first = True
@property
def indefinite_article(self):
if self.plural:
return "An" if self.singular[0] in "AEIO" else "A"
@property
def type_is_class(self):
return self.type[0].isupper()
@dataclass
class QlClass:
template: ClassVar = 'ql_class'
name: str
bases: List[str]
final: bool
properties: List[QlProperty]
dir: pathlib.Path
imports: List[str] = field(default_factory=list)
def __post_init__(self):
self.bases = sorted(self.bases)
if self.properties:
self.properties[0].first = True
@property
def db_id(self):
return "@" + inflection.underscore(self.name)
@property
def root(self):
return not self.bases
@property
def path(self):
return self.dir / self.name
@dataclass
class QlStub:
template: ClassVar = 'ql_stub'
name: str
base_import: str
@dataclass
class QlImportList:
template: ClassVar = 'ql_imports'
imports: List[str] = field(default_factory=list)
def get_ql_property(cls: schema.Class, prop: schema.Property):
if prop.is_single:
return QlProperty(
singular=inflection.camelize(prop.name),
type=prop.type,
tablename=inflection.tableize(cls.name),
tableparams=["this"] + ["result" if p is prop else "_" for p in cls.properties if p.is_single],
)
elif prop.is_optional:
return QlProperty(
singular=inflection.camelize(prop.name),
type=prop.type,
tablename=inflection.tableize(f"{cls.name}_{prop.name}"),
tableparams=["this", "result"],
)
elif prop.is_repeated:
return QlProperty(
singular=inflection.singularize(inflection.camelize(prop.name)),
plural=inflection.pluralize(inflection.camelize(prop.name)),
type=prop.type,
tablename=inflection.tableize(f"{cls.name}_{prop.name}"),
tableparams=["this", "index", "result"],
params=[QlParam("index", type="int")],
)
def get_ql_class(cls: schema.Class):
return QlClass(
name=cls.name,
bases=cls.bases,
final=not cls.derived,
properties=[get_ql_property(cls, p) for p in cls.properties],
dir=cls.dir,
)
def get_import(file):
stem = file.relative_to(paths.swift_dir / "ql/lib").with_suffix("")
return str(stem).replace("/", ".")
def get_types_used_by(cls: QlClass):
for b in cls.bases:
yield b
for p in cls.properties:
yield p.type
for param in p.params:
yield param.type
def get_classes_used_by(cls: QlClass):
return sorted(set(t for t in get_types_used_by(cls) if t[0].isupper()))
def is_generated(file):
with open(file) as contents:
return next(contents).startswith("// generated")
def format(codeql, files):
format_cmd = [codeql, "query", "format", "--in-place", "--"]
format_cmd.extend(str(f) for f in files)
res = subprocess.run(format_cmd, check=True, stderr=subprocess.PIPE, text=True)
for line in res.stderr.splitlines():
log.debug(line.strip())
def generate(opts, renderer):
input = opts.schema.resolve()
out = opts.ql_output.resolve()
stub_out = opts.ql_stub_output.resolve()
existing = {q for q in out.rglob("*.qll")}
existing |= {q for q in stub_out.rglob("*.qll") if is_generated(q)}
with open(input) as src:
data = schema.load(src)
classes = [get_ql_class(cls) for cls in data.classes.values()]
imports = {}
for c in classes:
imports[c.name] = get_import(stub_out / c.path)
for c in classes:
assert not c.final or c.bases, c.name
qll = (out / c.path).with_suffix(".qll")
c.imports = [imports[t] for t in get_classes_used_by(c)]
renderer.render(c, qll)
stub_file = (stub_out / c.path).with_suffix(".qll")
if not stub_file.is_file() or is_generated(stub_file):
stub = QlStub(name=c.name, base_import=get_import(qll))
renderer.render(stub, stub_file)
# for example path/to/syntax/generated -> path/to/syntax.qll
include_file = stub_out.with_suffix(".qll")
all_imports = QlImportList(v for _, v in sorted(imports.items()))
renderer.render(all_imports, include_file)
renderer.cleanup(existing)
format(opts.codeql_binary, renderer.written)
if __name__ == "__main__":
generator.run(generate, tags=["schema", "ql"])

View File

@@ -0,0 +1,283 @@
// generated by codegen/codegen.py
import codeql.swift.elements.expr.AbstractClosureExpr
import codeql.swift.elements.decl.AbstractFunctionDecl
import codeql.swift.elements.decl.AbstractStorageDecl
import codeql.swift.elements.decl.AbstractTypeParamDecl
import codeql.swift.elements.decl.AccessorDecl
import codeql.swift.elements.type.AnyBuiltinIntegerType
import codeql.swift.elements.type.AnyFunctionType
import codeql.swift.elements.type.AnyGenericType
import codeql.swift.elements.expr.AnyHashableErasureExpr
import codeql.swift.elements.type.AnyMetatypeType
import codeql.swift.elements.pattern.AnyPattern
import codeql.swift.elements.expr.AnyTryExpr
import codeql.swift.elements.expr.AppliedPropertyWrapperExpr
import codeql.swift.elements.expr.ApplyExpr
import codeql.swift.elements.expr.ArchetypeToSuperExpr
import codeql.swift.elements.type.ArchetypeType
import codeql.swift.elements.expr.Argument
import codeql.swift.elements.expr.ArrayExpr
import codeql.swift.elements.type.ArraySliceType
import codeql.swift.elements.expr.ArrayToPointerExpr
import codeql.swift.elements.expr.ArrowExpr
import codeql.swift.elements.expr.AssignExpr
import codeql.swift.elements.decl.AssociatedTypeDecl
import codeql.swift.elements.AstNode
import codeql.swift.elements.expr.AutoClosureExpr
import codeql.swift.elements.expr.AwaitExpr
import codeql.swift.elements.expr.BinaryExpr
import codeql.swift.elements.expr.BindOptionalExpr
import codeql.swift.elements.pattern.BindingPattern
import codeql.swift.elements.pattern.BoolPattern
import codeql.swift.elements.expr.BooleanLiteralExpr
import codeql.swift.elements.type.BoundGenericClassType
import codeql.swift.elements.type.BoundGenericEnumType
import codeql.swift.elements.type.BoundGenericStructType
import codeql.swift.elements.type.BoundGenericType
import codeql.swift.elements.stmt.BraceStmt
import codeql.swift.elements.stmt.BreakStmt
import codeql.swift.elements.expr.BridgeFromObjCExpr
import codeql.swift.elements.expr.BridgeToObjCExpr
import codeql.swift.elements.type.BuiltinBridgeObjectType
import codeql.swift.elements.type.BuiltinDefaultActorStorageType
import codeql.swift.elements.type.BuiltinExecutorType
import codeql.swift.elements.type.BuiltinFloatType
import codeql.swift.elements.type.BuiltinIntegerLiteralType
import codeql.swift.elements.type.BuiltinIntegerType
import codeql.swift.elements.type.BuiltinJobType
import codeql.swift.elements.expr.BuiltinLiteralExpr
import codeql.swift.elements.type.BuiltinNativeObjectType
import codeql.swift.elements.type.BuiltinRawPointerType
import codeql.swift.elements.type.BuiltinRawUnsafeContinuationType
import codeql.swift.elements.type.BuiltinType
import codeql.swift.elements.type.BuiltinUnsafeValueBufferType
import codeql.swift.elements.type.BuiltinVectorType
import codeql.swift.elements.expr.CallExpr
import codeql.swift.elements.expr.CaptureListExpr
import codeql.swift.elements.stmt.CaseLabelItem
import codeql.swift.elements.stmt.CaseStmt
import codeql.swift.elements.expr.CheckedCastExpr
import codeql.swift.elements.decl.ClassDecl
import codeql.swift.elements.expr.ClassMetatypeToObjectExpr
import codeql.swift.elements.type.ClassType
import codeql.swift.elements.expr.ClosureExpr
import codeql.swift.elements.expr.CodeCompletionExpr
import codeql.swift.elements.expr.CoerceExpr
import codeql.swift.elements.expr.CollectionExpr
import codeql.swift.elements.expr.CollectionUpcastConversionExpr
import codeql.swift.elements.decl.ConcreteFuncDecl
import codeql.swift.elements.decl.ConcreteVarDecl
import codeql.swift.elements.stmt.ConditionElement
import codeql.swift.elements.expr.ConditionalBridgeFromObjCExpr
import codeql.swift.elements.expr.ConditionalCheckedCastExpr
import codeql.swift.elements.decl.ConstructorDecl
import codeql.swift.elements.expr.ConstructorRefCallExpr
import codeql.swift.elements.stmt.ContinueStmt
import codeql.swift.elements.expr.CovariantFunctionConversionExpr
import codeql.swift.elements.expr.CovariantReturnConversionExpr
import codeql.swift.elements.decl.Decl
import codeql.swift.elements.expr.DeclRefExpr
import codeql.swift.elements.expr.DefaultArgumentExpr
import codeql.swift.elements.stmt.DeferStmt
import codeql.swift.elements.type.DependentMemberType
import codeql.swift.elements.expr.DerivedToBaseExpr
import codeql.swift.elements.decl.DestructorDecl
import codeql.swift.elements.expr.DestructureTupleExpr
import codeql.swift.elements.expr.DictionaryExpr
import codeql.swift.elements.type.DictionaryType
import codeql.swift.elements.expr.DifferentiableFunctionExpr
import codeql.swift.elements.expr.DifferentiableFunctionExtractOriginalExpr
import codeql.swift.elements.expr.DiscardAssignmentExpr
import codeql.swift.elements.stmt.DoCatchStmt
import codeql.swift.elements.stmt.DoStmt
import codeql.swift.elements.expr.DotSelfExpr
import codeql.swift.elements.expr.DotSyntaxBaseIgnoredExpr
import codeql.swift.elements.expr.DotSyntaxCallExpr
import codeql.swift.elements.expr.DynamicLookupExpr
import codeql.swift.elements.expr.DynamicMemberRefExpr
import codeql.swift.elements.type.DynamicSelfType
import codeql.swift.elements.expr.DynamicSubscriptExpr
import codeql.swift.elements.expr.DynamicTypeExpr
import codeql.swift.elements.expr.EditorPlaceholderExpr
import codeql.swift.elements.Element
import codeql.swift.elements.decl.EnumCaseDecl
import codeql.swift.elements.decl.EnumDecl
import codeql.swift.elements.decl.EnumElementDecl
import codeql.swift.elements.pattern.EnumElementPattern
import codeql.swift.elements.expr.EnumIsCaseExpr
import codeql.swift.elements.type.EnumType
import codeql.swift.elements.expr.ErasureExpr
import codeql.swift.elements.expr.ErrorExpr
import codeql.swift.elements.type.ErrorType
import codeql.swift.elements.expr.ExistentialMetatypeToObjectExpr
import codeql.swift.elements.type.ExistentialMetatypeType
import codeql.swift.elements.type.ExistentialType
import codeql.swift.elements.expr.ExplicitCastExpr
import codeql.swift.elements.expr.Expr
import codeql.swift.elements.pattern.ExprPattern
import codeql.swift.elements.decl.ExtensionDecl
import codeql.swift.elements.stmt.FailStmt
import codeql.swift.elements.stmt.FallthroughStmt
import codeql.swift.elements.File
import codeql.swift.elements.expr.FloatLiteralExpr
import codeql.swift.elements.stmt.ForEachStmt
import codeql.swift.elements.expr.ForceTryExpr
import codeql.swift.elements.expr.ForceValueExpr
import codeql.swift.elements.expr.ForcedCheckedCastExpr
import codeql.swift.elements.expr.ForeignObjectConversionExpr
import codeql.swift.elements.decl.FuncDecl
import codeql.swift.elements.expr.FunctionConversionExpr
import codeql.swift.elements.type.FunctionType
import codeql.swift.elements.decl.GenericContext
import codeql.swift.elements.type.GenericFunctionType
import codeql.swift.elements.decl.GenericTypeDecl
import codeql.swift.elements.decl.GenericTypeParamDecl
import codeql.swift.elements.type.GenericTypeParamType
import codeql.swift.elements.stmt.GuardStmt
import codeql.swift.elements.expr.IdentityExpr
import codeql.swift.elements.decl.IfConfigDecl
import codeql.swift.elements.expr.IfExpr
import codeql.swift.elements.stmt.IfStmt
import codeql.swift.elements.expr.ImplicitConversionExpr
import codeql.swift.elements.decl.ImportDecl
import codeql.swift.elements.expr.InOutExpr
import codeql.swift.elements.expr.InOutToPointerExpr
import codeql.swift.elements.type.InOutType
import codeql.swift.elements.decl.InfixOperatorDecl
import codeql.swift.elements.expr.InjectIntoOptionalExpr
import codeql.swift.elements.expr.IntegerLiteralExpr
import codeql.swift.elements.expr.InterpolatedStringLiteralExpr
import codeql.swift.elements.expr.IsExpr
import codeql.swift.elements.pattern.IsPattern
import codeql.swift.elements.decl.IterableDeclContext
import codeql.swift.elements.expr.KeyPathApplicationExpr
import codeql.swift.elements.expr.KeyPathDotExpr
import codeql.swift.elements.expr.KeyPathExpr
import codeql.swift.elements.type.LValueType
import codeql.swift.elements.stmt.LabeledConditionalStmt
import codeql.swift.elements.stmt.LabeledStmt
import codeql.swift.elements.expr.LazyInitializerExpr
import codeql.swift.elements.expr.LinearFunctionExpr
import codeql.swift.elements.expr.LinearFunctionExtractOriginalExpr
import codeql.swift.elements.expr.LinearToDifferentiableFunctionExpr
import codeql.swift.elements.expr.LiteralExpr
import codeql.swift.elements.expr.LoadExpr
import codeql.swift.elements.Locatable
import codeql.swift.elements.Location
import codeql.swift.elements.expr.LookupExpr
import codeql.swift.elements.expr.MagicIdentifierLiteralExpr
import codeql.swift.elements.expr.MakeTemporarilyEscapableExpr
import codeql.swift.elements.expr.MemberRefExpr
import codeql.swift.elements.expr.MetatypeConversionExpr
import codeql.swift.elements.type.MetatypeType
import codeql.swift.elements.decl.MissingMemberDecl
import codeql.swift.elements.decl.ModuleDecl
import codeql.swift.elements.type.ModuleType
import codeql.swift.elements.pattern.NamedPattern
import codeql.swift.elements.type.NestedArchetypeType
import codeql.swift.elements.expr.NilLiteralExpr
import codeql.swift.elements.type.NominalOrBoundGenericNominalType
import codeql.swift.elements.type.NominalType
import codeql.swift.elements.decl.NominalTypeDecl
import codeql.swift.elements.expr.NumberLiteralExpr
import codeql.swift.elements.expr.ObjCSelectorExpr
import codeql.swift.elements.expr.ObjectLiteralExpr
import codeql.swift.elements.expr.OneWayExpr
import codeql.swift.elements.type.OpaqueTypeArchetypeType
import codeql.swift.elements.decl.OpaqueTypeDecl
import codeql.swift.elements.expr.OpaqueValueExpr
import codeql.swift.elements.expr.OpenExistentialExpr
import codeql.swift.elements.type.OpenedArchetypeType
import codeql.swift.elements.decl.OperatorDecl
import codeql.swift.elements.expr.OptionalEvaluationExpr
import codeql.swift.elements.pattern.OptionalSomePattern
import codeql.swift.elements.expr.OptionalTryExpr
import codeql.swift.elements.type.OptionalType
import codeql.swift.elements.expr.OtherConstructorDeclRefExpr
import codeql.swift.elements.expr.OverloadSetRefExpr
import codeql.swift.elements.expr.OverloadedDeclRefExpr
import codeql.swift.elements.decl.ParamDecl
import codeql.swift.elements.expr.ParenExpr
import codeql.swift.elements.pattern.ParenPattern
import codeql.swift.elements.type.ParenType
import codeql.swift.elements.pattern.Pattern
import codeql.swift.elements.decl.PatternBindingDecl
import codeql.swift.elements.type.PlaceholderType
import codeql.swift.elements.expr.PointerToPointerExpr
import codeql.swift.elements.decl.PostfixOperatorDecl
import codeql.swift.elements.expr.PostfixUnaryExpr
import codeql.swift.elements.stmt.PoundAssertStmt
import codeql.swift.elements.decl.PoundDiagnosticDecl
import codeql.swift.elements.decl.PrecedenceGroupDecl
import codeql.swift.elements.decl.PrefixOperatorDecl
import codeql.swift.elements.expr.PrefixUnaryExpr
import codeql.swift.elements.type.PrimaryArchetypeType
import codeql.swift.elements.expr.PropertyWrapperValuePlaceholderExpr
import codeql.swift.elements.type.ProtocolCompositionType
import codeql.swift.elements.decl.ProtocolDecl
import codeql.swift.elements.expr.ProtocolMetatypeToObjectExpr
import codeql.swift.elements.type.ProtocolType
import codeql.swift.elements.expr.RebindSelfInConstructorExpr
import codeql.swift.elements.type.ReferenceStorageType
import codeql.swift.elements.expr.RegexLiteralExpr
import codeql.swift.elements.stmt.RepeatWhileStmt
import codeql.swift.elements.stmt.ReturnStmt
import codeql.swift.elements.expr.SelfApplyExpr
import codeql.swift.elements.type.SequenceArchetypeType
import codeql.swift.elements.expr.SequenceExpr
import codeql.swift.elements.type.SilBlockStorageType
import codeql.swift.elements.type.SilBoxType
import codeql.swift.elements.type.SilFunctionType
import codeql.swift.elements.type.SilTokenType
import codeql.swift.elements.stmt.Stmt
import codeql.swift.elements.stmt.StmtCondition
import codeql.swift.elements.expr.StringLiteralExpr
import codeql.swift.elements.expr.StringToPointerExpr
import codeql.swift.elements.decl.StructDecl
import codeql.swift.elements.type.StructType
import codeql.swift.elements.decl.SubscriptDecl
import codeql.swift.elements.expr.SubscriptExpr
import codeql.swift.elements.type.SubstitutableType
import codeql.swift.elements.type.SugarType
import codeql.swift.elements.expr.SuperRefExpr
import codeql.swift.elements.stmt.SwitchStmt
import codeql.swift.elements.type.SyntaxSugarType
import codeql.swift.elements.expr.TapExpr
import codeql.swift.elements.stmt.ThrowStmt
import codeql.swift.elements.decl.TopLevelCodeDecl
import codeql.swift.elements.expr.TryExpr
import codeql.swift.elements.expr.TupleElementExpr
import codeql.swift.elements.expr.TupleExpr
import codeql.swift.elements.pattern.TuplePattern
import codeql.swift.elements.type.TupleType
import codeql.swift.elements.type.Type
import codeql.swift.elements.decl.TypeAliasDecl
import codeql.swift.elements.type.TypeAliasType
import codeql.swift.elements.decl.TypeDecl
import codeql.swift.elements.expr.TypeExpr
import codeql.swift.elements.typerepr.TypeRepr
import codeql.swift.elements.type.TypeVariableType
import codeql.swift.elements.pattern.TypedPattern
import codeql.swift.elements.type.UnarySyntaxSugarType
import codeql.swift.elements.type.UnboundGenericType
import codeql.swift.elements.expr.UnderlyingToOpaqueExpr
import codeql.swift.elements.expr.UnevaluatedInstanceExpr
import codeql.swift.elements.UnknownAstNode
import codeql.swift.elements.type.UnknownType
import codeql.swift.elements.type.UnmanagedStorageType
import codeql.swift.elements.type.UnownedStorageType
import codeql.swift.elements.expr.UnresolvedDeclRefExpr
import codeql.swift.elements.expr.UnresolvedDotExpr
import codeql.swift.elements.expr.UnresolvedMemberChainResultExpr
import codeql.swift.elements.expr.UnresolvedMemberExpr
import codeql.swift.elements.expr.UnresolvedPatternExpr
import codeql.swift.elements.expr.UnresolvedSpecializeExpr
import codeql.swift.elements.type.UnresolvedType
import codeql.swift.elements.expr.UnresolvedTypeConversionExpr
import codeql.swift.elements.decl.ValueDecl
import codeql.swift.elements.decl.VarDecl
import codeql.swift.elements.expr.VarargExpansionExpr
import codeql.swift.elements.type.VariadicSequenceType
import codeql.swift.elements.type.WeakStorageType
import codeql.swift.elements.stmt.WhileStmt
import codeql.swift.elements.stmt.YieldStmt

View File

@@ -0,0 +1,4 @@
// generated by codegen/codegen.py, remove this comment if you wish to edit this file
private import codeql.swift.generated.AstNode
class AstNode extends AstNodeBase { }

View File

@@ -0,0 +1,4 @@
// generated by codegen/codegen.py, remove this comment if you wish to edit this file
private import codeql.swift.generated.Element
class Element extends ElementBase { }

View File

@@ -0,0 +1,4 @@
// generated by codegen/codegen.py, remove this comment if you wish to edit this file
private import codeql.swift.generated.File
class File extends FileBase { }

View File

@@ -0,0 +1,4 @@
// generated by codegen/codegen.py, remove this comment if you wish to edit this file
private import codeql.swift.generated.Locatable
class Locatable extends LocatableBase { }

View File

@@ -0,0 +1,4 @@
// generated by codegen/codegen.py, remove this comment if you wish to edit this file
private import codeql.swift.generated.Location
class Location extends LocationBase { }

View File

@@ -0,0 +1,4 @@
// generated by codegen/codegen.py, remove this comment if you wish to edit this file
private import codeql.swift.generated.UnknownAstNode
class UnknownAstNode extends UnknownAstNodeBase { }

View File

@@ -0,0 +1,4 @@
// generated by codegen/codegen.py, remove this comment if you wish to edit this file
private import codeql.swift.generated.decl.AbstractFunctionDecl
class AbstractFunctionDecl extends AbstractFunctionDeclBase { }

View File

@@ -0,0 +1,4 @@
// generated by codegen/codegen.py, remove this comment if you wish to edit this file
private import codeql.swift.generated.decl.AbstractStorageDecl
class AbstractStorageDecl extends AbstractStorageDeclBase { }

View File

@@ -0,0 +1,4 @@
// generated by codegen/codegen.py, remove this comment if you wish to edit this file
private import codeql.swift.generated.decl.AbstractTypeParamDecl
class AbstractTypeParamDecl extends AbstractTypeParamDeclBase { }

View File

@@ -0,0 +1,4 @@
// generated by codegen/codegen.py, remove this comment if you wish to edit this file
private import codeql.swift.generated.decl.AccessorDecl
class AccessorDecl extends AccessorDeclBase { }

View File

@@ -0,0 +1,4 @@
// generated by codegen/codegen.py, remove this comment if you wish to edit this file
private import codeql.swift.generated.decl.AssociatedTypeDecl
class AssociatedTypeDecl extends AssociatedTypeDeclBase { }

View File

@@ -0,0 +1,4 @@
// generated by codegen/codegen.py, remove this comment if you wish to edit this file
private import codeql.swift.generated.decl.ClassDecl
class ClassDecl extends ClassDeclBase { }

View File

@@ -0,0 +1,4 @@
// generated by codegen/codegen.py, remove this comment if you wish to edit this file
private import codeql.swift.generated.decl.ConcreteFuncDecl
class ConcreteFuncDecl extends ConcreteFuncDeclBase { }

View File

@@ -0,0 +1,4 @@
// generated by codegen/codegen.py, remove this comment if you wish to edit this file
private import codeql.swift.generated.decl.ConcreteVarDecl
class ConcreteVarDecl extends ConcreteVarDeclBase { }

View File

@@ -0,0 +1,4 @@
// generated by codegen/codegen.py, remove this comment if you wish to edit this file
private import codeql.swift.generated.decl.ConstructorDecl
class ConstructorDecl extends ConstructorDeclBase { }

View File

@@ -0,0 +1,4 @@
// generated by codegen/codegen.py, remove this comment if you wish to edit this file
private import codeql.swift.generated.decl.Decl
class Decl extends DeclBase { }

View File

@@ -0,0 +1,4 @@
// generated by codegen/codegen.py, remove this comment if you wish to edit this file
private import codeql.swift.generated.decl.DestructorDecl
class DestructorDecl extends DestructorDeclBase { }

View File

@@ -0,0 +1,4 @@
// generated by codegen/codegen.py, remove this comment if you wish to edit this file
private import codeql.swift.generated.decl.EnumCaseDecl
class EnumCaseDecl extends EnumCaseDeclBase { }

View File

@@ -0,0 +1,4 @@
// generated by codegen/codegen.py, remove this comment if you wish to edit this file
private import codeql.swift.generated.decl.EnumDecl
class EnumDecl extends EnumDeclBase { }

View File

@@ -0,0 +1,4 @@
// generated by codegen/codegen.py, remove this comment if you wish to edit this file
private import codeql.swift.generated.decl.EnumElementDecl
class EnumElementDecl extends EnumElementDeclBase { }

View File

@@ -0,0 +1,4 @@
// generated by codegen/codegen.py, remove this comment if you wish to edit this file
private import codeql.swift.generated.decl.ExtensionDecl
class ExtensionDecl extends ExtensionDeclBase { }

View File

@@ -0,0 +1,4 @@
// generated by codegen/codegen.py, remove this comment if you wish to edit this file
private import codeql.swift.generated.decl.FuncDecl
class FuncDecl extends FuncDeclBase { }

View File

@@ -0,0 +1,4 @@
// generated by codegen/codegen.py, remove this comment if you wish to edit this file
private import codeql.swift.generated.decl.GenericContext
class GenericContext extends GenericContextBase { }

View File

@@ -0,0 +1,4 @@
// generated by codegen/codegen.py, remove this comment if you wish to edit this file
private import codeql.swift.generated.decl.GenericTypeDecl
class GenericTypeDecl extends GenericTypeDeclBase { }

View File

@@ -0,0 +1,4 @@
// generated by codegen/codegen.py, remove this comment if you wish to edit this file
private import codeql.swift.generated.decl.GenericTypeParamDecl
class GenericTypeParamDecl extends GenericTypeParamDeclBase { }

View File

@@ -0,0 +1,4 @@
// generated by codegen/codegen.py, remove this comment if you wish to edit this file
private import codeql.swift.generated.decl.IfConfigDecl
class IfConfigDecl extends IfConfigDeclBase { }

View File

@@ -0,0 +1,4 @@
// generated by codegen/codegen.py, remove this comment if you wish to edit this file
private import codeql.swift.generated.decl.ImportDecl
class ImportDecl extends ImportDeclBase { }

View File

@@ -0,0 +1,4 @@
// generated by codegen/codegen.py, remove this comment if you wish to edit this file
private import codeql.swift.generated.decl.InfixOperatorDecl
class InfixOperatorDecl extends InfixOperatorDeclBase { }

View File

@@ -0,0 +1,4 @@
// generated by codegen/codegen.py, remove this comment if you wish to edit this file
private import codeql.swift.generated.decl.IterableDeclContext
class IterableDeclContext extends IterableDeclContextBase { }

View File

@@ -0,0 +1,4 @@
// generated by codegen/codegen.py, remove this comment if you wish to edit this file
private import codeql.swift.generated.decl.MissingMemberDecl
class MissingMemberDecl extends MissingMemberDeclBase { }

View File

@@ -0,0 +1,4 @@
// generated by codegen/codegen.py, remove this comment if you wish to edit this file
private import codeql.swift.generated.decl.ModuleDecl
class ModuleDecl extends ModuleDeclBase { }

View File

@@ -0,0 +1,4 @@
// generated by codegen/codegen.py, remove this comment if you wish to edit this file
private import codeql.swift.generated.decl.NominalTypeDecl
class NominalTypeDecl extends NominalTypeDeclBase { }

View File

@@ -0,0 +1,4 @@
// generated by codegen/codegen.py, remove this comment if you wish to edit this file
private import codeql.swift.generated.decl.OpaqueTypeDecl
class OpaqueTypeDecl extends OpaqueTypeDeclBase { }

View File

@@ -0,0 +1,4 @@
// generated by codegen/codegen.py, remove this comment if you wish to edit this file
private import codeql.swift.generated.decl.OperatorDecl
class OperatorDecl extends OperatorDeclBase { }

View File

@@ -0,0 +1,4 @@
// generated by codegen/codegen.py, remove this comment if you wish to edit this file
private import codeql.swift.generated.decl.ParamDecl
class ParamDecl extends ParamDeclBase { }

View File

@@ -0,0 +1,4 @@
// generated by codegen/codegen.py, remove this comment if you wish to edit this file
private import codeql.swift.generated.decl.PatternBindingDecl
class PatternBindingDecl extends PatternBindingDeclBase { }

View File

@@ -0,0 +1,4 @@
// generated by codegen/codegen.py, remove this comment if you wish to edit this file
private import codeql.swift.generated.decl.PostfixOperatorDecl
class PostfixOperatorDecl extends PostfixOperatorDeclBase { }

View File

@@ -0,0 +1,4 @@
// generated by codegen/codegen.py, remove this comment if you wish to edit this file
private import codeql.swift.generated.decl.PoundDiagnosticDecl
class PoundDiagnosticDecl extends PoundDiagnosticDeclBase { }

View File

@@ -0,0 +1,4 @@
// generated by codegen/codegen.py, remove this comment if you wish to edit this file
private import codeql.swift.generated.decl.PrecedenceGroupDecl
class PrecedenceGroupDecl extends PrecedenceGroupDeclBase { }

View File

@@ -0,0 +1,4 @@
// generated by codegen/codegen.py, remove this comment if you wish to edit this file
private import codeql.swift.generated.decl.PrefixOperatorDecl
class PrefixOperatorDecl extends PrefixOperatorDeclBase { }

View File

@@ -0,0 +1,4 @@
// generated by codegen/codegen.py, remove this comment if you wish to edit this file
private import codeql.swift.generated.decl.ProtocolDecl
class ProtocolDecl extends ProtocolDeclBase { }

View File

@@ -0,0 +1,4 @@
// generated by codegen/codegen.py, remove this comment if you wish to edit this file
private import codeql.swift.generated.decl.StructDecl
class StructDecl extends StructDeclBase { }

View File

@@ -0,0 +1,4 @@
// generated by codegen/codegen.py, remove this comment if you wish to edit this file
private import codeql.swift.generated.decl.SubscriptDecl
class SubscriptDecl extends SubscriptDeclBase { }

View File

@@ -0,0 +1,4 @@
// generated by codegen/codegen.py, remove this comment if you wish to edit this file
private import codeql.swift.generated.decl.TopLevelCodeDecl
class TopLevelCodeDecl extends TopLevelCodeDeclBase { }

View File

@@ -0,0 +1,4 @@
// generated by codegen/codegen.py, remove this comment if you wish to edit this file
private import codeql.swift.generated.decl.TypeAliasDecl
class TypeAliasDecl extends TypeAliasDeclBase { }

View File

@@ -0,0 +1,4 @@
// generated by codegen/codegen.py, remove this comment if you wish to edit this file
private import codeql.swift.generated.decl.TypeDecl
class TypeDecl extends TypeDeclBase { }

View File

@@ -0,0 +1,4 @@
// generated by codegen/codegen.py, remove this comment if you wish to edit this file
private import codeql.swift.generated.decl.ValueDecl
class ValueDecl extends ValueDeclBase { }

View File

@@ -0,0 +1,4 @@
// generated by codegen/codegen.py, remove this comment if you wish to edit this file
private import codeql.swift.generated.decl.VarDecl
class VarDecl extends VarDeclBase { }

View File

@@ -0,0 +1,4 @@
// generated by codegen/codegen.py, remove this comment if you wish to edit this file
private import codeql.swift.generated.expr.AbstractClosureExpr
class AbstractClosureExpr extends AbstractClosureExprBase { }

View File

@@ -0,0 +1,4 @@
// generated by codegen/codegen.py, remove this comment if you wish to edit this file
private import codeql.swift.generated.expr.AnyHashableErasureExpr
class AnyHashableErasureExpr extends AnyHashableErasureExprBase { }

View File

@@ -0,0 +1,4 @@
// generated by codegen/codegen.py, remove this comment if you wish to edit this file
private import codeql.swift.generated.expr.AnyTryExpr
class AnyTryExpr extends AnyTryExprBase { }

View File

@@ -0,0 +1,4 @@
// generated by codegen/codegen.py, remove this comment if you wish to edit this file
private import codeql.swift.generated.expr.AppliedPropertyWrapperExpr
class AppliedPropertyWrapperExpr extends AppliedPropertyWrapperExprBase { }

View File

@@ -0,0 +1,4 @@
// generated by codegen/codegen.py, remove this comment if you wish to edit this file
private import codeql.swift.generated.expr.ApplyExpr
class ApplyExpr extends ApplyExprBase { }

View File

@@ -0,0 +1,4 @@
// generated by codegen/codegen.py, remove this comment if you wish to edit this file
private import codeql.swift.generated.expr.ArchetypeToSuperExpr
class ArchetypeToSuperExpr extends ArchetypeToSuperExprBase { }

View File

@@ -0,0 +1,4 @@
// generated by codegen/codegen.py, remove this comment if you wish to edit this file
private import codeql.swift.generated.expr.Argument
class Argument extends ArgumentBase { }

View File

@@ -0,0 +1,4 @@
// generated by codegen/codegen.py, remove this comment if you wish to edit this file
private import codeql.swift.generated.expr.ArrayExpr
class ArrayExpr extends ArrayExprBase { }

View File

@@ -0,0 +1,4 @@
// generated by codegen/codegen.py, remove this comment if you wish to edit this file
private import codeql.swift.generated.expr.ArrayToPointerExpr
class ArrayToPointerExpr extends ArrayToPointerExprBase { }

View File

@@ -0,0 +1,4 @@
// generated by codegen/codegen.py, remove this comment if you wish to edit this file
private import codeql.swift.generated.expr.ArrowExpr
class ArrowExpr extends ArrowExprBase { }

View File

@@ -0,0 +1,4 @@
// generated by codegen/codegen.py, remove this comment if you wish to edit this file
private import codeql.swift.generated.expr.AssignExpr
class AssignExpr extends AssignExprBase { }

View File

@@ -0,0 +1,4 @@
// generated by codegen/codegen.py, remove this comment if you wish to edit this file
private import codeql.swift.generated.expr.AutoClosureExpr
class AutoClosureExpr extends AutoClosureExprBase { }

View File

@@ -0,0 +1,4 @@
// generated by codegen/codegen.py, remove this comment if you wish to edit this file
private import codeql.swift.generated.expr.AwaitExpr
class AwaitExpr extends AwaitExprBase { }

View File

@@ -0,0 +1,4 @@
// generated by codegen/codegen.py, remove this comment if you wish to edit this file
private import codeql.swift.generated.expr.BinaryExpr
class BinaryExpr extends BinaryExprBase { }

View File

@@ -0,0 +1,4 @@
// generated by codegen/codegen.py, remove this comment if you wish to edit this file
private import codeql.swift.generated.expr.BindOptionalExpr
class BindOptionalExpr extends BindOptionalExprBase { }

View File

@@ -0,0 +1,4 @@
// generated by codegen/codegen.py, remove this comment if you wish to edit this file
private import codeql.swift.generated.expr.BooleanLiteralExpr
class BooleanLiteralExpr extends BooleanLiteralExprBase { }

View File

@@ -0,0 +1,4 @@
// generated by codegen/codegen.py, remove this comment if you wish to edit this file
private import codeql.swift.generated.expr.BridgeFromObjCExpr
class BridgeFromObjCExpr extends BridgeFromObjCExprBase { }

View File

@@ -0,0 +1,4 @@
// generated by codegen/codegen.py, remove this comment if you wish to edit this file
private import codeql.swift.generated.expr.BridgeToObjCExpr
class BridgeToObjCExpr extends BridgeToObjCExprBase { }

View File

@@ -0,0 +1,4 @@
// generated by codegen/codegen.py, remove this comment if you wish to edit this file
private import codeql.swift.generated.expr.BuiltinLiteralExpr
class BuiltinLiteralExpr extends BuiltinLiteralExprBase { }

View File

@@ -0,0 +1,4 @@
// generated by codegen/codegen.py, remove this comment if you wish to edit this file
private import codeql.swift.generated.expr.CallExpr
class CallExpr extends CallExprBase { }

View File

@@ -0,0 +1,4 @@
// generated by codegen/codegen.py, remove this comment if you wish to edit this file
private import codeql.swift.generated.expr.CaptureListExpr
class CaptureListExpr extends CaptureListExprBase { }

View File

@@ -0,0 +1,4 @@
// generated by codegen/codegen.py, remove this comment if you wish to edit this file
private import codeql.swift.generated.expr.CheckedCastExpr
class CheckedCastExpr extends CheckedCastExprBase { }

View File

@@ -0,0 +1,4 @@
// generated by codegen/codegen.py, remove this comment if you wish to edit this file
private import codeql.swift.generated.expr.ClassMetatypeToObjectExpr
class ClassMetatypeToObjectExpr extends ClassMetatypeToObjectExprBase { }

View File

@@ -0,0 +1,4 @@
// generated by codegen/codegen.py, remove this comment if you wish to edit this file
private import codeql.swift.generated.expr.ClosureExpr
class ClosureExpr extends ClosureExprBase { }

View File

@@ -0,0 +1,4 @@
// generated by codegen/codegen.py, remove this comment if you wish to edit this file
private import codeql.swift.generated.expr.CodeCompletionExpr
class CodeCompletionExpr extends CodeCompletionExprBase { }

View File

@@ -0,0 +1,4 @@
// generated by codegen/codegen.py, remove this comment if you wish to edit this file
private import codeql.swift.generated.expr.CoerceExpr
class CoerceExpr extends CoerceExprBase { }

View File

@@ -0,0 +1,4 @@
// generated by codegen/codegen.py, remove this comment if you wish to edit this file
private import codeql.swift.generated.expr.CollectionExpr
class CollectionExpr extends CollectionExprBase { }

View File

@@ -0,0 +1,4 @@
// generated by codegen/codegen.py, remove this comment if you wish to edit this file
private import codeql.swift.generated.expr.CollectionUpcastConversionExpr
class CollectionUpcastConversionExpr extends CollectionUpcastConversionExprBase { }

View File

@@ -0,0 +1,4 @@
// generated by codegen/codegen.py, remove this comment if you wish to edit this file
private import codeql.swift.generated.expr.ConditionalBridgeFromObjCExpr
class ConditionalBridgeFromObjCExpr extends ConditionalBridgeFromObjCExprBase { }

View File

@@ -0,0 +1,4 @@
// generated by codegen/codegen.py, remove this comment if you wish to edit this file
private import codeql.swift.generated.expr.ConditionalCheckedCastExpr
class ConditionalCheckedCastExpr extends ConditionalCheckedCastExprBase { }

View File

@@ -0,0 +1,4 @@
// generated by codegen/codegen.py, remove this comment if you wish to edit this file
private import codeql.swift.generated.expr.ConstructorRefCallExpr
class ConstructorRefCallExpr extends ConstructorRefCallExprBase { }

View File

@@ -0,0 +1,4 @@
// generated by codegen/codegen.py, remove this comment if you wish to edit this file
private import codeql.swift.generated.expr.CovariantFunctionConversionExpr
class CovariantFunctionConversionExpr extends CovariantFunctionConversionExprBase { }

View File

@@ -0,0 +1,4 @@
// generated by codegen/codegen.py, remove this comment if you wish to edit this file
private import codeql.swift.generated.expr.CovariantReturnConversionExpr
class CovariantReturnConversionExpr extends CovariantReturnConversionExprBase { }

View File

@@ -0,0 +1,4 @@
// generated by codegen/codegen.py, remove this comment if you wish to edit this file
private import codeql.swift.generated.expr.DeclRefExpr
class DeclRefExpr extends DeclRefExprBase { }

View File

@@ -0,0 +1,4 @@
// generated by codegen/codegen.py, remove this comment if you wish to edit this file
private import codeql.swift.generated.expr.DefaultArgumentExpr
class DefaultArgumentExpr extends DefaultArgumentExprBase { }

View File

@@ -0,0 +1,4 @@
// generated by codegen/codegen.py, remove this comment if you wish to edit this file
private import codeql.swift.generated.expr.DerivedToBaseExpr
class DerivedToBaseExpr extends DerivedToBaseExprBase { }

View File

@@ -0,0 +1,4 @@
// generated by codegen/codegen.py, remove this comment if you wish to edit this file
private import codeql.swift.generated.expr.DestructureTupleExpr
class DestructureTupleExpr extends DestructureTupleExprBase { }

View File

@@ -0,0 +1,4 @@
// generated by codegen/codegen.py, remove this comment if you wish to edit this file
private import codeql.swift.generated.expr.DictionaryExpr
class DictionaryExpr extends DictionaryExprBase { }

View File

@@ -0,0 +1,4 @@
// generated by codegen/codegen.py, remove this comment if you wish to edit this file
private import codeql.swift.generated.expr.DifferentiableFunctionExpr
class DifferentiableFunctionExpr extends DifferentiableFunctionExprBase { }

View File

@@ -0,0 +1,4 @@
private import codeql.swift.generated.expr.DifferentiableFunctionExtractOriginalExpr
class DifferentiableFunctionExtractOriginalExpr extends DifferentiableFunctionExtractOriginalExprBase {
}

Some files were not shown because too many files have changed in this diff Show More