mirror of
https://github.com/apple/swift.git
synced 2025-12-14 20:36:38 +01:00
Introduce a new key `generated_buffers`, which stores an array of generated buffers. These include the buffer text, as well as its original location and any parent buffers. While here, also fix rdar://107281079 such that only apply the filename fallback logic to the pretty-printed Decl case. We ought to remove this fallback once the editor can handle it though. rdar://107281079 rdar://107952288
47 lines
1.7 KiB
Python
47 lines
1.7 KiB
Python
#!/usr/bin/env python3
|
|
# sourcekitd_path_sanitize.py - Cleans up paths from sourcekitd-test output
|
|
#
|
|
# This source file is part of the Swift.org open source project
|
|
#
|
|
# Copyright (c) 2014 - 2019 Apple Inc. and the Swift project authors
|
|
# Licensed under Apache License v2.0 with Runtime Library Exception
|
|
#
|
|
# See https://swift.org/LICENSE.txt for license information
|
|
# See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors
|
|
|
|
import re
|
|
import sys
|
|
|
|
# I'm sorry dear reader, unfortunately my knowledge of regex trumps my knowledge of
|
|
# Python. This pattern allows us to clean up file paths by stripping them down to
|
|
# just the relevant file name.
|
|
RE = re.compile(
|
|
# The key can either be 'filepath' or 'buffer_name'. Also apply this logic to
|
|
# the file name in XML, which is written 'file=\"...\"'.
|
|
r'(key\.(?:filepath|buffer_name): |file=)'
|
|
|
|
# Open delimiter with optional escape.
|
|
r'\\?"'
|
|
|
|
# Lazily match characters until we hit a slash, then match any non-slash that
|
|
# ends in the right file extension, capturing the result.
|
|
r'.*?[/\\]+([^/\\]*\.(?:swiftmodule|swift|pcm|h))'
|
|
|
|
# For swiftmodule bundles, we want to match against the directory name, so
|
|
# optionally match the .swiftmodule filename here. The lazy matching of the
|
|
# previous logic means we'll prefer to match the previous '.swiftmodule' as the
|
|
# directory.
|
|
r'(?:[/\\]+[^/\\]*\.swiftmodule)?'
|
|
|
|
# Close delimiter with optional escape.
|
|
r'\\?"'
|
|
)
|
|
|
|
try:
|
|
for line in sys.stdin.readlines():
|
|
# We substitute in both the key and the matched filename.
|
|
line = re.sub(RE, r'\1\2', line)
|
|
sys.stdout.write(line)
|
|
except KeyboardInterrupt:
|
|
sys.stdout.flush()
|