diff --git a/Sources/CodeEditTextView/Extensions/CharacterSet.swift b/Sources/CodeEditTextView/Extensions/CharacterSet.swift new file mode 100644 index 000000000..0d59bc970 --- /dev/null +++ b/Sources/CodeEditTextView/Extensions/CharacterSet.swift @@ -0,0 +1,14 @@ +// +// CharacterSet.swift +// CodeEditTextView +// +// Created by Abe Malla on 3/29/25. +// + +import Foundation + +extension CharacterSet { + /// Returns a character set containing the characters common in code names + static let codeIdentifierCharacters: CharacterSet = .alphanumerics + .union(.init(charactersIn: "_")) +} diff --git a/Sources/CodeEditTextView/TextSelectionManager/SelectionManipulation/SelectionManipulation+Horizontal.swift b/Sources/CodeEditTextView/TextSelectionManager/SelectionManipulation/SelectionManipulation+Horizontal.swift index d12033377..73e40325e 100644 --- a/Sources/CodeEditTextView/TextSelectionManager/SelectionManipulation/SelectionManipulation+Horizontal.swift +++ b/Sources/CodeEditTextView/TextSelectionManager/SelectionManipulation/SelectionManipulation+Horizontal.swift @@ -109,10 +109,11 @@ package extension TextSelectionManager { if hasFoundValidWordChar && CharacterSet.punctuationCharacters .union(.whitespacesAndNewlines) + .subtracting(CharacterSet.codeIdentifierCharacters) .isSuperset(of: CharacterSet(charactersIn: substring)) { stop.pointee = true return - } else if CharacterSet.alphanumerics.isSuperset(of: CharacterSet(charactersIn: substring)) { + } else if CharacterSet.codeIdentifierCharacters.isSuperset(of: CharacterSet(charactersIn: substring)) { hasFoundValidWordChar = true } rangeToDelete.length += substring.count diff --git a/Sources/CodeEditTextView/TextView/TextView+Select.swift b/Sources/CodeEditTextView/TextView/TextView+Select.swift index 6ee70a264..f3da417db 100644 --- a/Sources/CodeEditTextView/TextView/TextView+Select.swift +++ b/Sources/CodeEditTextView/TextView/TextView+Select.swift @@ -37,8 +37,8 @@ extension TextView { } let charSet = CharacterSet(charactersIn: String(char)) let characterSet: CharacterSet - if CharacterSet.alphanumerics.isSuperset(of: charSet) { - characterSet = .alphanumerics + if CharacterSet.codeIdentifierCharacters.isSuperset(of: charSet) { + characterSet = .codeIdentifierCharacters } else if CharacterSet.whitespaces.isSuperset(of: charSet) { characterSet = .whitespaces } else if CharacterSet.newlines.isSuperset(of: charSet) {