1
1
mirror of https://github.com/qvacua/vimr.git synced 2024-12-24 22:33:52 +03:00

Merge branch 'develop' into update-neovim

This commit is contained in:
Tae Won Ha 2018-10-04 21:58:44 +02:00
commit c81a819152
15 changed files with 82 additions and 47 deletions

View File

@ -86,18 +86,12 @@ static CFDataRef local_server_callback(CFMessagePortRef local, SInt32 msgid, CFD
NSThread *_localServerThread;
CFMessagePortRef _localServerPort;
CFRunLoopRef _localServerRunLoop;
NSCondition *_outputCondition;
}
- (NSArray<NSString *> *)nvimArgs {
return _nvimArgs;
}
- (NSCondition *)outputCondition {
return _outputCondition;
}
- (instancetype)initWithLocalServerName:(NSString *)localServerName
remoteServerName:(NSString *)remoteServerName
nvimArgs:(NSArray<NSString *> *)nvimArgs {
@ -107,8 +101,6 @@ static CFDataRef local_server_callback(CFMessagePortRef local, SInt32 msgid, CFD
return nil;
}
_outputCondition = [[NSCondition alloc] init];
_localServerName = localServerName;
_remoteServerName = remoteServerName;
_nvimArgs = nvimArgs;

View File

@ -11,8 +11,9 @@
#import "CocoaCategories.h"
static CFRunLoopRef _mainRunLoop;
NvimServer *_neovim_server;
CFRunLoopRef _mainRunLoop;
static void observe_parent_termination() {
pid_t parentPID = getppid();

View File

@ -9,7 +9,6 @@
@class NvimServer;
extern NvimServer *_neovim_server;
extern CFRunLoopRef _mainRunLoop;
extern void start_neovim(NSInteger width, NSInteger height, NSArray<NSString *> *args);

View File

@ -562,10 +562,21 @@ void custom_ui_autocmds_groups(
buf_T *buf,
exarg_T *eap __unused
) {
// We don't need these events in the UI (yet) and they slow down scrolling:
// Enable them, if necessary, only after optimizing the scrolling.
if (event == EVENT_CURSORMOVED || event == EVENT_CURSORMOVEDI) {
return;
switch (event) {
case EVENT_BUFENTER:
case EVENT_BUFLEAVE:
case EVENT_BUFWINENTER:
case EVENT_BUFWINLEAVE:
case EVENT_BUFWRITEPOST:
case EVENT_COLORSCHEME:
case EVENT_DIRCHANGED:
case EVENT_TABENTER:
case EVENT_TEXTCHANGED:
case EVENT_TEXTCHANGEDI:
break;
default:
return;
}
@autoreleasepool {

View File

@ -785,7 +785,7 @@
CLANG_WARN_UNREACHABLE_CODE = YES;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
COPY_PHASE_STRIP = NO;
CURRENT_PROJECT_VERSION = 289;
CURRENT_PROJECT_VERSION = 293;
DEBUG_INFORMATION_FORMAT = dwarf;
ENABLE_STRICT_OBJC_MSGSEND = YES;
ENABLE_TESTABILITY = YES;
@ -846,7 +846,7 @@
CLANG_WARN_UNREACHABLE_CODE = YES;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
COPY_PHASE_STRIP = NO;
CURRENT_PROJECT_VERSION = 289;
CURRENT_PROJECT_VERSION = 293;
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
ENABLE_NS_ASSERTIONS = NO;
ENABLE_STRICT_OBJC_MSGSEND = YES;
@ -874,7 +874,7 @@
COMBINE_HIDPI_IMAGES = YES;
DEFINES_MODULE = YES;
DYLIB_COMPATIBILITY_VERSION = 1;
DYLIB_CURRENT_VERSION = 289;
DYLIB_CURRENT_VERSION = 293;
DYLIB_INSTALL_NAME_BASE = "@rpath";
FRAMEWORK_SEARCH_PATHS = "$(PROJECT_DIR)/../Carthage/Build/Mac";
FRAMEWORK_VERSION = A;
@ -896,7 +896,7 @@
COMBINE_HIDPI_IMAGES = YES;
DEFINES_MODULE = YES;
DYLIB_COMPATIBILITY_VERSION = 1;
DYLIB_CURRENT_VERSION = 289;
DYLIB_CURRENT_VERSION = 293;
DYLIB_INSTALL_NAME_BASE = "@rpath";
FRAMEWORK_SEARCH_PATHS = "$(PROJECT_DIR)/../Carthage/Build/Mac";
FRAMEWORK_VERSION = A;

View File

@ -15,9 +15,9 @@
<key>CFBundlePackageType</key>
<string>FMWK</string>
<key>CFBundleShortVersionString</key>
<string>SNAPSHOT-289</string>
<string>SNAPSHOT-293</string>
<key>CFBundleVersion</key>
<string>289</string>
<string>293</string>
<key>NSHumanReadableCopyright</key>
<string>Copyright © 2017 Tae Won Ha. All rights reserved.</string>
<key>NSPrincipalClass</key>

View File

@ -1,4 +1,4 @@
// Auto generated for nvim v0.3.1-dev.
// Auto generated for nvim v0.3.1.
// See bin/generate_autocmds.py
enum NvimAutoCommandEvent: Int {

View File

@ -21,7 +21,8 @@ class ProcessUtils {
shellArgs.append("-i")
}
shellArgs.append(contentsOf: ["-c", "env"])
let marker = UUID().uuidString
shellArgs.append(contentsOf: ["-c", "echo \(marker) && env"])
let outputPipe = Pipe()
let errorPipe = Pipe()
@ -45,12 +46,16 @@ class ProcessUtils {
process.terminate()
process.waitUntilExit()
return output
guard let range = output.range(of: marker) else {
return [:]
}
return output[range.upperBound...]
.trimmingCharacters(in: .whitespacesAndNewlines)
.split(separator: "\n")
.reduce(into: [:]) { result, entry in
let split = entry
.split(separator: "=", maxSplits: 1, omittingEmptySubsequences: false)
.map { String($0) }
let split = entry.split(separator: "=", maxSplits: 1, omittingEmptySubsequences: false).map { String($0) }
guard split.count > 1 else { return }
result[split[0]] = split[1]
}
}

View File

@ -79,10 +79,16 @@
1929BF4FF30D9A9DE82C3052 /* FileUtilsTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1929B8042AC566CDF6C998A3 /* FileUtilsTest.swift */; };
1929BFC70581084B5CE04A5B /* MatcherTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1929BFE179BCA3C75A13D71B /* MatcherTests.swift */; };
1929BFDE22D155F7C4B19E96 /* HtmlPreviewTool.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1929B85023B042C485409CE1 /* HtmlPreviewTool.swift */; };
4B004BAA20FBA6700043A396 /* DictionaryCoding.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4B004BA920FBA6700043A396 /* DictionaryCoding.framework */; };
4B004BAB20FBA6700043A396 /* DictionaryCoding.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 4B004BA920FBA6700043A396 /* DictionaryCoding.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
4B004BAC20FBB4F10043A396 /* DictionaryCoding.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4B004BA920FBA6700043A396 /* DictionaryCoding.framework */; };
4B004BAD20FBBE1E0043A396 /* DictionaryCoding.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = 4B004BA920FBA6700043A396 /* DictionaryCoding.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
4B004BCF21063B600043A396 /* DictionaryDecoder.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4B004BCB21063B600043A396 /* DictionaryDecoder.swift */; };
4B004BD021063B600043A396 /* DictionaryDecoder.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4B004BCB21063B600043A396 /* DictionaryDecoder.swift */; };
4B004BD121063B600043A396 /* DictionaryCodingKey.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4B004BCC21063B600043A396 /* DictionaryCodingKey.swift */; };
4B004BD221063B600043A396 /* DictionaryCodingKey.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4B004BCC21063B600043A396 /* DictionaryCodingKey.swift */; };
4B004BD321063B600043A396 /* DictionaryEncoder.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4B004BCD21063B600043A396 /* DictionaryEncoder.swift */; };
4B004BD421063B600043A396 /* DictionaryEncoder.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4B004BCD21063B600043A396 /* DictionaryEncoder.swift */; };
4B004BD521063B600043A396 /* DictionaryErrors.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4B004BCE21063B600043A396 /* DictionaryErrors.swift */; };
4B004BD621063B600043A396 /* DictionaryErrors.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4B004BCE21063B600043A396 /* DictionaryErrors.swift */; };
4B029F1A1D45E349004EE0D3 /* PrefWindow.xib in Resources */ = {isa = PBXBuildFile; fileRef = 4B029F1C1D45E349004EE0D3 /* PrefWindow.xib */; };
4B17E54D209E3EA400265C1D /* RxNeovimApi.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 4B17E54C209E3EA400265C1D /* RxNeovimApi.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
4B17E54E209E3EFA00265C1D /* RxNeovimApi.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4B17E54C209E3EA400265C1D /* RxNeovimApi.framework */; };
@ -240,7 +246,6 @@
files = (
4BB1F5D22097706700EC394A /* MessagePack.framework in Embed Frameworks */,
4BB1F5CF2097704D00EC394A /* RxMsgpackRpc.framework in Embed Frameworks */,
4B004BAB20FBA6700043A396 /* DictionaryCoding.framework in Embed Frameworks */,
4BF18C411FD2E2C900DF95D1 /* CocoaFontAwesome.framework in Embed Frameworks */,
4BF18C421FD2E2C900DF95D1 /* CocoaMarkdown.framework in Embed Frameworks */,
4BF18C431FD2E2C900DF95D1 /* EonilFileSystemEvents.framework in Embed Frameworks */,
@ -352,6 +357,10 @@
1929BFC0A5A9C6DB09BE1368 /* Types.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Types.swift; sourceTree = "<group>"; };
1929BFE179BCA3C75A13D71B /* MatcherTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MatcherTests.swift; sourceTree = "<group>"; };
4B004BA920FBA6700043A396 /* DictionaryCoding.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = DictionaryCoding.framework; path = ../Carthage/Build/Mac/DictionaryCoding.framework; sourceTree = "<group>"; };
4B004BCB21063B600043A396 /* DictionaryDecoder.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = DictionaryDecoder.swift; path = ../../Carthage/Checkouts/DictionaryCoding/Sources/DictionaryCoding/DictionaryDecoder.swift; sourceTree = "<group>"; };
4B004BCC21063B600043A396 /* DictionaryCodingKey.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = DictionaryCodingKey.swift; path = ../../Carthage/Checkouts/DictionaryCoding/Sources/DictionaryCoding/DictionaryCodingKey.swift; sourceTree = "<group>"; };
4B004BCD21063B600043A396 /* DictionaryEncoder.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = DictionaryEncoder.swift; path = ../../Carthage/Checkouts/DictionaryCoding/Sources/DictionaryCoding/DictionaryEncoder.swift; sourceTree = "<group>"; };
4B004BCE21063B600043A396 /* DictionaryErrors.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = DictionaryErrors.swift; path = ../../Carthage/Checkouts/DictionaryCoding/Sources/DictionaryCoding/DictionaryErrors.swift; sourceTree = "<group>"; };
4B029F1B1D45E349004EE0D3 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/PrefWindow.xib; sourceTree = "<group>"; };
4B0A1AA72120C35100F1E02F /* Socket.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Socket.framework; path = ../Carthage/Build/Mac/Socket.framework; sourceTree = "<group>"; };
4B17E54C209E3EA400265C1D /* RxNeovimApi.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = RxNeovimApi.framework; path = ../Carthage/Build/Mac/RxNeovimApi.framework; sourceTree = "<group>"; };
@ -466,7 +475,6 @@
files = (
4BB1F5D12097705E00EC394A /* MessagePack.framework in Frameworks */,
4BB1F5CD20976F8900EC394A /* RxMsgpackRpc.framework in Frameworks */,
4B004BAA20FBA6700043A396 /* DictionaryCoding.framework in Frameworks */,
4BF18C391FD2E2AB00DF95D1 /* EonilFileSystemEvents.framework in Frameworks */,
4BF18C3A1FD2E2AB00DF95D1 /* PureLayout.framework in Frameworks */,
4BEBC23B215FD1AA007113C4 /* Socket.framework in Frameworks */,
@ -648,6 +656,17 @@
name = Middlewares;
sourceTree = "<group>";
};
4B004BCA21063B4D0043A396 /* DictionaryCoding */ = {
isa = PBXGroup;
children = (
4B004BCC21063B600043A396 /* DictionaryCodingKey.swift */,
4B004BCB21063B600043A396 /* DictionaryDecoder.swift */,
4B004BCD21063B600043A396 /* DictionaryEncoder.swift */,
4B004BCE21063B600043A396 /* DictionaryErrors.swift */,
);
name = DictionaryCoding;
sourceTree = "<group>";
};
4B5012001EBA791000F76C46 /* Frameworks */ = {
isa = PBXGroup;
children = (
@ -816,6 +835,7 @@
4BEBA5071CFF374B00673FDF /* VimR */ = {
isa = PBXGroup;
children = (
4B004BCA21063B4D0043A396 /* DictionaryCoding */,
4B2A2C0D1D0353750074CE9A /* Bridge.h */,
4BE45C1C1FD2DBD2005C0A95 /* Logger.swift */,
4B238BE01D3BF24200CBDD98 /* Application.swift */,
@ -1063,6 +1083,7 @@
4B64239A1D8EFE3000FC78C8 /* WorkspaceTool.swift in Sources */,
1929B462CD4935AFF6D69457 /* FileItem.swift in Sources */,
1929B6388EAF16C190B82955 /* FileItemIgnorePattern.swift in Sources */,
4B004BD521063B600043A396 /* DictionaryErrors.swift in Sources */,
1929B67DA3EB21A631EF1DBB /* FileUtils.swift in Sources */,
1929B3F5743967125F357C9F /* Matcher.swift in Sources */,
1929B53876E6952D378C2B30 /* ScoredFileItem.swift in Sources */,
@ -1081,6 +1102,7 @@
1929B4B70926DE113E6BF990 /* PreviewReducer.swift in Sources */,
1929B5C1BABBC0D09D97C3EF /* PreviewMiddleware.swift in Sources */,
1929B0F599D1F62C7BE53D2C /* HttpServerMiddleware.swift in Sources */,
4B004BD321063B600043A396 /* DictionaryEncoder.swift in Sources */,
1929B3AC66EFE35D68C020E3 /* PreviewToolReducer.swift in Sources */,
1929B59FA5C286E010F70BEE /* Types.swift in Sources */,
1929B6D8F5FC723B7109031F /* OpenQuicklyReducer.swift in Sources */,
@ -1116,8 +1138,10 @@
1929BE2F3E0182CC51F2763A /* ThemedTableSubviews.swift in Sources */,
1929B6460862447A31B5B082 /* ImageAndTextTableCell.swift in Sources */,
1929BBE28654E4307AF1E2FD /* Theme.swift in Sources */,
4B004BD121063B600043A396 /* DictionaryCodingKey.swift in Sources */,
1929B3A6C332FFAAEC7FD219 /* MainWindow+CustomTitle.swift in Sources */,
1929B8DDACEB28E6672AEC42 /* MainWindow.swift in Sources */,
4B004BCF21063B600043A396 /* DictionaryDecoder.swift in Sources */,
1929B5257DB27F03C6663482 /* MainWindow+Actions.swift in Sources */,
1929BE0F64A6CE5BCE2A5092 /* MainWindow+Delegates.swift in Sources */,
1929B8F498D1E7C53F572CE2 /* KeysPref.swift in Sources */,
@ -1134,12 +1158,15 @@
4B96FB3C1EBBC56F00E4E164 /* FileUtils.swift in Sources */,
4B96FB3D1EBBC56F00E4E164 /* Matcher.swift in Sources */,
4B96FB3E1EBBC56F00E4E164 /* Scorer.swift in Sources */,
4B004BD621063B600043A396 /* DictionaryErrors.swift in Sources */,
4B96FB3F1EBBC56F00E4E164 /* PrefUtils.swift in Sources */,
4B96FB401EBBC56F00E4E164 /* FoundationCommons.swift in Sources */,
4B96FB411EBBC56F00E4E164 /* RxSwiftCommons.swift in Sources */,
4B004BD021063B600043A396 /* DictionaryDecoder.swift in Sources */,
4B96FB421EBBC56F00E4E164 /* SwiftCommons.swift in Sources */,
1929BEFEABA0448306CDB6D4 /* FileItemIgnorePatternTest.swift in Sources */,
1929B66F795867B8C07FAAD4 /* DictionaryCommonsTest.swift in Sources */,
4B004BD221063B600043A396 /* DictionaryCodingKey.swift in Sources */,
1929B98F94536E3912AD9F3B /* ArrayCommonsTest.swift in Sources */,
1929BDFDBDA7180D02ACB37E /* RxSwiftCommonsTest.swift in Sources */,
1929B04CE8ECBD75CBBB0991 /* StringCommonsTest.swift in Sources */,
@ -1147,6 +1174,7 @@
1929BF4FF30D9A9DE82C3052 /* FileUtilsTest.swift in Sources */,
1929BFC70581084B5CE04A5B /* MatcherTests.swift in Sources */,
1929BAAD7336FDFF1F78E749 /* ScorerTest.swift in Sources */,
4B004BD421063B600043A396 /* DictionaryEncoder.swift in Sources */,
1929B8E90A1378E494D481E7 /* PrefUtilsTest.swift in Sources */,
1929B20CE35B43BB1CE023BA /* Theme.swift in Sources */,
1929B9318D32146D58BB38EC /* AppKitCommons.swift in Sources */,
@ -1244,7 +1272,7 @@
CLANG_WARN_UNREACHABLE_CODE = YES;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
COPY_PHASE_STRIP = NO;
CURRENT_PROJECT_VERSION = 289;
CURRENT_PROJECT_VERSION = 293;
DEBUG_INFORMATION_FORMAT = dwarf;
ENABLE_STRICT_OBJC_MSGSEND = YES;
ENABLE_TESTABILITY = YES;
@ -1301,7 +1329,7 @@
CLANG_WARN_UNREACHABLE_CODE = YES;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
COPY_PHASE_STRIP = NO;
CURRENT_PROJECT_VERSION = 289;
CURRENT_PROJECT_VERSION = 293;
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
ENABLE_NS_ASSERTIONS = NO;
ENABLE_STRICT_OBJC_MSGSEND = YES;

View File

@ -8,7 +8,6 @@ import RxSwift
import PureLayout
import Sparkle
import CocoaFontAwesome
import DictionaryCoding
@NSApplicationMain
class AppDelegate: NSObject, NSApplicationDelegate, NSUserNotificationCenterDelegate {

View File

@ -1224,7 +1224,7 @@
<key>CFBundlePackageType</key>
<string>APPL</string>
<key>CFBundleShortVersionString</key>
<string>SNAPSHOT-289</string>
<string>SNAPSHOT-293</string>
<key>CFBundleSignature</key>
<string>????</string>
<key>CFBundleURLTypes</key>
@ -1241,7 +1241,7 @@
</dict>
</array>
<key>CFBundleVersion</key>
<string>289</string>
<string>293</string>
<key>LSApplicationCategoryType</key>
<string>public.app-category.productivity</string>
<key>LSMinimumSystemVersion</key>

View File

@ -4,7 +4,6 @@
*/
import Foundation
import DictionaryCoding
class PrefMiddleware: MiddlewareType {

View File

@ -15,10 +15,10 @@
<key>CFBundlePackageType</key>
<string>BNDL</string>
<key>CFBundleShortVersionString</key>
<string>SNAPSHOT-289</string>
<string>SNAPSHOT-293</string>
<key>CFBundleSignature</key>
<string>????</string>
<key>CFBundleVersion</key>
<string>289</string>
<string>293</string>
</dict>
</plist>

View File

@ -7,22 +7,22 @@
<description>Most recent changes with links to updates for VimR.</description>
<language>en</language>
<item>
<title>SNAPSHOT-289</title>
<title>SNAPSHOT-293</title>
<description><![CDATA[
<ul>
<li>Neovim 0.3.1</li>
<li>GH-664: Bugfix: Some users still get crashes.</li>
</ul>
]]></description>
<releaseNotesLink>
https://github.com/qvacua/vimr/releases/tag/snapshot/289
https://github.com/qvacua/vimr/releases/tag/snapshot/293
</releaseNotesLink>
<pubDate>2018-07-20T18:13:58.390664</pubDate>
<pubDate>2018-08-20T21:43:22.532664</pubDate>
<minimumSystemVersion>10.10.0</minimumSystemVersion>
<enclosure url="https://github.com/qvacua/vimr/releases/download/snapshot/289/VimR-SNAPSHOT-289.tar.bz2"
sparkle:version="289"
sparkle:shortVersionString="SNAPSHOT-289"
sparkle:dsaSignature="MC4CFQC+tPeQaEa9Zst7Eff6rGwImqMBZgIVAKz6MtFRyfMm4CYSEKW1M3667Rpn"
length="14810517"
<enclosure url="https://github.com/qvacua/vimr/releases/download/snapshot/293/VimR-SNAPSHOT-293.tar.bz2"
sparkle:version="293"
sparkle:shortVersionString="SNAPSHOT-293"
sparkle:dsaSignature="MC0CFQCy1GseVb5EfaEO2MckuzoNypdmjAIUN8RxB6LdWXZZAzK4Ux/e1q9kajk="
length="14417231"
type="application/octet-stream"/>
</item>
</channel>

View File

@ -5,6 +5,7 @@
* GH-443: `vimr --line ${LINE_NUMBER} ${SOME_FILE}` will open the file and go to the given line. If the file is already open in a UI window, then that window will be selected and the cursor will be moved to the given line. This can be used e.g. to reverse-search LaTeX.
* GH-603: Bugfix: `Cmd-V` pastes at the wrong location in the insert mode.
* GH-659: Bugfix (introduced in a snapshot): Turning off ligatures does not really turn off ligatures.
* GH-664: Bugfix: VimR crashes for some shell configurations.
* Dependencies updates:
- ReactiveX/RxSwift@4.2.0
- httpswift/swifter@1.4.2