Skip to content

Commit 1bf06a6

Browse files
committed
Allow the copilot to run on unrecognized languages
1 parent ae1924f commit 1bf06a6

File tree

5 files changed

+38
-9
lines changed

5 files changed

+38
-9
lines changed

Core/Sources/CopilotService/CopilotRequest.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ struct CopilotDoc: Codable {
1111
var path: String
1212
var uri: String
1313
var relativePath: String
14-
var languageId: LanguageIdentifier
14+
var languageId: CopilotLanguage
1515
var position: Position
1616
/// Buffer version. Not sure what this is for, not sure how to get it
1717
var version: Int = 0

Core/Sources/CopilotService/CopilotService.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -156,8 +156,8 @@ public final class CopilotSuggestionService: CopilotBaseService, CopilotSuggesti
156156
usesTabsForIndentation: Bool,
157157
ignoreSpaceOnlySuggestions: Bool
158158
) async throws -> [CopilotCompletion] {
159-
guard let languageId = languageIdentifierFromFileURL(fileURL) else { return [] }
160-
159+
let languageId = languageIdentifierFromFileURL(fileURL)
160+
161161
let relativePath = {
162162
let filePath = fileURL.path
163163
let rootPath = projectRootURL.path

Core/Sources/CopilotService/LanguageIdentifierFromFilePath.swift

Lines changed: 32 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,33 @@
11
import Foundation
22
import LanguageServerProtocol
33

4+
public enum CopilotLanguage: RawRepresentable, Codable {
5+
case builtIn(LanguageIdentifier)
6+
case plaintext
7+
case other(String)
8+
9+
public var rawValue: String {
10+
switch self {
11+
case let .builtIn(language):
12+
return language.rawValue
13+
case .plaintext:
14+
return "plaintext"
15+
case let .other(language):
16+
return language
17+
}
18+
}
19+
20+
public init?(rawValue: String) {
21+
if let language = LanguageIdentifier(rawValue: rawValue) {
22+
self = .builtIn(language)
23+
} else if rawValue == "txt" || rawValue.isEmpty {
24+
self = .plaintext
25+
} else {
26+
self = .other(rawValue)
27+
}
28+
}
29+
}
30+
431
extension LanguageIdentifier {
532
/// Copied from https://github.com/github/linguist/blob/master/lib/linguist/languages.yml [MIT]
633
var fileExtensions: [String] {
@@ -219,7 +246,10 @@ let fileExtensionToLanguageId = {
219246
return dict
220247
}()
221248

222-
public func languageIdentifierFromFileURL(_ fileURL: URL) -> LanguageIdentifier? {
249+
public func languageIdentifierFromFileURL(_ fileURL: URL) -> CopilotLanguage {
223250
let fileExtension = fileURL.pathExtension
224-
return fileExtensionToLanguageId[fileExtension]
251+
if let builtIn = fileExtensionToLanguageId[fileExtension] {
252+
return .builtIn(builtIn)
253+
}
254+
return .init(rawValue: fileExtension) ?? .plaintext
225255
}

Core/Sources/Service/SuggestionCommandHandler/WindowBaseCommandHandler.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -230,7 +230,7 @@ struct WindowBaseCommandHandler: SuggestionCommandHandler {
230230
Task {
231231
try? await service.send(
232232
content: """
233-
```\(codeLanguage?.rawValue ?? "")
233+
```\(codeLanguage.rawValue)
234234
\(removeContinuousSpaces(from: code))
235235
```
236236
""",
@@ -278,7 +278,7 @@ struct WindowBaseCommandHandler: SuggestionCommandHandler {
278278
return """
279279
\(language.isEmpty ? "" : "You must always reply in \(language)")
280280
You are a senior programmer, you will answer my questions concisely about the code below, or modify it according to my requests. When you receive a modification request, reply with the modified code in a code block.
281-
```\(codeLanguage?.rawValue ?? "")
281+
```\(codeLanguage.rawValue)
282282
\(removeContinuousSpaces(from: code))
283283
```
284284
"""

Core/Sources/Service/Workspace.swift

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,7 @@ final class Filespace {
1414
}
1515

1616
let fileURL: URL
17-
private(set) lazy var language: String = languageIdentifierFromFileURL(fileURL)?
18-
.rawValue ?? "plaintext"
17+
private(set) lazy var language: String = languageIdentifierFromFileURL(fileURL).rawValue
1918
var suggestions: [CopilotCompletion] = [] {
2019
didSet { lastSuggestionUpdateTime = Environment.now() }
2120
}

0 commit comments

Comments
 (0)