mirror of
https://github.com/KevinMidboe/linguist.git
synced 2025-10-29 17:50:22 +00:00
Adds basic support for the Swift programming language
Text only lexer for now until Pygments catches up
This commit is contained in:
4
samples/Swift/section-11.swift
Normal file
4
samples/Swift/section-11.swift
Normal file
@@ -0,0 +1,4 @@
|
||||
let apples = 3
|
||||
let oranges = 5
|
||||
let appleSummary = "I have \(apples) apples."
|
||||
let fruitSummary = "I have \(apples + oranges) pieces of fruit."
|
||||
8
samples/Swift/section-13.swift
Normal file
8
samples/Swift/section-13.swift
Normal file
@@ -0,0 +1,8 @@
|
||||
var shoppingList = ["catfish", "water", "tulips", "blue paint"]
|
||||
shoppingList[1] = "bottle of water"
|
||||
|
||||
var occupations = [
|
||||
"Malcolm": "Captain",
|
||||
"Kaylee": "Mechanic",
|
||||
]
|
||||
occupations["Jayne"] = "Public Relations"
|
||||
2
samples/Swift/section-15.swift
Normal file
2
samples/Swift/section-15.swift
Normal file
@@ -0,0 +1,2 @@
|
||||
let emptyArray = String[]()
|
||||
let emptyDictionary = Dictionary<String, Float>()
|
||||
1
samples/Swift/section-17.swift
Normal file
1
samples/Swift/section-17.swift
Normal file
@@ -0,0 +1 @@
|
||||
shoppingList = [] // Went shopping and bought everything.
|
||||
10
samples/Swift/section-19.swift
Normal file
10
samples/Swift/section-19.swift
Normal file
@@ -0,0 +1,10 @@
|
||||
let individualScores = [75, 43, 103, 87, 12]
|
||||
var teamScore = 0
|
||||
for score in individualScores {
|
||||
if score > 50 {
|
||||
teamScore += 3
|
||||
} else {
|
||||
teamScore += 1
|
||||
}
|
||||
}
|
||||
teamScore
|
||||
8
samples/Swift/section-21.swift
Normal file
8
samples/Swift/section-21.swift
Normal file
@@ -0,0 +1,8 @@
|
||||
var optionalString: String? = "Hello"
|
||||
optionalString == nil
|
||||
|
||||
var optionalName: String? = "John Appleseed"
|
||||
var greeting = "Hello!"
|
||||
if let name = optionalName {
|
||||
greeting = "Hello, \(name)"
|
||||
}
|
||||
11
samples/Swift/section-23.swift
Normal file
11
samples/Swift/section-23.swift
Normal file
@@ -0,0 +1,11 @@
|
||||
let vegetable = "red pepper"
|
||||
switch vegetable {
|
||||
case "celery":
|
||||
let vegetableComment = "Add some raisins and make ants on a log."
|
||||
case "cucumber", "watercress":
|
||||
let vegetableComment = "That would make a good tea sandwich."
|
||||
case let x where x.hasSuffix("pepper"):
|
||||
let vegetableComment = "Is it a spicy \(x)?"
|
||||
default:
|
||||
let vegetableComment = "Everything tastes good in soup."
|
||||
}
|
||||
14
samples/Swift/section-25.swift
Normal file
14
samples/Swift/section-25.swift
Normal file
@@ -0,0 +1,14 @@
|
||||
let interestingNumbers = [
|
||||
"Prime": [2, 3, 5, 7, 11, 13],
|
||||
"Fibonacci": [1, 1, 2, 3, 5, 8],
|
||||
"Square": [1, 4, 9, 16, 25],
|
||||
]
|
||||
var largest = 0
|
||||
for (kind, numbers) in interestingNumbers {
|
||||
for number in numbers {
|
||||
if number > largest {
|
||||
largest = number
|
||||
}
|
||||
}
|
||||
}
|
||||
largest
|
||||
11
samples/Swift/section-27.swift
Normal file
11
samples/Swift/section-27.swift
Normal file
@@ -0,0 +1,11 @@
|
||||
var n = 2
|
||||
while n < 100 {
|
||||
n = n * 2
|
||||
}
|
||||
n
|
||||
|
||||
var m = 2
|
||||
do {
|
||||
m = m * 2
|
||||
} while m < 100
|
||||
m
|
||||
11
samples/Swift/section-29.swift
Normal file
11
samples/Swift/section-29.swift
Normal file
@@ -0,0 +1,11 @@
|
||||
var firstForLoop = 0
|
||||
for i in 0..3 {
|
||||
firstForLoop += i
|
||||
}
|
||||
firstForLoop
|
||||
|
||||
var secondForLoop = 0
|
||||
for var i = 0; i < 3; ++i {
|
||||
secondForLoop += 1
|
||||
}
|
||||
secondForLoop
|
||||
1
samples/Swift/section-3.swift
Normal file
1
samples/Swift/section-3.swift
Normal file
@@ -0,0 +1 @@
|
||||
println("Hello, world")
|
||||
4
samples/Swift/section-31.swift
Normal file
4
samples/Swift/section-31.swift
Normal file
@@ -0,0 +1,4 @@
|
||||
func greet(name: String, day: String) -> String {
|
||||
return "Hello \(name), today is \(day)."
|
||||
}
|
||||
greet("Bob", "Tuesday")
|
||||
4
samples/Swift/section-33.swift
Normal file
4
samples/Swift/section-33.swift
Normal file
@@ -0,0 +1,4 @@
|
||||
func getGasPrices() -> (Double, Double, Double) {
|
||||
return (3.59, 3.69, 3.79)
|
||||
}
|
||||
getGasPrices()
|
||||
9
samples/Swift/section-35.swift
Normal file
9
samples/Swift/section-35.swift
Normal file
@@ -0,0 +1,9 @@
|
||||
func sumOf(numbers: Int...) -> Int {
|
||||
var sum = 0
|
||||
for number in numbers {
|
||||
sum += number
|
||||
}
|
||||
return sum
|
||||
}
|
||||
sumOf()
|
||||
sumOf(42, 597, 12)
|
||||
9
samples/Swift/section-37.swift
Normal file
9
samples/Swift/section-37.swift
Normal file
@@ -0,0 +1,9 @@
|
||||
func returnFifteen() -> Int {
|
||||
var y = 10
|
||||
func add() {
|
||||
y += 5
|
||||
}
|
||||
add()
|
||||
return y
|
||||
}
|
||||
returnFifteen()
|
||||
8
samples/Swift/section-39.swift
Normal file
8
samples/Swift/section-39.swift
Normal file
@@ -0,0 +1,8 @@
|
||||
func makeIncrementer() -> (Int -> Int) {
|
||||
func addOne(number: Int) -> Int {
|
||||
return 1 + number
|
||||
}
|
||||
return addOne
|
||||
}
|
||||
var increment = makeIncrementer()
|
||||
increment(7)
|
||||
13
samples/Swift/section-41.swift
Normal file
13
samples/Swift/section-41.swift
Normal file
@@ -0,0 +1,13 @@
|
||||
func hasAnyMatches(list: Int[], condition: Int -> Bool) -> Bool {
|
||||
for item in list {
|
||||
if condition(item) {
|
||||
return true
|
||||
}
|
||||
}
|
||||
return false
|
||||
}
|
||||
func lessThanTen(number: Int) -> Bool {
|
||||
return number < 10
|
||||
}
|
||||
var numbers = [20, 19, 7, 12]
|
||||
hasAnyMatches(numbers, lessThanTen)
|
||||
5
samples/Swift/section-43.swift
Normal file
5
samples/Swift/section-43.swift
Normal file
@@ -0,0 +1,5 @@
|
||||
numbers.map({
|
||||
(number: Int) -> Int in
|
||||
let result = 3 * number
|
||||
return result
|
||||
})
|
||||
1
samples/Swift/section-45.swift
Normal file
1
samples/Swift/section-45.swift
Normal file
@@ -0,0 +1 @@
|
||||
numbers.map({ number in 3 * number })
|
||||
1
samples/Swift/section-47.swift
Normal file
1
samples/Swift/section-47.swift
Normal file
@@ -0,0 +1 @@
|
||||
sort([1, 5, 3, 12, 2]) { $0 > $1 }
|
||||
6
samples/Swift/section-49.swift
Normal file
6
samples/Swift/section-49.swift
Normal file
@@ -0,0 +1,6 @@
|
||||
class Shape {
|
||||
var numberOfSides = 0
|
||||
func simpleDescription() -> String {
|
||||
return "A shape with \(numberOfSides) sides."
|
||||
}
|
||||
}
|
||||
3
samples/Swift/section-5.swift
Normal file
3
samples/Swift/section-5.swift
Normal file
@@ -0,0 +1,3 @@
|
||||
var myVariable = 42
|
||||
myVariable = 50
|
||||
let myConstant = 42
|
||||
3
samples/Swift/section-51.swift
Normal file
3
samples/Swift/section-51.swift
Normal file
@@ -0,0 +1,3 @@
|
||||
var shape = Shape()
|
||||
shape.numberOfSides = 7
|
||||
var shapeDescription = shape.simpleDescription()
|
||||
12
samples/Swift/section-53.swift
Normal file
12
samples/Swift/section-53.swift
Normal file
@@ -0,0 +1,12 @@
|
||||
class NamedShape {
|
||||
var numberOfSides: Int = 0
|
||||
var name: String
|
||||
|
||||
init(name: String) {
|
||||
self.name = name
|
||||
}
|
||||
|
||||
func simpleDescription() -> String {
|
||||
return "A shape with \(numberOfSides) sides."
|
||||
}
|
||||
}
|
||||
20
samples/Swift/section-55.swift
Normal file
20
samples/Swift/section-55.swift
Normal file
@@ -0,0 +1,20 @@
|
||||
class Square: NamedShape {
|
||||
var sideLength: Double
|
||||
|
||||
init(sideLength: Double, name: String) {
|
||||
self.sideLength = sideLength
|
||||
super.init(name: name)
|
||||
numberOfSides = 4
|
||||
}
|
||||
|
||||
func area() -> Double {
|
||||
return sideLength * sideLength
|
||||
}
|
||||
|
||||
override func simpleDescription() -> String {
|
||||
return "A square with sides of length \(sideLength)."
|
||||
}
|
||||
}
|
||||
let test = Square(sideLength: 5.2, name: "my test square")
|
||||
test.area()
|
||||
test.simpleDescription()
|
||||
26
samples/Swift/section-57.swift
Normal file
26
samples/Swift/section-57.swift
Normal file
@@ -0,0 +1,26 @@
|
||||
class EquilateralTriangle: NamedShape {
|
||||
var sideLength: Double = 0.0
|
||||
|
||||
init(sideLength: Double, name: String) {
|
||||
self.sideLength = sideLength
|
||||
super.init(name: name)
|
||||
numberOfSides = 3
|
||||
}
|
||||
|
||||
var perimeter: Double {
|
||||
get {
|
||||
return 3.0 * sideLength
|
||||
}
|
||||
set {
|
||||
sideLength = newValue / 3.0
|
||||
}
|
||||
}
|
||||
|
||||
override func simpleDescription() -> String {
|
||||
return "An equilateral triagle with sides of length \(sideLength)."
|
||||
}
|
||||
}
|
||||
var triangle = EquilateralTriangle(sideLength: 3.1, name: "a triangle")
|
||||
triangle.perimeter
|
||||
triangle.perimeter = 9.9
|
||||
triangle.sideLength
|
||||
21
samples/Swift/section-59.swift
Normal file
21
samples/Swift/section-59.swift
Normal file
@@ -0,0 +1,21 @@
|
||||
class TriangleAndSquare {
|
||||
var triangle: EquilateralTriangle {
|
||||
willSet {
|
||||
square.sideLength = newValue.sideLength
|
||||
}
|
||||
}
|
||||
var square: Square {
|
||||
willSet {
|
||||
triangle.sideLength = newValue.sideLength
|
||||
}
|
||||
}
|
||||
init(size: Double, name: String) {
|
||||
square = Square(sideLength: size, name: name)
|
||||
triangle = EquilateralTriangle(sideLength: size, name: name)
|
||||
}
|
||||
}
|
||||
var triangleAndSquare = TriangleAndSquare(size: 10, name: "another test shape")
|
||||
triangleAndSquare.square.sideLength
|
||||
triangleAndSquare.triangle.sideLength
|
||||
triangleAndSquare.square = Square(sideLength: 50, name: "larger square")
|
||||
triangleAndSquare.triangle.sideLength
|
||||
8
samples/Swift/section-61.swift
Normal file
8
samples/Swift/section-61.swift
Normal file
@@ -0,0 +1,8 @@
|
||||
class Counter {
|
||||
var count: Int = 0
|
||||
func incrementBy(amount: Int, numberOfTimes times: Int) {
|
||||
count += amount * times
|
||||
}
|
||||
}
|
||||
var counter = Counter()
|
||||
counter.incrementBy(2, numberOfTimes: 7)
|
||||
2
samples/Swift/section-63.swift
Normal file
2
samples/Swift/section-63.swift
Normal file
@@ -0,0 +1,2 @@
|
||||
let optionalSquare: Square? = Square(sideLength: 2.5, name: "optional square")
|
||||
let sideLength = optionalSquare?.sideLength
|
||||
21
samples/Swift/section-65.swift
Normal file
21
samples/Swift/section-65.swift
Normal file
@@ -0,0 +1,21 @@
|
||||
enum Rank: Int {
|
||||
case Ace = 1
|
||||
case Two, Three, Four, Five, Six, Seven, Eight, Nine, Ten
|
||||
case Jack, Queen, King
|
||||
func simpleDescription() -> String {
|
||||
switch self {
|
||||
case .Ace:
|
||||
return "ace"
|
||||
case .Jack:
|
||||
return "jack"
|
||||
case .Queen:
|
||||
return "queen"
|
||||
case .King:
|
||||
return "king"
|
||||
default:
|
||||
return String(self.toRaw())
|
||||
}
|
||||
}
|
||||
}
|
||||
let ace = Rank.Ace
|
||||
let aceRawValue = ace.toRaw()
|
||||
3
samples/Swift/section-67.swift
Normal file
3
samples/Swift/section-67.swift
Normal file
@@ -0,0 +1,3 @@
|
||||
if let convertedRank = Rank.fromRaw(3) {
|
||||
let threeDescription = convertedRank.simpleDescription()
|
||||
}
|
||||
17
samples/Swift/section-69.swift
Normal file
17
samples/Swift/section-69.swift
Normal file
@@ -0,0 +1,17 @@
|
||||
enum Suit {
|
||||
case Spades, Hearts, Diamonds, Clubs
|
||||
func simpleDescription() -> String {
|
||||
switch self {
|
||||
case .Spades:
|
||||
return "spades"
|
||||
case .Hearts:
|
||||
return "hearts"
|
||||
case .Diamonds:
|
||||
return "diamonds"
|
||||
case .Clubs:
|
||||
return "clubs"
|
||||
}
|
||||
}
|
||||
}
|
||||
let hearts = Suit.Hearts
|
||||
let heartsDescription = hearts.simpleDescription()
|
||||
3
samples/Swift/section-7.swift
Normal file
3
samples/Swift/section-7.swift
Normal file
@@ -0,0 +1,3 @@
|
||||
let implicitInteger = 70
|
||||
let implicitDouble = 70.0
|
||||
let explicitDouble: Double = 70
|
||||
9
samples/Swift/section-71.swift
Normal file
9
samples/Swift/section-71.swift
Normal file
@@ -0,0 +1,9 @@
|
||||
struct Card {
|
||||
var rank: Rank
|
||||
var suit: Suit
|
||||
func simpleDescription() -> String {
|
||||
return "The \(rank.simpleDescription()) of \(suit.simpleDescription())"
|
||||
}
|
||||
}
|
||||
let threeOfSpades = Card(rank: .Three, suit: .Spades)
|
||||
let threeOfSpadesDescription = threeOfSpades.simpleDescription()
|
||||
14
samples/Swift/section-73.swift
Normal file
14
samples/Swift/section-73.swift
Normal file
@@ -0,0 +1,14 @@
|
||||
enum ServerResponse {
|
||||
case Result(String, String)
|
||||
case Error(String)
|
||||
}
|
||||
|
||||
let success = ServerResponse.Result("6:00 am", "8:09 pm")
|
||||
let failure = ServerResponse.Error("Out of cheese.")
|
||||
|
||||
switch success {
|
||||
case let .Result(sunrise, sunset):
|
||||
let serverResponse = "Sunrise is at \(sunrise) and sunset is at \(sunset)."
|
||||
case let .Error(error):
|
||||
let serverResponse = "Failure... \(error)"
|
||||
}
|
||||
4
samples/Swift/section-75.swift
Normal file
4
samples/Swift/section-75.swift
Normal file
@@ -0,0 +1,4 @@
|
||||
protocol ExampleProtocol {
|
||||
var simpleDescription: String { get }
|
||||
mutating func adjust()
|
||||
}
|
||||
20
samples/Swift/section-77.swift
Normal file
20
samples/Swift/section-77.swift
Normal file
@@ -0,0 +1,20 @@
|
||||
class SimpleClass: ExampleProtocol {
|
||||
var simpleDescription: String = "A very simple class."
|
||||
var anotherProperty: Int = 69105
|
||||
func adjust() {
|
||||
simpleDescription += " Now 100% adjusted."
|
||||
}
|
||||
}
|
||||
var a = SimpleClass()
|
||||
a.adjust()
|
||||
let aDescription = a.simpleDescription
|
||||
|
||||
struct SimpleStructure: ExampleProtocol {
|
||||
var simpleDescription: String = "A simple structure"
|
||||
mutating func adjust() {
|
||||
simpleDescription += " (adjusted)"
|
||||
}
|
||||
}
|
||||
var b = SimpleStructure()
|
||||
b.adjust()
|
||||
let bDescription = b.simpleDescription
|
||||
9
samples/Swift/section-79.swift
Normal file
9
samples/Swift/section-79.swift
Normal file
@@ -0,0 +1,9 @@
|
||||
extension Int: ExampleProtocol {
|
||||
var simpleDescription: String {
|
||||
return "The number \(self)"
|
||||
}
|
||||
mutating func adjust() {
|
||||
self += 42
|
||||
}
|
||||
}
|
||||
7.simpleDescription
|
||||
3
samples/Swift/section-81.swift
Normal file
3
samples/Swift/section-81.swift
Normal file
@@ -0,0 +1,3 @@
|
||||
let protocolValue: ExampleProtocol = a
|
||||
protocolValue.simpleDescription
|
||||
// protocolValue.anotherProperty // Uncomment to see the error
|
||||
8
samples/Swift/section-83.swift
Normal file
8
samples/Swift/section-83.swift
Normal file
@@ -0,0 +1,8 @@
|
||||
func repeat<ItemType>(item: ItemType, times: Int) -> ItemType[] {
|
||||
var result = ItemType[]()
|
||||
for i in 0..times {
|
||||
result += item
|
||||
}
|
||||
return result
|
||||
}
|
||||
repeat("knock", 4)
|
||||
7
samples/Swift/section-85.swift
Normal file
7
samples/Swift/section-85.swift
Normal file
@@ -0,0 +1,7 @@
|
||||
// Reimplement the Swift standard library's optional type
|
||||
enum OptionalValue<T> {
|
||||
case None
|
||||
case Some(T)
|
||||
}
|
||||
var possibleInteger: OptionalValue<Int> = .None
|
||||
possibleInteger = .Some(100)
|
||||
11
samples/Swift/section-87.swift
Normal file
11
samples/Swift/section-87.swift
Normal file
@@ -0,0 +1,11 @@
|
||||
func anyCommonElements <T, U where T: Sequence, U: Sequence, T.GeneratorType.Element: Equatable, T.GeneratorType.Element == U.GeneratorType.Element> (lhs: T, rhs: U) -> Bool {
|
||||
for lhsItem in lhs {
|
||||
for rhsItem in rhs {
|
||||
if lhsItem == rhsItem {
|
||||
return true
|
||||
}
|
||||
}
|
||||
}
|
||||
return false
|
||||
}
|
||||
anyCommonElements([1, 2, 3], [3])
|
||||
3
samples/Swift/section-9.swift
Normal file
3
samples/Swift/section-9.swift
Normal file
@@ -0,0 +1,3 @@
|
||||
let label = "The width is "
|
||||
let width = 94
|
||||
let widthLabel = label + String(width)
|
||||
Reference in New Issue
Block a user