1
    2
    3
    4
    5
    6
    7
    8
    9
   10
   11
   12
   13
   14
   15
   16
   17
   18
   19
   20
   21
   22
   23
   24
   25
   26
   27
   28
   29
   30
   31

build / rust / filter_clang_args.py [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))