1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889 |
- let instance;
- const spellchecker = require('spellchecker');
- const pathspec = require('atom-pathspec');
- const env = require('./checker-env');
- // Initialize the global spell checker which can take some time. We also force
- // the use of the system or operating system library instead of Hunspell.
- if (env.isSystemSupported()) {
- instance = new spellchecker.Spellchecker();
- instance.setSpellcheckerType(spellchecker.ALWAYS_USE_SYSTEM);
- if (!instance.setDictionary('', '')) {
- instance = undefined;
- }
- } else {
- instance = undefined;
- }
- // The `SystemChecker` is a special case to use the built-in system spell-checking
- // provided by some platforms, such as Windows 8+ and macOS. This also doesn't have
- // settings for specific locales because we need to use default, otherwise macOS
- // starts to throw an occasional error if you use multiple locales at the same time
- // due to some memory bug.
- class SystemChecker {
- constructor() {
- if (atom.config.get('spell-check.enableDebug')) {
- debug = require('debug');
- this.log = debug('spell-check:system-checker');
- } else {
- this.log = (str) => {};
- }
- this.log('enabled', this.isEnabled(), this.getStatus());
- }
- deactivate() {}
- getId() {
- return 'spell-check:system';
- }
- getName() {
- return 'System Checker';
- }
- getPriority() {
- return 110;
- }
- isEnabled() {
- return instance;
- }
- getStatus() {
- if (instance) {
- return 'working correctly';
- } else {
- return 'not supported on platform';
- }
- }
- providesSpelling(args) {
- return this.isEnabled();
- }
- providesSuggestions(args) {
- return this.isEnabled();
- }
- providesAdding(args) {
- return false;
- } // Users can't add yet.
- check(args, text) {
- const id = this.getId();
- if (this.isEnabled()) {
- // We use the default checker here and not the locale-specific one so it
- // will check all languages at the same time.
- return instance.checkSpellingAsync(text).then((incorrect) => {
- if (this.log.enabled) {
- this.log('check', incorrect);
- }
- return { id, invertIncorrectAsCorrect: true, incorrect };
- });
- } else {
- return { id, status: this.getStatus() };
- }
- }
- suggest(args, word) {
- return instance.getCorrectionsForMisspelling(word);
- }
- }
- module.exports = SystemChecker;
|