GYB cleanup

This commit is contained in:
Sergej Jaskiewicz
2019-10-04 12:41:37 +03:00
committed by Sergej Jaskiewicz
parent 69ead1c8fb
commit 3a5389d398
5 changed files with 151 additions and 26 deletions
+110
View File
@@ -43,3 +43,113 @@ DerivedData/
# End of https://www.gitignore.io/api/Xcode
.idea
# Created by https://www.gitignore.io/api/Python
# Edit at https://www.gitignore.io/?templates=Python
### Python ###
# Byte-compiled / optimized / DLL files
__pycache__/
*.py[cod]
*$py.class
# C extensions
*.so
# Distribution / packaging
.Python
build/
develop-eggs/
dist/
downloads/
eggs/
.eggs/
lib/
lib64/
parts/
sdist/
var/
wheels/
pip-wheel-metadata/
share/python-wheels/
*.egg-info/
.installed.cfg
*.egg
MANIFEST
# PyInstaller
# Usually these files are written by a python script from a template
# before PyInstaller builds the exe, so as to inject date/other infos into it.
*.manifest
*.spec
# Installer logs
pip-log.txt
pip-delete-this-directory.txt
# Unit test / coverage reports
htmlcov/
.tox/
.nox/
.coverage
.coverage.*
.cache
nosetests.xml
coverage.xml
*.cover
.hypothesis/
.pytest_cache/
# Translations
*.mo
*.pot
# Scrapy stuff:
.scrapy
# Sphinx documentation
docs/_build/
# PyBuilder
target/
# pyenv
.python-version
# pipenv
# According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control.
# However, in case of collaboration, if having platform-specific dependencies or dependencies
# having no cross-platform support, pipenv may install dependencies that don't work, or not
# install all needed dependencies.
#Pipfile.lock
# celery beat schedule file
celerybeat-schedule
# SageMath parsed files
*.sage.py
# Spyder project settings
.spyderproject
.spyproject
# Rope project settings
.ropeproject
# Mr Developer
.mr.developer.cfg
.project
.pydevproject
# mkdocs documentation
/site
# mypy
.mypy_cache/
.dmypy.json
dmypy.json
# Pyre type checker
.pyre/
# End of https://www.gitignore.io/api/Python
@@ -150,7 +150,7 @@ extension Publishers.MapKeyPath {
private let downstream: Downstream
private let keyPath: KeyPath<Upstream.Output, Output>
private let keyPath: KeyPath<Input, Output>
let combineIdentifier = CombineIdentifier()
@@ -202,9 +202,9 @@ extension Publishers.MapKeyPath2 {
private let downstream: Downstream
private let keyPath0: KeyPath<Upstream.Output, Output0>
private let keyPath0: KeyPath<Input, Output0>
private let keyPath1: KeyPath<Upstream.Output, Output1>
private let keyPath1: KeyPath<Input, Output1>
let combineIdentifier = CombineIdentifier()
@@ -258,11 +258,11 @@ extension Publishers.MapKeyPath3 {
private let downstream: Downstream
private let keyPath0: KeyPath<Upstream.Output, Output0>
private let keyPath0: KeyPath<Input, Output0>
private let keyPath1: KeyPath<Upstream.Output, Output1>
private let keyPath1: KeyPath<Input, Output1>
private let keyPath2: KeyPath<Upstream.Output, Output2>
private let keyPath2: KeyPath<Input, Output2>
let combineIdentifier = CombineIdentifier()
@@ -7,26 +7,28 @@ ${template_header}
//
%{
from gyb_opencombine_support import (
suffix_variadic,
list_with_suffix_variadic
)
instantiations = [(1, '', ''),
(2, 'two', 'second '),
(3, 'three', 'third ')]
def suffixed(name, index, arity):
return name + ('' if arity == 1 else str(index))
def key_path_var(index, arity):
return suffixed('keyPath', index, arity)
return suffix_variadic('keyPath', index, arity)
def type_name(arity):
return suffixed('MapKeyPath', arity, arity)
def make_publisher_name(arity):
return suffix_variadic('MapKeyPath', arity, arity)
def make_output_types(arity):
return [suffixed('Output', i, arity) for i in range(arity)]
return list_with_suffix_variadic('Output', arity)
}%
extension Publisher {
% for arity, cardinal, _ in instantiations:
% result_types = [suffixed('Result', i, arity) for i in range(arity)]
% comma_separated_result_types = ', '.join(result_types)
% result_types = list_with_suffix_variadic('Result', arity)
% cs_result_types = ', '.join(result_types)
%
% method_args = \
% ['_ {}: KeyPath<Output, {}>'.format(key_path_var(i, arity), result_types[i]) \
@@ -35,7 +37,9 @@ extension Publisher {
%
% init_args = ['{}: {}'.format(key_path_var(i, arity), key_path_var(i, arity)) \
% for i in range(arity)]
% init_args_joined = ',\n '.join(init_args)
% init_args_joined = ',\n '.join(init_args)
%
% publisher_name = make_publisher_name(arity)
/// Returns a publisher that publishes the values of three key paths as a tuple.
///
@@ -48,9 +52,9 @@ extension Publisher {
% doc_comment_suffix = 'value of the key path' \
% if arity == 1 else 'values of {} key paths as a tuple'.format(cardinal)
/// - Returns: A publisher that publishes the ${doc_comment_suffix}.
public func map<${comma_separated_result_types}>(
public func map<${cs_result_types}>(
${method_args_joined}
) -> Publishers.${type_name(arity)}<Self, ${comma_separated_result_types}> {
) -> Publishers.${publisher_name}<Self, ${cs_result_types}> {
return .init(
upstream: self,
${init_args_joined}
@@ -66,13 +70,15 @@ extension Publishers {
% if arity == 1 else 'values of {} key paths as a tuple'.format(cardinal)
%
% output_types = make_output_types(arity)
% comma_separated_output_types = ', '.join(output_types)
% cs_output_types = ', '.join(output_types)
%
% publisher_name = make_publisher_name(arity)
/// A publisher that publishes the ${doc_comment_suffix}.
public struct ${type_name(arity)}<Upstream: Publisher, ${comma_separated_output_types}>: Publisher {
public struct ${publisher_name}<Upstream: Publisher, ${cs_output_types}>: Publisher {
% if arity != 1:
public typealias Output = (${comma_separated_output_types})
public typealias Output = (${cs_output_types})
% end
public typealias Failure = Upstream.Failure
@@ -96,9 +102,11 @@ extension Publishers {
}
% for arity, _, _ in instantiations:
% output_types = make_output_types(arity)
% comma_separated_output_types = ', '.join(output_types)
% cs_output_types = ', '.join(output_types)
%
% publisher_name = make_publisher_name(arity)
extension Publishers.${type_name(arity)} {
extension Publishers.${publisher_name} {
private struct Inner<Downstream: Subscriber>
: Subscriber,
@@ -114,14 +122,14 @@ extension Publishers.${type_name(arity)} {
private let downstream: Downstream
% for i in range(arity):
private let ${key_path_var(i, arity)}: KeyPath<Upstream.Output, ${output_types[i]}>
private let ${key_path_var(i, arity)}: KeyPath<Input, ${output_types[i]}>
% end
let combineIdentifier = CombineIdentifier()
fileprivate init(
downstream: Downstream,
parent: Publishers.${type_name(arity)}<Upstream, ${comma_separated_output_types}>
parent: Publishers.${publisher_name}<Upstream, ${cs_output_types}>
) {
self.downstream = downstream
% for i in range(arity):
+3 -1
View File
@@ -2,6 +2,8 @@
# GYB: Generate Your Boilerplate (improved names welcome; at least
# this one's short). See -h output for instructions
# This file was taken from https://github.com/apple/swift/blob/master/utils/gyb.py
from __future__ import print_function
import os
@@ -1264,4 +1266,4 @@ def main():
if __name__ == '__main__':
main()
main()
+5
View File
@@ -0,0 +1,5 @@
def suffix_variadic(name, index, arity):
return name + ('' if arity == 1 else str(index))
def list_with_suffix_variadic(name, arity):
return [suffix_variadic(name, i, arity) for i in range(arity)]