Slide 1

Slide 1 text

Source Code as an the input 1 — Source Code as Input, by Paul Taykalo, MacPaw

Slide 2

Slide 2 text

When just writing a code is not enough 2 — Source Code as Input, by Paul Taykalo, MacPaw

Slide 3

Slide 3 text

A lot of source - not a problem - Code style ❓ - Documentation ❓ - Refactoring ❓ - Code generation ❓ - Error detection ❓ - Obsfuscation ❓ 3 — Source Code as Input, by Paul Taykalo, MacPaw

Slide 4

Slide 4 text

Code Style 4 — Source Code as Input, by Paul Taykalo, MacPaw

Slide 5

Slide 5 text

Documentation 5 — Source Code as Input, by Paul Taykalo, MacPaw

Slide 6

Slide 6 text

Refactoring 6 — Source Code as Input, by Paul Taykalo, MacPaw

Slide 7

Slide 7 text

Code generation 7 — Source Code as Input, by Paul Taykalo, MacPaw

Slide 8

Slide 8 text

Error detection / Linting 8 — Source Code as Input, by Paul Taykalo, MacPaw

Slide 9

Slide 9 text

Obfuscation 9 — Source Code as Input, by Paul Taykalo, MacPaw

Slide 10

Slide 10 text

Processing source 10 — Source Code as Input, by Paul Taykalo, MacPaw

Slide 11

Slide 11 text

11 — Source Code as Input, by Paul Taykalo, MacPaw

Slide 12

Slide 12 text

Source Obvious, we'll work with Swi! and ObjC 12 — Source Code as Input, by Paul Taykalo, MacPaw

Slide 13

Slide 13 text

Destination 13 — Source Code as Input, by Paul Taykalo, MacPaw

Slide 14

Slide 14 text

Destination - Docs - More code! - Code Checks - Images 14 — Source Code as Input, by Paul Taykalo, MacPaw

Slide 15

Slide 15 text

Internal Representation 15 — Source Code as Input, by Paul Taykalo, MacPaw

Slide 16

Slide 16 text

Rules disabled_rules: # rule identifiers to exclude from running - colon - comma - control_statement opt_in_rules: # some rules are only opt-in - empty_count # Find all the available rules by running: # swiftlint rules included: # paths to include during linting. `--path` is ignored if present. - Source excluded: # paths to ignore during linting. Takes precedence over `included`. - Carthage - Pods - Source/ExcludedFolder - Source/ExcludedFile.swift - Source/*/ExcludedFile.swift # Exclude files with a wildcard 16 — Source Code as Input, by Paul Taykalo, MacPaw

Slide 17

Slide 17 text

Tools for processing Code 17 — Source Code as Input, by Paul Taykalo, MacPaw

Slide 18

Slide 18 text

Tools for processing Code Regex-based solutions - IR: Strings - Somewhat unreliable 18 — Source Code as Input, by Paul Taykalo, MacPaw

Slide 19

Slide 19 text

Tools for processing Code Custom Parser Solutions - IR: (DSL) - Trying to parse code on its own - Using own AST 19 — Source Code as Input, by Paul Taykalo, MacPaw

Slide 20

Slide 20 text

Tools for processing Code Sourcekit based solutions - IR: AST, Binary, JSON* - Using Sourcekit library - Always up to date 20 — Source Code as Input, by Paul Taykalo, MacPaw

Slide 21

Slide 21 text

SourceKit 21 — Source Code as Input, by Paul Taykalo, MacPaw

Slide 22

Slide 22 text

SourceKit is ... 22 — Source Code as Input, by Paul Taykalo, MacPaw

Slide 23

Slide 23 text

SourceKit is ... 23 — Source Code as Input, by Paul Taykalo, MacPaw

Slide 24

Slide 24 text

SourcekitService is ... 24 — Source Code as Input, by Paul Taykalo, MacPaw

Slide 25

Slide 25 text

SourceKit is... Welcome to SourceKit! SourceKit is a framework for supporting IDE features like indexing, syntax- coloring, code-completion, etc. In general it provides the infrastructure that an IDE needs for excellent language support. SourceKit currently only supports the Swi! language. 25 — Source Code as Input, by Paul Taykalo, MacPaw

Slide 26

Slide 26 text

SourceKit - Code Completion - Cursor Info - Demangling/Demangling - Documentation - Module interface generation - Indexing* 26 — Source Code as Input, by Paul Taykalo, MacPaw

Slide 27

Slide 27 text

SourceKit options - C Interface - sourcekitd.framework - libsourcekitdInProc.dylib - Official Python Binding - Unofficial Swi" Binding: SourceKitten 27 — Source Code as Input, by Paul Taykalo, MacPaw

Slide 28

Slide 28 text

SourceKitten 28 — Source Code as Input, by Paul Taykalo, MacPaw

Slide 29

Slide 29 text

SourceKitten - ✅ Command Line Util - ✅ Framework - ✅ Wrapper over SourceKit - ✅ Writtent in Swi! 29 — Source Code as Input, by Paul Taykalo, MacPaw

Slide 30

Slide 30 text

Tools with Sourcekitten - ✅ Swi!Lint: Swi! style and conventions. - ✅ Jazzy: Docs for Swi! & Objective-C. - ✅ Sourcery: Meta-programming for Swi! - ✅ Cuckoo: Mocking framework for Swi!. 30 — Source Code as Input, by Paul Taykalo, MacPaw

Slide 31

Slide 31 text

Tools with Sourcekitten - ✅ Swi!yMocky: Framework for mock genertion. - ✅ SourceKittenDaemon: Auto Completions . - ✅ SourceDocs: Markdown documentation. - ✅ Taylor: Measure Swi! code metrics 31 — Source Code as Input, by Paul Taykalo, MacPaw

Slide 32

Slide 32 text

SourceKitten uses SwiftLint, which is based on SourceKitten 32 — Source Code as Input, by Paul Taykalo, MacPaw

Slide 33

Slide 33 text

libSyntax 33 — Source Code as Input, by Paul Taykalo, MacPaw

Slide 34

Slide 34 text

libsyntax - C library SwithSyntax - Swi! wrapper library 34 — Source Code as Input, by Paul Taykalo, MacPaw

Slide 35

Slide 35 text

return 1 35 — Source Code as Input, by Paul Taykalo, MacPaw

Slide 36

Slide 36 text

http://bit.ly/2SBJtS4 36 — Source Code as Input, by Paul Taykalo, MacPaw

Slide 37

Slide 37 text

37 — Source Code as Input, by Paul Taykalo, MacPaw

Slide 38

Slide 38 text

libSyntax and Sourcekit 38 — Source Code as Input, by Paul Taykalo, MacPaw

Slide 39

Slide 39 text

Thank you 39 — Source Code as Input, by Paul Taykalo, MacPaw

Slide 40

Slide 40 text

Q & A 40 — Source Code as Input, by Paul Taykalo, MacPaw

Slide 41

Slide 41 text

Source Code as Input by Paul Taykalo, MacPaw @TT_Kilew 41 — Source Code as Input, by Paul Taykalo, MacPaw

Slide 42

Slide 42 text

Links https://github.com/apple/swi!/blob/master/ tools/SourceKit/docs/Protocol.md https://forums.swi!.org/t/speeding-up- swi!syntax-by-using-the-parser-directly/18493 https://academy.realm.io/posts/appbuilders-jp- simard-sourcekit/ https://github.com/apple/swi!/blob/master/ tools/SourceKit 42 — Source Code as Input, by Paul Taykalo, MacPaw