From d668fbc3bfe17cc15da250fd5003fd843cff62b0 Mon Sep 17 00:00:00 2001 From: Jim Dovey Date: Mon, 16 Sep 2019 13:58:33 -0700 Subject: [PATCH 1/5] Added Swift 5.1 `some` keyword, along with support for `\.Type.variable` key path syntax. --- lib/rouge/demos/swift | 19 +++++++++++++++++++ lib/rouge/lexers/swift.rb | 4 +++- 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/lib/rouge/demos/swift b/lib/rouge/demos/swift index 0c54ed2db0..9c8babb71f 100644 --- a/lib/rouge/demos/swift +++ b/lib/rouge/demos/swift @@ -3,3 +3,22 @@ func sayHello(personName: String) -> String { let greeting = "Hello, " + personName + "!" return greeting } + +func newView() -> some View { + ViewRegistry.find(\.MyView.name) +} + +@frozen +public enum Types { + case a, b, c + case d +} + +func test(t: Types?) -> Bool { + switch t { + case .a?: return true + case .b?: return true + case .c: return true + default: return false + } +} diff --git a/lib/rouge/lexers/swift.rb b/lib/rouge/lexers/swift.rb index ba19b2b7be..c608f10b20 100644 --- a/lib/rouge/lexers/swift.rb +++ b/lib/rouge/lexers/swift.rb @@ -25,7 +25,7 @@ class Swift < RegexLexer ) declarations = Set.new %w( - class deinit enum convenience extension final func import init internal lazy let optional private protocol public required static struct subscript typealias var dynamic indirect associatedtype open fileprivate + class deinit enum convenience extension final func import init internal lazy let optional private protocol public required static struct subscript typealias var dynamic indirect associatedtype open fileprivate some ) constants = Set.new %w( @@ -109,6 +109,8 @@ class deinit enum convenience extension final func import init internal lazy let rule %r/(let|var)\b(\s*)(#{id})/ do groups Keyword, Text, Name::Variable end + + rule %r/\\\.(#{id})/, Keyword::Type rule %r/(let|var)\b(\s*)([(])/ do groups Keyword, Text, Punctuation From a1b701ab434aeefe33ca683f6983f6ae41fa1b87 Mon Sep 17 00:00:00 2001 From: Michael Camilleri Date: Tue, 17 Sep 2019 08:20:58 +0900 Subject: [PATCH 2/5] Remove trailing whitespace --- lib/rouge/lexers/swift.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/rouge/lexers/swift.rb b/lib/rouge/lexers/swift.rb index c608f10b20..82007c8f94 100644 --- a/lib/rouge/lexers/swift.rb +++ b/lib/rouge/lexers/swift.rb @@ -109,7 +109,7 @@ class deinit enum convenience extension final func import init internal lazy let rule %r/(let|var)\b(\s*)(#{id})/ do groups Keyword, Text, Name::Variable end - + rule %r/\\\.(#{id})/, Keyword::Type rule %r/(let|var)\b(\s*)([(])/ do From 6643e0e8efbdac62a7114ce6c628d77985340ba9 Mon Sep 17 00:00:00 2001 From: Michael Camilleri Date: Tue, 17 Sep 2019 08:22:51 +0900 Subject: [PATCH 3/5] Move sample code from demo file to sample file --- lib/rouge/demos/swift | 19 ------------------- spec/visual/samples/swift | 19 +++++++++++++++++++ 2 files changed, 19 insertions(+), 19 deletions(-) diff --git a/lib/rouge/demos/swift b/lib/rouge/demos/swift index 9c8babb71f..0c54ed2db0 100644 --- a/lib/rouge/demos/swift +++ b/lib/rouge/demos/swift @@ -3,22 +3,3 @@ func sayHello(personName: String) -> String { let greeting = "Hello, " + personName + "!" return greeting } - -func newView() -> some View { - ViewRegistry.find(\.MyView.name) -} - -@frozen -public enum Types { - case a, b, c - case d -} - -func test(t: Types?) -> Bool { - switch t { - case .a?: return true - case .b?: return true - case .c: return true - default: return false - } -} diff --git a/spec/visual/samples/swift b/spec/visual/samples/swift index 52b05013d8..42b582b66b 100644 --- a/spec/visual/samples/swift +++ b/spec/visual/samples/swift @@ -432,4 +432,23 @@ funcWithLambdaArg { x in x + 5 } funcWithLambdaArg { $0 + 5 } funcWithLambdaArg({ x in x + 5 }) +func newView() -> some View { + ViewRegistry.find(\.MyView.name) +} + +@frozen +public enum Types { + case a, b, c + case d +} + +func test(t: Types?) -> Bool { + switch t { + case .a?: return true + case .b?: return true + case .c: return true + default: return false + } +} + foo() // end-of-file comment From ac1255223cb9710cd52a3d5967b208b5cd8b820d Mon Sep 17 00:00:00 2001 From: Michael Camilleri Date: Wed, 9 Oct 2019 14:31:04 +0900 Subject: [PATCH 4/5] Increase priority of keypath rule --- lib/rouge/lexers/swift.rb | 4 ++-- spec/visual/samples/swift | 1 + 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/lib/rouge/lexers/swift.rb b/lib/rouge/lexers/swift.rb index 82007c8f94..327614c4a8 100644 --- a/lib/rouge/lexers/swift.rb +++ b/lib/rouge/lexers/swift.rb @@ -67,7 +67,9 @@ class deinit enum convenience extension final func import init internal lazy let state :root do mixin :whitespace + rule %r/\$(([1-9]\d*)?\d)/, Name::Variable + rule %r/\\\.(#{id})/, Keyword::Type rule %r{[()\[\]{}:;,?\\]}, Punctuation rule %r([-/=+*%<>!&|^.~]+), Operator @@ -110,8 +112,6 @@ class deinit enum convenience extension final func import init internal lazy let groups Keyword, Text, Name::Variable end - rule %r/\\\.(#{id})/, Keyword::Type - rule %r/(let|var)\b(\s*)([(])/ do groups Keyword, Text, Punctuation push :tuple diff --git a/spec/visual/samples/swift b/spec/visual/samples/swift index 42b582b66b..bb12c0db72 100644 --- a/spec/visual/samples/swift +++ b/spec/visual/samples/swift @@ -416,6 +416,7 @@ var `var` = 3 // keypath let keypath = \Person.firstName +var keyPath: KeyPath = \.isEmpty // tuple destructuring let (t1, t2) = (1, 2) From 24355b6476808efdec6f0433b89853528f46aff5 Mon Sep 17 00:00:00 2001 From: Michael Camilleri Date: Wed, 9 Oct 2019 14:31:49 +0900 Subject: [PATCH 5/5] Remove keypath rule --- lib/rouge/lexers/swift.rb | 1 - 1 file changed, 1 deletion(-) diff --git a/lib/rouge/lexers/swift.rb b/lib/rouge/lexers/swift.rb index 327614c4a8..45c04c56f9 100644 --- a/lib/rouge/lexers/swift.rb +++ b/lib/rouge/lexers/swift.rb @@ -69,7 +69,6 @@ class deinit enum convenience extension final func import init internal lazy let mixin :whitespace rule %r/\$(([1-9]\d*)?\d)/, Name::Variable - rule %r/\\\.(#{id})/, Keyword::Type rule %r{[()\[\]{}:;,?\\]}, Punctuation rule %r([-/=+*%<>!&|^.~]+), Operator