Skip to content

Commit

Permalink
TypeScript support
Browse files Browse the repository at this point in the history
  • Loading branch information
mattmassicotte committed Dec 6, 2024
1 parent a4f6e1b commit a7ba9e0
Show file tree
Hide file tree
Showing 10 changed files with 66 additions and 4 deletions.
1 change: 1 addition & 0 deletions Configurations/NonSwiftWorkaround.xcconfig
Original file line number Diff line number Diff line change
Expand Up @@ -25,4 +25,5 @@ OTHER_SWIFT_FLAGS = $(inherited) -Xcc -fmodule-map-file=$(GENERATED_MODULEMAP_DI
OTHER_SWIFT_FLAGS = $(inherited) -Xcc -fmodule-map-file=$(GENERATED_MODULEMAP_DIR)/TreeSitterPython.modulemap
OTHER_SWIFT_FLAGS = $(inherited) -Xcc -fmodule-map-file=$(GENERATED_MODULEMAP_DIR)/TreeSitterRuby.modulemap
OTHER_SWIFT_FLAGS = $(inherited) -Xcc -fmodule-map-file=$(GENERATED_MODULEMAP_DIR)/TreeSitterRust.modulemap
OTHER_SWIFT_FLAGS = $(inherited) -Xcc -fmodule-map-file=$(GENERATED_MODULEMAP_DIR)/TreeSitterTypeScript.modulemap
OTHER_SWIFT_FLAGS = $(inherited) -Xcc -fmodule-map-file=$(GENERATED_MODULEMAP_DIR)/TreeSitterSwift.modulemap
2 changes: 2 additions & 0 deletions Dependencies/Package.swift
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@ let package = Package(
.package(url: "https://github.com/tree-sitter/tree-sitter-python", branch: "master"),
.package(url: "https://github.com/tree-sitter/tree-sitter-ruby", branch: "master"),
.package(url: "https://github.com/tree-sitter/tree-sitter-rust", branch: "master"),
.package(url: "https://github.com/tree-sitter/tree-sitter-typescript", branch: "master"),
.package(url: "https://github.com/alex-pinkus/tree-sitter-swift", branch: "with-generated-files"),
],
targets: [
Expand All @@ -52,6 +53,7 @@ let package = Package(
.product(name: "TreeSitterPython", package: "tree-sitter-python"),
.product(name: "TreeSitterRuby", package: "tree-sitter-ruby"),
.product(name: "TreeSitterRust", package: "tree-sitter-rust"),
.product(name: "TreeSitterTypeScript", package: "tree-sitter-typescript"),
.product(name: "TreeSitterSwift", package: "tree-sitter-swift"),
]
),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,4 +16,5 @@
@_exported import TreeSitterPython
@_exported import TreeSitterRuby
@_exported import TreeSitterRust
@_exported import TreeSitterTypeScript
@_exported import TreeSitterSwift
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
{
"originHash" : "2c533b6dafa208983e2c3996abe8ef2b3eb75356e0c996ea3d9ee4ef4da06719",
"originHash" : "a425ffff3c05722e5d50ef8ce30dc82d4392cf636f759db35d39aac4e657e178",
"pins" : [
{
"identity" : "asyncxpcconnection",
Expand Down Expand Up @@ -411,6 +411,15 @@
"revision" : "eda05af7ac41adb4eb19c346883c0fa32fe3bdd8"
}
},
{
"identity" : "tree-sitter-typescript",
"kind" : "remoteSourceControl",
"location" : "https://github.com/tree-sitter/tree-sitter-typescript",
"state" : {
"branch" : "master",
"revision" : "45af49560396d67a710b21a3ce315fcaa09006ff"
}
},
{
"identity" : "windowtreatment",
"kind" : "remoteSourceControl",
Expand Down
16 changes: 13 additions & 3 deletions Edit/Modules/SyntaxService/LanguageProfile+Profiles.swift
Original file line number Diff line number Diff line change
Expand Up @@ -80,6 +80,11 @@ extension LanguageProfile {
return LanguageProfile.swiftProfile
}

// special-case this type to allow the same extension to be used by default
if utType.conforms(to: .typescriptSource) || utType.conforms(to: .mpeg2TransportStream) {
return LanguageProfile.typeScriptProfile
}

return LanguageProfile.genericProfile
}
}
Expand Down Expand Up @@ -177,14 +182,19 @@ extension LanguageProfile {
language: Language(tree_sitter_ruby())
)

static let rustProfile = LanguageProfile(
RootLanguage.rust,
language: Language(tree_sitter_rust())
)

static let swiftProfile = LanguageProfile(
RootLanguage.swift,
language: Language(tree_sitter_swift())
)

static let rustProfile = LanguageProfile(
RootLanguage.rust,
language: Language(tree_sitter_rust())
static let typeScriptProfile = LanguageProfile(
RootLanguage.typeScript,
language: Language(tree_sitter_typescript())
)

static let genericProfile = LanguageProfile(
Expand Down
6 changes: 6 additions & 0 deletions Edit/Modules/SyntaxService/RootLanguage.swift
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@ public enum RootLanguage: Hashable, CaseIterable, Sendable {
case ruby
case rust
case swift
case typeScript

var typeIdentifier: UTType {
switch self {
Expand All @@ -47,6 +48,7 @@ public enum RootLanguage: Hashable, CaseIterable, Sendable {
case .python: .pythonScript
case .ruby: .rubyScript
case .rust: .rustSource
case .typeScript: .typescriptSource
case .swift: .swiftSource
}
}
Expand Down Expand Up @@ -97,6 +99,8 @@ extension RootLanguage: RawRepresentable {
self = .rust
case "swift":
self = .swift
case "typescript":
self = .typeScript
default:
return nil
}
Expand Down Expand Up @@ -142,6 +146,8 @@ extension RootLanguage: RawRepresentable {
"Rust"
case .swift:
"Swift"
case .typeScript:
"TypeScript"
}
}
}
1 change: 1 addition & 0 deletions Edit/Modules/SyntaxService/SyntaxService.swift
Original file line number Diff line number Diff line change
Expand Up @@ -171,6 +171,7 @@ extension SyntaxService {
let queryParams = try self.highlightsQueryParams(for: range)
let namedRanges = try await client.highlightsProvider.async(queryParams)

print("names:", namedRanges)
return TokenApplication(namedRanges: namedRanges, range: range)
} catch {
self.logger.warning("Failed to get highlighting: \(error)")
Expand Down
30 changes: 30 additions & 0 deletions Edit/Resources/Info.plist
Original file line number Diff line number Diff line change
Expand Up @@ -292,6 +292,36 @@
</array>
</dict>
</dict>
<dict>
<key>UTTypeConformsTo</key>
<array>
<string>public.source-code</string>
</array>
<key>UTTypeIdentifier</key>
<string>org.typescriptlang.source</string>
<key>UTTypeTagSpecification</key>
<dict>
<key>public.filename-extension</key>
<array>
<string>ts</string>
</array>
</dict>
</dict>
<dict>
<key>UTTypeConformsTo</key>
<array>
<string>public.source-code</string>
</array>
<key>UTTypeIdentifier</key>
<string>org.typescriptlang.jsx-source</string>
<key>UTTypeTagSpecification</key>
<dict>
<key>public.filename-extension</key>
<array>
<string>tsx</string>
</array>
</dict>
</dict>
</array>
</dict>
</plist>
1 change: 1 addition & 0 deletions EditIntents/HighlightIntent.swift
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@ extension RootLanguage: AppEnum {
.ruby: "Ruby",
.rust: "Rust",
.swift: "Swift",
.typeScript: "TypeScript",
]
}
}
Expand Down
1 change: 1 addition & 0 deletions QuickLookPreview/Info.plist
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@
<string>public.shell-script</string>
<string>public.swift-source</string>
<string>com.netscape.javascript-source</string>
<string>org.typescriptlang.source</string>
</array>
<key>QLSupportsSearchableItems</key>
<false/>
Expand Down

0 comments on commit a7ba9e0

Please sign in to comment.