UNPKG

atom-nuclide

Version:

A unified developer experience for web and mobile development, built as a suite of features on top of Atom to provide hackability and the support of an active community.

1,669 lines (1,433 loc) 49.8 kB
/* * Copyright (c) 2015-present, Facebook, Inc. * All rights reserved. * * This source code is licensed under the license found in the LICENSE file in * the root directory of this source tree. * * @flow */ /* eslint-disable no-unused-vars */ /** * Private Classes */ // Octicons v2.1.2. List extracted from the atom-styleguide package. type atom$Octicon = 'alert' | 'alignment-align' | 'alignment-aligned-to' | 'alignment-unalign' | 'arrow-down' | 'arrow-left' | 'arrow-right' | 'arrow-small-down' | 'arrow-small-left' | 'arrow-small-right' | 'arrow-small-up' | 'arrow-up' | 'beer' | 'book' | 'bookmark' | 'briefcase' | 'broadcast' | 'browser' | 'bug' | 'calendar' | 'check' | 'checklist' | 'chevron-down' | 'chevron-left' | 'chevron-right' | 'chevron-up' | 'circle-slash' | 'circuit-board' | 'clippy' | 'clock' | 'cloud-download' | 'cloud-upload' | 'code' | 'color-mode' | 'comment' | 'comment-add' | 'comment-discussion' | 'credit-card' | 'dash' | 'dashboard' | 'database' | 'device-camera' | 'device-camera-video' | 'device-desktop' | 'device-mobile' | 'diff' | 'diff-added' | 'diff-ignored' | 'diff-modified' | 'diff-removed' | 'diff-renamed' | 'ellipsis' | 'eye' | 'eye-unwatch' | 'eye-watch' | 'file-add' | 'file-binary' | 'file-code' | 'file-directory' | 'file-directory-create' | 'file-media' | 'file-pdf' | 'file-submodule' | 'file-symlink-directory' | 'file-symlink-file' | 'file-text' | 'file-zip' | 'flame' | 'fold' | 'gear' | 'gift' | 'gist' | 'gist-fork' | 'gist-new' | 'gist-private' | 'gist-secret' | 'git-branch' | 'git-branch-create' | 'git-branch-delete' | 'git-commit' | 'git-compare' | 'git-fork-private' | 'git-merge' | 'git-pull-request' | 'git-pull-request-abandoned' | 'globe' | 'graph' | 'heart' | 'history' | 'home' | 'horizontal-rule' | 'hourglass' | 'hubot' | 'inbox' | 'info' | 'issue-closed' | 'issue-opened' | 'issue-reopened' | 'jersey' | 'jump-down' | 'jump-left' | 'jump-right' | 'jump-up' | 'key' | 'keyboard' | 'law' | 'light-bulb' | 'link' | 'link-external' | 'list-ordered' | 'list-unordered' | 'location' | 'lock' | 'log-in' | 'log-out' | 'logo-github' | 'mail' | 'mail-read' | 'mail-reply' | 'mark-github' | 'markdown' | 'megaphone' | 'mention' | 'microscope' | 'milestone' | 'mirror' | 'mirror-private' | 'mirror-public' | 'mortar-board' | 'move-down' | 'move-left' | 'move-right' | 'move-up' | 'mute' | 'no-newline' | 'octoface' | 'organization' | 'package' | 'paintcan' | 'pencil' | 'person' | 'person-add' | 'person-follow' | 'pin' | 'playback-fast-forward' | 'playback-pause' | 'playback-play' | 'playback-rewind' | 'plug' | 'plus' | 'podium' | 'primitive-dot' | 'primitive-square' | 'pulse' | 'puzzle' | 'question' | 'quote' | 'radio-tower' | 'remove-close' | 'repo' | 'repo-clone' | 'repo-create' | 'repo-delete' | 'repo-force-push' | 'repo-forked' | 'repo-pull' | 'repo-push' | 'repo-sync' | 'rocket' | 'rss' | 'ruby' | 'screen-full' | 'screen-normal' | 'search' | 'search-save' | 'server' | 'settings' | 'sign-in' | 'sign-out' | 'split' | 'squirrel' | 'star' | 'star-add' | 'star-delete' | 'steps' | 'stop' | 'sync' | 'tag' | 'tag-add' | 'tag-remove' | 'telescope' | 'terminal' | 'three-bars' | 'tools' | 'trashcan' | 'triangle-down' | 'triangle-left' | 'triangle-right' | 'triangle-up' | 'unfold' | 'unmute' | 'versions' | 'x' | 'zap' ; declare class atom$Model { destroy(): void, isDestroyed(): boolean, } declare class atom$Package { path: string, activateTime: number, mainModule: any, metadata: Object, name: string, loadTime: number, getType(): 'atom' | 'textmate' | 'theme', hasActivationCommands(): boolean, hasActivationHooks(): boolean, onDidDeactivate(cb: () => mixed): IDisposable, activateNow(): void, } /** * Essential Classes */ type atom$CommandCallback = (event: Event) => mixed; declare class atom$CommandRegistry { // Methods add( target: string | HTMLElement, commandNameOrCommands: string | {[commandName: string]: atom$CommandCallback}, callback?: atom$CommandCallback ): IDisposable, dispatch(target: HTMLElement, commandName: string): void, } declare class atom$CompositeDisposable { constructor(...disposables: IDisposable[]): void, dispose(): void, add(disposable: IDisposable): void, remove(disposable: IDisposable): void, clear(): void, } type atom$ConfigType = 'boolean' | 'string' | 'integer' | 'number' | 'array' | 'object' | 'color' | 'any'; type atom$ConfigSchema = { default?: mixed, description?: string, enum?: Array<mixed>, maximum?: number, minimum?: number, properties?: Object, title?: string, type: Array<atom$ConfigType> | atom$ConfigType, }; declare class atom$Config { // Config Subscription observe( keyPath: string, optionsOrCallback?: (Object | (value: any) => void), callback?: (value: any) => void ): IDisposable, onDidChange( keyPathOrCallback: (string | (event: Object) => void), optionsOrCallback?: (Object | (event: Object) => void), callback?: (event: Object) => void ): IDisposable, // Managing Settings get( keyPath?: string, options?: { excludeSources?: Array<string>, sources?: Array<string>, scope?: Object, } ): mixed, set( keyPath: string, value: ?mixed, options?: { scopeSelector?: string, source?: string, }, ): boolean, unset( keyPath: string, options?: { scopeSelector?: string, source?: string, } ): void, getUserConfigPath(): string, // Undocumented Methods getRawValue(keyPath: ?string, options: {excludeSources?: string, sources?: string}): mixed, getSchema(keyPath: string): atom$ConfigSchema, save(): void, setRawValue(keyPath: string, value: mixed): void, setSchema( keyPath: string, schema: atom$ConfigSchema, ): void, } declare class atom$Cursor { // Event Subscription onDidChangePosition( callback: (event: { oldBufferPosition: atom$Point, oldScreenPosition: atom$Point, newBufferPosition: atom$Point, newScreenPosition: atom$Point, textChanged: boolean, Cursor: atom$Cursor, }) => mixed, ): IDisposable, // Managing Cursor Position getBufferRow(): number, getBufferColumn(): number, getBufferPosition(): atom$Point, // Cursor Position Details // Moving the Cursor // Local Positions and Ranges getCurrentWordBufferRange(options?: {wordRegex: RegExp}): atom$Range, getCurrentWordPrefix(): string, // Visibility // Comparing to another cursor // Utilities wordRegExp(options?: {includeNonWordCharacters: boolean}): RegExp, } declare class atom$Decoration { destroy(): void, onDidChangeProperties( callback: (event: {oldProperties: Object, newProperties: Object}) => mixed ): IDisposable, getMarker(): atom$Marker, getProperties(): Object, setProperties(properties: mixed): void, } declare class atom$Disposable { constructor(disposalAction?: (...args: any[]) => any): void, dispose(): void, } declare class atom$Emitter { dispose(): void, on(name: string, callback: (v: any) => mixed): IDisposable, preempt(name: string, callback: (v: any) => void): IDisposable, // This is a flow hack to prevent emitting more than one value. // `EventEmitter` allows emitting any number of values - making this a land // mine, since we tend to think of `emit` as interchangeable. // This hack only works if the extra value is not `undefined`, so this isn't // full-proof, but it works for most cases. emit(name: string, value: any, ...no_extra_args_allowed: Array<void>): IDisposable, } declare class atom$Gutter { name: string, destroy(): void, decorateMarker( marker: atom$Marker, options?: {'class'?: string, item?: Object | HTMLElement}): void, show(): void, hide(): void, onDidDestroy(callback: () => void): IDisposable, } declare class atom$Marker { destroy(): void, getBufferRange(): atom$Range, getStartBufferPosition(): atom$Point, onDidChange(callback: (event: { oldHeadScreenPosition: atom$Point, newHeadScreenPosition: atom$Point, oldTailScreenPosition: atom$Point, newTailScreenPosition: atom$Point, oldHeadBufferPosition: atom$Point, newHeadBufferPosition: atom$Point, oldTailBufferPosition: atom$Point, newTailBufferPosition: atom$Point, isValid: boolean, textChanged: boolean, }) => void): IDisposable, isValid(): boolean, isDestroyed(): boolean, onDidDestroy(callback: () => void): IDisposable, } declare class atom$ServiceHub { provide<T>(keyPath: string, version: string, service: T): IDisposable, consume<T>( keyPath: string, versionRange: string, callback: (provider: T) => mixed ): IDisposable, } declare class atom$PackageManager { // Event Subscription onDidLoadInitialPackages(callback: () => void): IDisposable, onDidActivateInitialPackages(callback: () => void): IDisposable, onDidActivatePackage(callback: (pkg: atom$Package) => mixed): IDisposable, onDidDeactivatePackage(callback: (pkg: atom$Package) => mixed): IDisposable, onDidLoadPackage(callback: (pkg: atom$Package) => mixed): IDisposable, // Package system data getApmPath(): string, getPackageDirPaths(): Array<string>, // General package data resolvePackagePath(name: string): ?string, isBundledPackage(name: string): boolean, // Enabling and disabling packages enablePackage(name: string): ?atom$Package, disablePackage(name: string): ?atom$Package, isPackageDisabled(name: string): boolean, // Accessing active packages getActivePackage(name: string): ?atom$Package, getActivePackages(): Array<atom$Package>, isPackageActive(name: string): boolean, // Activating and deactivating packages activatePackage(name: string): Promise<atom$Package>, // Accessing loaded packages getLoadedPackage(name: string): ?atom$Package, getLoadedPackages(): Array<atom$Package>, isPackageLoaded(name: string): boolean, // Accessing available packages getAvailablePackageNames(): Array<string>, // (Undocumented.) activate(): Promise<any>, deactivatePackages(): void, deactivatePackage(name: string): void, loadPackage(name: string): void, loadPackages(): void, serviceHub: atom$ServiceHub, packageDirPaths: Array<string>, triggerDeferredActivationHooks(): void, unloadPackage(name: string): void, unloadPackages(): void, } declare class atom$StyleManager { // Event Subscription // Reading Style Elements getStyleElements(): Array<HTMLStyleElement>, // Paths getUserStyleSheetPath(): string, } type atom$PaneSplitParams = { copyActiveItem?: boolean, items?: Array<Object>, }; type atom$PaneSplitOrientation = 'horizontal' | 'vertical'; type atom$PaneSplitSide = 'before' | 'after'; type atom$PaneParams = { activeItem?: Object, focused?: boolean, container: Object, config: atom$Config, applicationDelegate: Object, notificationManager: atom$NotificationManager, deserializerManager: atom$DeserializerManager, items?: Array<Object>, itemStackIndices?: Array<number>, flexScale?: number, }; declare class atom$Pane { // Items addItem(item: Object, options?: {index?: number, pending?: boolean}): Object, getItems(): Array<Object>, getActiveItem(): ?Object, itemAtIndex(index: number): ?Object, getActiveItemIndex(): number, activateItem(item: Object): ?Object, activateItemAtIndex(index: number): void, moveItemToPane(item: Object, pane: atom$Pane, index: number): void, destroyItem(item: Object): boolean, itemForURI(uri: string): Object, // Event subscriptions. onDidDestroy(cb: () => void): IDisposable, // Lifecycle isActive(): boolean, activate(): void, destroy(): void, // Splitting splitLeft(params?: atom$PaneSplitParams): atom$Pane, splitRight(params?: atom$PaneSplitParams): atom$Pane, splitUp(params?: atom$PaneSplitParams): atom$Pane, splitDown(params?: atom$PaneSplitParams): atom$Pane, split( orientation: atom$PaneSplitOrientation, side: atom$PaneSplitSide, params?: atom$PaneSplitParams, ): atom$Pane, // Undocumented Methods constructor(params: atom$PaneParams): atom$Pane, clearPendingItem(): void, getFlexScale(): number, getParent(): Object, removeItem(item: Object, moved: ?boolean): void, setActiveItem(item: Object): Object, setFlexScale(flexScale: number): number, } // TODO improve this type declare interface atom$PaneItem { getTitle(): string, getLongTitle?: () => string, getIconName?: () => atom$Octicon, onDidChangeIcon?: (cb: (icon: atom$Octicon) => void) => IDisposable, onDidChangeTitle?: (cb: (title: string) => void) => IDisposable, serialize?: () => Object, } // Undocumented class declare class atom$PaneAxis { getFlexScale(): number, setFlexScale(flexScale: number): number, getItems(): Array<Object>, } // Undocumented class declare class atom$PaneContainer { destroy(): void, getActivePane(): atom$Pane, getActivePaneItem(): ?Object, getPanes(): Array<atom$Pane>, getPaneItems(): Array<atom$PaneItem>, observePanes(cb: (pane: atom$Pane) => void): IDisposable, onDidAddPaneItem(cb: (item: atom$PaneItem) => void): IDisposable, onDidDestroyPaneItem(cb: (item: atom$Pane) => void): IDisposable, paneForItem(item: Object): ?atom$Pane, serialize(): Object, } declare class atom$Panel { // Construction and Destruction destroy(): void, // Event Subscription onDidChangeVisible(callback: (visible: boolean) => any): IDisposable, onDidDestroy(callback: (panel: atom$Panel) => any): IDisposable, // Panel Details getItem(): HTMLElement, getPriority(): number, isVisible(): boolean, hide(): void, show(): void, } type atom$PointObject = {row: number, column: number}; type atom$PointLike = atom$Point | [number, number] | atom$PointObject; declare class atom$Point { static fromObject(object: atom$PointLike, copy:? boolean): atom$Point, constructor(row: number, column: number): void, row: number, column: number, copy(): atom$Point, negate(): atom$Point, // Comparison min(point1: atom$Point, point2: atom$Point): atom$Point, // TODO(t8220399): Change this to: `-1 | 0 | 1`. compare(other: atom$Point): number, isEqual(otherRange: atom$Point | [number, number]): boolean, isLessThan(other: atom$Point): boolean, isLessThanOrEqual(other: atom$Point): boolean, isGreaterThan(other: atom$Point): boolean, isGreaterThanOrEqual(other: atom$Point): boolean, // Operations translate(other: atom$Point | [number, number]): atom$Point, // Conversion serialize(): Array<number>, toArray(): Array<number>, } type atom$RangeObject = { start: atom$PointObject, end: atom$PointObject, }; type atom$RangeLike = atom$Range | atom$RangeObject // TODO: Flow doesn't really handle the real signature below... | [atom$PointLike, atom$PointLike] | { start: atom$PointLike, end: atom$PointLike, }; declare class atom$Range { static fromObject( object: atom$RangeLike, copy?: boolean, ): atom$Range, constructor(pointA: atom$PointLike, pointB: atom$PointLike): void, start: atom$Point, end: atom$Point, isEmpty(): boolean, isEqual(otherRange: atom$Range | [[number, number], [number, number]]): boolean, containsPoint(point: atom$Point, exclusive?: boolean): boolean, containsRange(other: atom$Range, exclusive?: boolean): boolean, serialize(): Array<Array<number>>, } type RawStatusBarTile = { item: HTMLElement, priority: number, }; type atom$StatusBarTile = { getPriority(): number, getItem(): HTMLElement, destroy(): void, }; declare class atom$ScopeDescriptor { constructor(object: {scopes: Array<string>}): void, getScopesArray(): Array<string>, } /** * This API is defined at https://github.com/atom/status-bar. */ declare class atom$StatusBar { addLeftTile(tile: RawStatusBarTile): atom$StatusBarTile, addRightTile(tile: RawStatusBarTile): atom$StatusBarTile, getLeftTiles(): Array<atom$StatusBarTile>, getRightTiles(): Array<atom$StatusBarTile>, } // https://github.com/atom/atom/blob/v1.9.0/src/text-editor-registry.coffee declare class atom$TextEditorRegistry { add(editor: atom$TextEditor): IDisposable, remove(editor: atom$TextEditor): boolean, observe(callback: (editor: atom$TextEditor) => void): IDisposable, // Private editors: Set<atom$TextEditor>, } declare class atom$ThemeManager { // Event Subscription /** * As recent as Atom 1.0.10, the implementation of this method was: * * ``` * onDidChangeActiveThemes: (callback) -> * @emitter.on 'did-change-active-themes', callback * @emitter.on 'did-reload-all', callback # TODO: Remove once deprecated pre-1.0 APIs are gone * ``` * * Due to the nature of CoffeeScript, onDidChangeActiveThemes returns a Disposable even though it * is not documented as doing so. However, the Disposable that it does return removes the * subscription on the 'did-reload-all' event (which is supposed to be deprecated) rather than the * 'did-change-active-themes' one. */ onDidChangeActiveThemes(callback: () => mixed): IDisposable, // Accessing Loaded Themes getLoadedThemeNames(): Array<string>, getLoadedThemes(): Array<mixed>, // TODO: Define undocumented ThemePackage class. // Accessing Active Themes getActiveThemeNames(): Array<string>, getActiveThemes(): Array<mixed>, // TODO: Define undocumented ThemePackage class. // Managing Enabled Themes getEnabledThemeNames(): Array<string>, // Private activateThemes(): Promise<any>, requireStylesheet(stylesheetPath: string): IDisposable, } type atom$TooltipsPlacementOption = 'top' | 'bottom' | 'left' | 'right' | 'auto'; type atom$TooltipsAddOptions = { title: string, keyBindingCommand?: string, keyBindingTarget?: HTMLElement, animation?: boolean, container?: string | false, delay?: number | {show: number, hide: number}, placement?: atom$TooltipsPlacementOption | () => atom$TooltipsPlacementOption, }; declare class atom$TooltipManager { add( target: HTMLElement, options: atom$TooltipsAddOptions, ): IDisposable, } type InsertTextOptions = { select: boolean, autoIndent: boolean, autoIndentNewline: boolean, autoDecreaseIndent: boolean, normalizeLineEndings: ?boolean, undo: string, }; type DecorateMarkerParams = { type: 'line', class: string, onlyHead?: boolean, onlyEmpty?: boolean, onlyNonEmpty?: boolean, } | { type: 'gutter', class: string, onlyHead?: boolean, onlyEmpty?: boolean, onlyNonEmpty?: boolean, gutterName?: string, } | { type: 'highlight', class?: string, gutterName?: string, } | { type: 'overlay', item: Object, position?: 'head' | 'tail', // Defaults to 'head' when unspecified. } | { type: 'block', item: HTMLElement, position?: 'before' | 'after', // Defaults to 'before' when unspecified. }; type ChangeCursorPositionEvent = { oldBufferPosition: atom$Point, oldScreenPosition: atom$Point, newBufferPosition: atom$Point, newScreenPosition: atom$Point, textChanged: boolean, cursor: atom$Cursor, }; declare class atom$TextEditor extends atom$Model { id: number, firstVisibleScreenRow: number, rowsPerPage: number, // Event Subscription onDidChange(callback: () => void): IDisposable, onDidStopChanging(callback: () => void): IDisposable, onDidChangeCursorPosition(callback: (event: ChangeCursorPositionEvent) => mixed): IDisposable, onDidDestroy(callback: () => mixed): IDisposable, onDidSave(callback: (event: {path: string}) => mixed): IDisposable, getBuffer(): atom$TextBuffer, observeGrammar(callback: (grammar: atom$Grammar) => mixed): IDisposable, onWillInsertText(callback: (event: {cancel: () => void, text: string}) => void): IDisposable, // Note that the range property of the event is undocumented. onDidInsertText(callback: (event: {text: string, range: atom$Range}) => mixed): IDisposable, // File Details getTitle(): string, getLongTitle(): string, /** * If you open Atom via Spotlight such that it opens with a tab named * "untitled" that does not correspond to a file on disk, this will return * null. */ getPath(): ?string, insertNewline(): void, isModified(): boolean, isEmpty(): boolean, getEncoding(): buffer$Encoding, setEncoding(encoding: string): void, // File Operations save(): void, saveAs(filePath: string): void, // Reading Text getText(): string, getTextInBufferRange(range: atom$Range | Array<number>): string, getLineCount(): number, // Mutating Text setText(text: string, options?: InsertTextOptions): void, setTextInBufferRange( range: atom$Range, text: string, options?: { normalizeLineEndings?: boolean, undo?: string, }, ): atom$Range, insertText(text: string): atom$Range | boolean, delete: () => void, backspace: () => void, duplicateLines: () => void, // History // TextEditor Coordinates screenPositionForBufferPosition( bufferPosition: Array<number> | atom$Point, options?: { wrapBeyondNewlines?: boolean, wrapAtSoftNewlines?: boolean, screenLine?: boolean, }, ): atom$Point, bufferPositionForScreenPosition( bufferPosition: Array<number> | atom$Point, options?: { wrapBeyondNewlines?: boolean, wrapAtSoftNewlines?: boolean, screenLine?: boolean, }, ): atom$Point, // Decorations decorateMarker(marker: atom$Marker, decorationParams: DecorateMarkerParams): atom$Decoration, decorationsForScreenRowRange( startScreenRow: number, endScreenRow: number, ): {[markerId: string]: Array<Object>}, getDecorations(options?: {class?: string, type?: string}): Array<atom$Decoration>, // Markers markBufferPosition(position: atom$Point | Array<number>): atom$Marker, markBufferRange(range: atom$Range | Array<Array<number>>, properties?: { maintainHistory?: boolean, reversed?: boolean, persistent?: boolean, invalidate?: string, }): atom$Marker, markScreenRange(range: atom$Range | Array<Array<number>>, properties?: { maintainHistory?: boolean, reversed?: boolean, persistent?: boolean, invalidate?: string, }): atom$Marker, // Cursors getCursors(): Array<atom$Cursor>, setCursorBufferPosition( position: atom$Point | Array<number>, options?: { autoscroll?: boolean, wrapBeyondNewlines?: boolean, wrapAtSoftNewlines?: boolean, screenLine?: boolean, }): void, getCursorBufferPosition(): atom$Point, getCursorScreenPosition(): atom$Point, getCursorScreenPositions(): Array<atom$Point>, getLastCursor(): atom$Cursor, moveToBeginningOfLine(): void, moveToEndOfLine(): void, moveToBottom(): void, // Selections getSelectedText(): string, selectAll(): void, getSelectedBufferRange(): atom$Range, getSelectedBufferRanges(): Array<atom$Range>, getSelections(): Array<atom$Selection>, selectToBufferPosition(point: atom$Point): void, // Searching and Replacing scanInBufferRange( regex: RegExp, range: atom$Range, iterator: (foundMatch: { match: mixed, matchText: string, range: atom$Range, stop: () => mixed, replace: (replaceWith: string) => mixed, }) => mixed ): mixed, // Tab Behavior // Soft Wrap Behavior // Indentation indentationForBufferRow(bufferRow: number): number, setTabLength(tabLength: number): void, setSoftTabs(softTabs: boolean): void, lineTextForBufferRow(bufferRow: number): string, // Grammars getGrammar(): atom$Grammar, setGrammar(grammar: atom$Grammar): void, // Clipboard Operations pasteText: (options?: Object) => void, // Managing Syntax Scopes scopeDescriptorForBufferPosition( bufferPosition: atom$Point | [number, number], ): atom$ScopeDescriptor, // Gutter addGutter(options: { name: string, priority?: number, visible?: boolean, }): atom$Gutter, observeGutters(callback: (gutter: atom$Gutter) => void): IDisposable, gutterWithName(name: string): ?atom$Gutter, // Scrolling the TextEditor scrollToBufferPosition( position: atom$Point | [?number, ?number], options?: {center?: boolean} ): void, scrollToScreenPosition( position: atom$Point | [?number, ?number], options?: {center?: boolean} ): void, scrollToBottom(): void, scrollToTop(): void, // TextEditor Rendering getPlaceholderText(): string, setPlaceholderText(placeholderText: string): void, // This is undocumented, but Nuclide uses it in the AtomTextEditor wrapper. setLineNumberGutterVisible(lineNumberGutterVisible: boolean): void, // Editor Options setSoftWrapped(softWrapped: boolean): void, isFoldedAtBufferRow(row: number): boolean, getLastBufferRow(): number, // Undocumented Methods getDefaultCharWidth(): number, getLineHeightInPixels(): number, moveToTop(): void, tokenForBufferPosition(position: atom$Point | [?number, ?number]): atom$Token, onDidConflict(callback: () => void): IDisposable, } /** * This is not part of the official Atom 1.0 API. Nevertheless, we need to reach into this object * via `atom$TextEditorElement` to do some things that we have no other way to do. */ declare class atom$TextEditorComponent { domNode: HTMLElement, presenter: atom$TextEditorPresenter, linesComponent: atom$LinesComponent, screenPositionForMouseEvent(event: MouseEvent): atom$Point, } /** * This is not part of the official Atom 1.0 API. Nevertheless, we need to reach into this object * via `atom$TextEditorComponent` to do some things that we have no other way to do. */ declare class atom$TextEditorPresenter { startBlinkingCursors: () => void, stopBlinkingCursors(visible: boolean): void, } /** * This is not part of the official Atom 1.0 API. Nevertheless, we need it to access * the deepest dom element receiving DOM events. */ declare class atom$LinesComponent { domNode: HTMLElement, getDomNode(): HTMLElement, } /** * This is not part of the official Atom 1.0 API, but it really should be. This is the element that * is returned when you run `atom.views.getView(<TextEditor>)`. */ declare class atom$TextEditorElement extends HTMLElement { component: ?atom$TextEditorComponent, getModel(): atom$TextEditor, setModel(model: atom$TextEditor): void, pixelPositionForBufferPosition( bufferPosition: {row: number, column: number} | Array<number> | atom$Point, ): {top: number, left: number}, pixelPositionForScreenPosition(screenPosition: atom$Point): { left: number, top: number, }, setScrollTop(scrollTop: number): void, getScrollTop(): number, setScrollLeft(scrollLeft: number): void, getScrollLeft(): number, getScrollHeight(): number, onDidChangeScrollTop(callback: (scrollTop: number) => mixed): IDisposable, onDidChangeScrollLeft(callback: (scrollLeft: number) => mixed): IDisposable, // Called when the editor is attached to the DOM. onDidAttach(callback: () => mixed): IDisposable, // Called when the editor is detached from the DOM. onDidDetach(callback: () => mixed): IDisposable, // Undocumented Methods // `undefined` means no explicit width. `null` sets a zero width (which is almost certainly a // mistake) so we don't allow it. setWidth(width: number | void): void, } declare class atom$ViewProvider { modelConstructor: Function, } declare class atom$ViewRegistry { // Methods addViewProvider( modelConstructor: any, createView?: (...args: any[]) => ?HTMLElement ): IDisposable, getView(textEditor: atom$TextEditor): atom$TextEditorElement, getView(notification: atom$Notification): HTMLElement, getView(gutter: atom$Gutter): HTMLElement, getView(panel: atom$Panel): HTMLElement, getView(workspace: atom$Workspace): HTMLElement, getView(object: Object): HTMLElement, providers: Array<atom$ViewProvider>, } type atom$WorkspaceAddPanelOptions = { item: Object, visible?: boolean, priority?: number, }; type atom$TextEditorParams = { buffer?: atom$TextBuffer, lineNumberGutterVisible?: boolean, }; type DestroyPaneItemEvent = { item: atom$PaneItem, pane: atom$Pane, index: number, }; type AddPaneItemEvent = { item: atom$PaneItem, pane: atom$Pane, index: number, }; type OnDidOpenEvent = { uri: string, item: mixed, pane: atom$Pane, index: number, }; type AddTextEditorEvent = { textEditor: atom$TextEditor, pane: atom$Pane, index: number, }; declare class atom$Workspace { // Event Subscription observeTextEditors(callback: (editor: atom$TextEditor) => mixed): IDisposable, onDidAddTextEditor(callback: (event: AddTextEditorEvent) => mixed): IDisposable, onDidChangeActivePaneItem(callback: (item: mixed) => mixed): IDisposable, onDidDestroyPaneItem(callback: (event: DestroyPaneItemEvent) => mixed): IDisposable, onDidAddPaneItem(callback: (event: AddPaneItemEvent) => mixed): IDisposable, observeActivePaneItem(callback: (item: ?mixed) => mixed): IDisposable, onDidStopChangingActivePaneItem(callback: (item: ?mixed) => mixed): IDisposable, observePaneItems(callback: (item: mixed) => mixed): IDisposable, onWillDestroyPaneItem( callback: (event: {item: mixed, pane: mixed, index: number}) => mixed ): IDisposable, onDidOpen(callback: (event: OnDidOpenEvent) => mixed): IDisposable, // Opening open( uri?: string, options?: { activePane?: boolean, initialLine?: number, initialColumn?: number, pending?: boolean, split?: string, searchAllPanes?: boolean, } ): Promise<atom$TextEditor>, openURIInPane( uri?: string, pane: atom$Pane, options?: { initialLine?: number, initialColumn?: number, activePane?: boolean, searchAllPanes?: boolean, } ): Promise<atom$TextEditor>, isTextEditor(item: ?mixed): boolean, /* Optional method because this was added post-1.0. */ buildTextEditor: ((params: atom$TextEditorParams) => atom$TextEditor), /* Optional method because this was added in 1.9.0 */ handleGrammarUsed?: (grammar: atom$Grammar) => void, reopenItem(): Promise<?atom$TextEditor>, addOpener(callback: (uri: string) => any): IDisposable, // Pane Items getPaneItems(): Array<Object>, getActivePaneItem(): ?Object, getTextEditors(): Array<atom$TextEditor>, getActiveTextEditor(): ?atom$TextEditor, // Panes getPanes(): Array<atom$Pane>, getActivePane(): atom$Pane, activateNextPane(): boolean, activatePreviousPane(): boolean, paneForURI(uri: string): atom$Pane, paneForItem(item: mixed): ?atom$Pane, // Panels getBottomPanels(): Array<atom$Panel>, addBottomPanel(options: atom$WorkspaceAddPanelOptions): atom$Panel, getLeftPanels(): Array<atom$Panel>, addLeftPanel(options: atom$WorkspaceAddPanelOptions): atom$Panel, getRightPanels(): Array<atom$Panel>, addRightPanel(options: atom$WorkspaceAddPanelOptions): atom$Panel, getTopPanels(): Array<atom$Panel>, addTopPanel(options: atom$WorkspaceAddPanelOptions): atom$Panel, getModalPanels(): Array<atom$Panel>, addModalPanel(options: atom$WorkspaceAddPanelOptions): atom$Panel, // Searching and Replacing destroyActivePaneItemOrEmptyPane(): void, destroyActivePaneItem(): void, // Undocumented properties paneContainer: atom$PaneContainer, } /** * Extended Classes */ declare class atom$BufferedNodeProcess { } declare class atom$BufferedProcess { // Event Subscription onWillThrowError( callback: (errorObject: {error: Object, handle: mixed}) => mixed ): IDisposable, // Helper Methods kill(): void, } declare class atom$Clipboard { // Methods write(text: string, metadata?: mixed): void, read(): string, readWithMetadata(): { metadata: ?mixed, text: string, }, } declare class atom$ContextMenuManager { add(itemsBySelector: {[cssSelector: string]: Array<atom$ContextMenuItem>}): IDisposable, itemSets: Array<atom$ContextMenuItemSet>, } declare class atom$ContextMenuItemSet { items: Array<atom$ContextMenuItem>, } type atom$ContextMenuItem = { command?: string, created?: (event: MouseEvent) => void, enabled?: boolean, label?: string, shouldDisplay?: (event: MouseEvent) => boolean, submenu?: Array<atom$ContextMenuItem>, type?: string, visible?: boolean, }; declare class atom$Deserializer { name: string, deserialize: (state: Object) => mixed, } declare class atom$DeserializerManager { add(...deserializers: atom$Deserializer[]): IDisposable, deserialize(state: Object, params?: Object): mixed, } // Apparently it can sometimes include a `code` property. declare class atom$GetEntriesError extends Error { code?: string, } declare class atom$Directory { symlink: boolean, // Construction create(mode?: number): Promise<boolean>, // Event Subscription onDidChange(callback: () => mixed): IDisposable, // Directory Metadata isFile(): boolean, isDirectory(): boolean, exists():Promise<boolean>, // Managing Paths getPath(): string, getBaseName(): string, relativize(fullPath: string): string, // Event Subscription onDidRename(callback: () => void): IDisposable, onDidDelete(callback: () => void): IDisposable, // Traversing getParent(): atom$Directory, getFile(filename: string): atom$File, getSubdirectory(dirname: string): atom$Directory, getEntries( callback: ( error: ?atom$GetEntriesError, entries: ?Array<atom$Directory | atom$File>, ) => mixed): void, contains(path: string): boolean, } declare class atom$File { symlink: boolean, // Construction create(): Promise<boolean>, // Event Subscription onDidChange(callback: () => mixed): IDisposable, // File Metadata isFile(): boolean, isDirectory(): boolean, exists(): boolean, setEncoding(encoding: string): void, getEncoding(): string, // Event Subscription onDidRename(callback: () => void): IDisposable, onDidDelete(callback: () => void): IDisposable, onDidChange(callback: () => void): IDisposable, // Managing Paths getPath(): string, getBaseName(): string, // Traversing getParent(): atom$Directory, // Reading and Writing read(flushCache?: boolean): Promise<string>, write(text: string): Promise<void>, writeSync(text: string): void, } declare class atom$GitRepository extends atom$Repository {} declare class atom$Grammar { name: string, scopeName: string, tokenizeLines(text: string): Array<Array<atom$GrammarToken>>, } type atom$GrammarToken = { value: string, scopes: Array<string>, }; declare class atom$GrammarRegistry { // Event Subscription onDidAddGrammar(callback: (grammar: atom$Grammar) => void): IDisposable, // Managing Grammars grammarForScopeName(scopeName: string): ?atom$Grammar, removeGrammarForScopeName(scopeName: string): ?atom$Grammar, loadGrammarSync(grammarPath: string): atom$Grammar, selectGrammar(filePath: string, fileContents: string): atom$Grammar, // Private API clear(): IDisposable, } type atom$KeyBinding = Object; declare class atom$KeymapManager { // Event Subscription onDidMatchBinding(callback: (event: { keystrokes: string, binding: atom$KeyBinding, keyboardEventTarget: HTMLElement, }) => mixed): IDisposable, onDidPartiallyMatchBinding(callback: (event: { keystrokes: string, partiallyMatchedBindings: atom$KeyBinding, keyboardEventTarget: HTMLElement, }) => mixed): IDisposable, onDidFailToMatchBinding(callback: (event: { keystrokes: string, partiallyMatchedBindings: atom$KeyBinding, keyboardEventTarget: HTMLElement, }) => mixed): IDisposable, onDidFailToReadFile(callback: (error: { message: string, stack: string, }) => mixed): IDisposable, // Adding and Removing Bindings add(source: string, bindings: Object): void, // Accessing Bindings getKeyBindings(): Array<atom$KeyBinding>, findKeyBindings(params: { keystrokes?: string, command: string, target?: HTMLElement, }): Array<atom$KeyBinding>, // Managing Keymap Files loadKeymap(path: string, options?: {watch: boolean}): void, watchKeymap(path: string): void, // Managing Keyboard Events handleKeyboardEvent(event: Event): void, keystrokeForKeyboardEvent(event: Event): string, getPartialMatchTimeout(): number, static buildKeydownEvent( key: string, options: { target: HTMLElement, alt?: boolean, cmd?: boolean, ctrl?: boolean, shift?: boolean, }, ): Event, } declare class atom$MenuManager { add(items: Array<Object>): IDisposable, update(): void, // Private API template: Array<Object>, } declare class atom$Project { // Event Subscription onDidChangePaths(callback: (projectPaths: Array<string>) => mixed): IDisposable, onDidAddBuffer(callback: (buffer: atom$TextBuffer) => mixed): IDisposable, // Accessing the git repository getRepositories(): Array<?atom$Repository>, repositoryForDirectory(directory: atom$Directory): Promise<?atom$Repository>, // Managing Paths getPaths(): Array<string>, addPath(projectPath: string): void, setPaths(paths: Array<string>): void, removePath(projectPath: string): void, getDirectories(): Array<atom$Directory>, relativizePath(): Array<string>, // [projectPath: ?string, relativePath: string] relativize(filePath: string): string, // Private API findBufferForPath(path: string): ?atom$TextBuffer, addBuffer(buffer: atom$TextBuffer): void, removeBuffer(buffer: atom$TextBuffer): void, getBuffers(): Array<atom$TextBuffer>, } type TextBufferScanIterator = (arg: { match: Array<string>, matchText: string, range: atom$Range, stop(): void, replace(replacement: string): void, }) => void; // This happens to be a number but it would be better if the type could be entirely opaque. All you // need to know is that if something needs a checkpoint you should only pass it values received from // TextBuffer::createCheckpoint type atom$TextBufferCheckpoint = number; // TextBuffer did-change/will-change type atom$TextEditEvent = { oldRange: atom$Range, newRange: atom$Range, oldText: string, newText: string, }; declare class atom$TextBuffer { file: ?atom$File, // Mixin static deserialize: (state: Object, params: Object) => mixed, // Events onWillChange(callback: (event: atom$TextEditEvent) => mixed): IDisposable, onDidChange(callback: (event: atom$TextEditEvent) => mixed): IDisposable, onDidStopChanging(callback: () => mixed): IDisposable, onDidConflict(callback: () => mixed): IDisposable, onDidChangeModified(callback: () => mixed): IDisposable, onDidUpdateMarkers(callback: () => mixed): IDisposable, onDidCreateMarker(callback: () => mixed): IDisposable, onDidChangePath(callback: () => mixed): IDisposable, onDidChangeEncoding(callback: () => mixed): IDisposable, onWillSave(callback: () => mixed): IDisposable, onDidSave(callback: () => mixed): IDisposable, onDidDelete(callback: () => mixed): IDisposable, onWillReload(callback: () => mixed): IDisposable, onDidReload(callback: () => mixed): IDisposable, onDidDestroy(callback: () => mixed): IDisposable, onWillThrowWatchError(callback: () => mixed): IDisposable, // File Details setPath(filePath: string): void, getPath(): string, setEncoding(encoding: string): void, getEncoding(): string, getUri(): string, getId(): string, // Reading Text isEmpty(): boolean, getText(): string, getTextInRange(range: atom$RangeLike): string, getLineCount(): number, getLines(): Array<string>, getLastLine(): string, lineForRow(row: number): string, lineEndingForRow(row: number): string, lineLengthForRow(row: number): number, isRowBlank(row: number): boolean, previousNonBlankRow(startRow: number): ?number, nextNonBlankRow(startRow: number): ?number, // Mutating Text setText(text: string): atom$Range, setTextInRange(range: atom$RangeLike, text: string, options?: Object): atom$Range, setTextViaDiff(text: string): void, insert( position: atom$Point, text: string, options?: { normalizeLineEndings?: boolean, undo?: string, }, ): atom$Range, append(text: string, options: ?{ normalizeLineEndings?: boolean, undo?: string, }): atom$Range, delete(range: atom$Range): atom$Range, deleteRows(startRow: number, endRow: number): atom$Range, // History undo(): void, redo(): void, transact(fn: () => mixed, _: void): void, transact(groupingInterval: number, fn: () => mixed): void, clearUndoStack(): void, createCheckpoint(): atom$TextBufferCheckpoint, revertToCheckpoint(checkpoint: atom$TextBufferCheckpoint): boolean, groupChangesSinceCheckpoint(checkpoint: atom$TextBufferCheckpoint): boolean, // TODO describe the return type more precisely. getChangesSinceCheckpoint(checkpoint: atom$TextBufferCheckpoint): Array<mixed>, // Search And Replace scanInRange(regex: RegExp, range: atom$Range, iterator: TextBufferScanIterator): void, backwardsScanInRange(regex: RegExp, range: atom$Range, iterator: TextBufferScanIterator): void, // Buffer Range Details getLastRow(): number, getRange(): atom$Range, rangeForRow(row: number, includeNewLine?: boolean): atom$Range, // Position/Index mapping characterIndexForPosition(position: atom$Point): number, positionForCharacterIndex(index: number): atom$Point, // Buffer Operations reload(): void, load(): Promise<void>, save(): void, isInConflict(): boolean, isModified(): boolean, // Private APIs cachedDiskContents: ?string, emitter: atom$Emitter, refcount: number, loaded: boolean, changeCount: number, wasModifiedBeforeRemove: boolean, finishLoading(): atom$TextBuffer, updateCachedDiskContents(flushCache?: boolean, callback?: () => mixed): Promise<void>, emitModifiedStatusChanged(changed: boolean): void, destroy(): void, isDestroyed(): boolean, } declare class atom$Notification { // Event Subscription onDidDismiss(callback: () => mixed): IDisposable, onDidDisplay(callback: () => mixed): IDisposable, // Methods getType(): string, getMessage(): string, getOptions(): Object, dismiss(): void, } type atom$NotificationButton = { text: string, className?: string, onDidClick?: () => mixed, }; type atom$NotificationOptions = { detail?: string, dismissable?: boolean, description?: string, icon?: string, buttons?: Array<atom$NotificationButton>, }; declare class atom$NotificationManager { // Events onDidAddNotification(callback: (notification: atom$Notification) => void): IDisposable, // Adding Notifications addSuccess(message: string, options?: atom$NotificationOptions): atom$Notification, addInfo(message: string, options?: atom$NotificationOptions): atom$Notification, addWarning(message: string, options?: atom$NotificationOptions): atom$Notification, addError(message: string, options?: atom$NotificationOptions): atom$Notification, addFatalError(message: string, options?: atom$NotificationOptions): atom$Notification, // Getting Notifications getNotifications(): Array<atom$Notification>, } // The items in this declaration are available off of `require('atom')`. // This list is not complete. declare module 'atom' { declare var BufferedNodeProcess: typeof atom$BufferedNodeProcess; declare var BufferedProcess: typeof atom$BufferedProcess; declare var CompositeDisposable: typeof atom$CompositeDisposable; declare var Directory: typeof atom$Directory; declare var Disposable: typeof atom$Disposable; declare var Emitter: typeof atom$Emitter; declare var File: typeof atom$File; declare var GitRepository: typeof atom$GitRepository; declare var Notification: typeof atom$Notification; declare var Point: typeof atom$Point; declare var Range: typeof atom$Range; declare var TextBuffer: typeof atom$TextBuffer; declare var TextEditor: typeof atom$TextEditor; } // Make sure that common types can be referenced without the `atom$` prefix // in type declarations. declare var Cursor: typeof atom$Cursor; declare var Panel: typeof atom$Panel; declare var TextEditor: typeof atom$TextEditor; type atom$UnhandledErrorEvent = { originalError: Object, message: string, url: string, line: number, column: number, }; // The properties of this type match the properties of the `atom` global. // This list is not complete. type AtomGlobal = { // Properties appVersion: string, atomScriptMode: ?boolean, // Added by nuclide-atom-script. clipboard: atom$Clipboard, commands: atom$CommandRegistry, config: atom$Config, contextMenu: atom$ContextMenuManager, deserializers: atom$DeserializerManager, grammars: atom$GrammarRegistry, keymaps: atom$KeymapManager, menu: atom$MenuManager, notifications: atom$NotificationManager, packages: atom$PackageManager, styles: atom$StyleManager, themes: atom$ThemeManager, textEditors: atom$TextEditorRegistry, tooltips: atom$TooltipManager, views: atom$ViewRegistry, workspace: atom$Workspace, project: atom$Project, devMode: boolean, // Event Subscription onWillThrowError(callback: (event: atom$UnhandledErrorEvent) => mixed): IDisposable, onDidThrowError(callback: (event: atom$UnhandledErrorEvent) => mixed): IDisposable, // Atom Details inDevMode(): boolean, inSafeMode(): boolean, inSpecMode(): boolean, getVersion(): string, isReleasedVersion(): boolean, getWindowLoadTime(): number, // This is an undocumented way to reach the Electron BrowserWindow. // Use `electron.remote.getCurrentWindow` instead. getCurrentWindow: void, // Messaging the User confirm(options: { buttons?: Array<string> | {[buttonName: string]: () => mixed}, detailedMessage?: string, message: string, }): ?number, reload(): void, // Undocumented Methods getConfigDirPath(): string, showSaveDialogSync(options: Object): string, loadState(): Promise<?Object>, getLoadSettings(): Object, }; declare var atom: AtomGlobal; type RepositoryDidChangeStatusCallback = (event: {path: string, pathStatus: number}) => mixed; type RepositoryLineDiff = { oldStart: number, newStart: number, oldLines: number, newLines: number, }; // Taken from the interface of [`GitRepository`][1], which is also implemented by // `HgRepositoryClient`. // // [1]: https://github.com/atom/atom/blob/v1.7.3/src/git-repository.coffee declare class atom$Repository { async: atom$RepositoryAsync, // Event Subscription onDidChangeStatus: (callback: RepositoryDidChangeStatusCallback) => IDisposable, onDidChangeStatuses: (callback: () => mixed) => IDisposable, // Repository Details getType: () => string, getPath: () => string, getWorkingDirectory: () => string, isProjectAtRoot: () => boolean, relativize: (aPath: string) => string, // Reading Status isPathModified: (aPath: string) => boolean, isPathNew: (aPath: string) => boolean, isPathIgnored: (aPath: string) => boolean, getDirectoryStatus: (aPath: string) => number, getPathStatus: (aPath: string) => number, getCachedPathStatus: (aPath: string) => ?number, isStatusModified: (status: number) => boolean, isStatusNew: (status: number) => boolean, // Retrieving Diffs getDiffStats: (filePath: string) => {added: number, deleted: number}, getLineDiffs: (aPath: string, text: string) => Array<RepositoryLineDiff>, // Checking Out checkoutHead: (aPath: string) => boolean, checkoutReference: (reference: string, create: boolean) => boolean, // Event Subscription onDidDestroy(callback: () => mixed): IDisposable, } // Taken from the interface of [`GitRepositoryAsync`][1], which is also implemented by Nuclide's // `HgRepositoryClientAsync`. This is an asynchronous version of `atom$Repository` with methods that // return Promises where possible rather than return values synchronously. // // [1]: https://github.com/atom/atom/blob/v1.7.3/src/git-repository-async.js declare class atom$RepositoryAsync { // Event Subscription onDidChangeStatus: (callback: RepositoryDidChangeStatusCallback) => IDisposable, onDidChangeStatuses: (callback: () => mixed) => IDisposable, // Repository Details getType: () => string, // Reading Status isStatusModified: (status: number) => boolean, isStatusNew: (status: number) => boolean, getCachedPathStatuses: () => {[filePath: string]: number}, refreshStatus: () => Promise<void>, isStatusIgnored: (status: number) => boolean, isStatusStaged: (status: number) => boolean, isStatusDeleted: (status: number) => boolean, // Checking Out checkoutReference: (reference: string, create: boolean) => Promise<void>, // Event Subscription onDidDestroy(callback: () => mixed): IDisposable, } // One of text or snippet is required. // TODO(hansonw): use a union + intersection type type atom$AutocompleteSuggestion = { text?: string, snippet?: string, replacementPrefix?: string, type?: ?string, leftLabel?: ?string, leftLabelHTML?: ?string, rightLabel?: ?string, rightLabelHTML?: ?string, className?: ?string, iconHTML?: ?string, description?: ?string, descriptionMoreURL?: ?string, }; type atom$AutocompleteRequest = { editor: TextEditor, bufferPosition: atom$Point, scopeDescriptor: string, prefix: string, activatedManually: boolean, }; type atom$AutocompleteProvider = { selector: string, getSuggestions: (request: atom$AutocompleteRequest) => Promise<?Array<atom$AutocompleteSuggestion>>, disableForSelector?: string, inclusionPriority?: number, excludeLowerPriority?: boolean, }; // Undocumented API. declare class atom$Token { value: string, matchesScopeSelector(selector: string): boolean, } declare class atom$Selection { getText(): string, }