blob: 5a1843c0df0713575e9be0603dc51acfcdb4f8fb [file] [log] [blame]
# Copyright 2022 The Chromium Authors
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
"""
Filters clang args to make them suitable for libclang.
Rust involves several libclang-based tools that parse C++.
We pass such tools our complete {{cflags}}, but a few of the
arguments aren't appropriate for libclang (for example those
which load plugins).
This function filters them out.
"""
def filter_clang_args(clangargs):
def do_filter(args):
i = 0
while i < len(args):
# Intercept plugin arguments
if args[i] == '-Xclang':
i += 1
if args[i] == '-add-plugin':
pass
elif args[i].startswith('-plugin-arg'):
i += 2
else:
yield args[i]
i += 1
return list(do_filter(clangargs))