Skip to content
This repository has been archived by the owner on Dec 15, 2022. It is now read-only.

Commit

Permalink
Initial commit
Browse files Browse the repository at this point in the history
  • Loading branch information
kevinsawicki committed Mar 2, 2015
0 parents commit 98506e8
Show file tree
Hide file tree
Showing 6 changed files with 130 additions and 0 deletions.
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
node_modules
npm-debug.log
1 change: 1 addition & 0 deletions completions.json
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
{"Atom":{"properties":["commands","config","clipboard","contextMenu","menu","keymaps","tooltips","project","grammars","packages","themes","styles","deserializers","views","workspace"],"methods":["onDidBeep","onWillThrowError","onDidThrowError","inDevMode","inSafeMode","inSpecMode","getVersion","isReleasedVersion","getWindowLoadTime","open","pickFolder","close","getSize","setSize","getPosition","setPosition","center","focus","show","hide","reload","isMaximixed","isFullScreen","setFullScreen","toggleFullScreen","beep","confirm","openDevTools","toggleDevTools","executeJavaScriptInDevTools"]},"BufferedNodeProcess":{"properties":[],"methods":["constructor"]},"BufferedProcess":{"properties":[],"methods":["constructor","onWillThrowError","kill"]},"Clipboard":{"properties":[],"methods":["write","read","readWithMetadata"]},"Color":{"properties":[],"methods":["toHexString","toRGBAString"]},"CommandRegistry":{"properties":[],"methods":["add","findCommands","dispatch"]},"CompositeDisposable":{"properties":[],"methods":["constructor","dispose","add","remove","clear"]},"Config":{"properties":[],"methods":["observe","onDidChange","get","getAll","set","unset","getSources","getSchema","getUserConfigPath","transact"]},"ContextMenuManager":{"properties":[],"methods":["add"]},"Cursor":{"properties":[],"methods":["onDidChangePosition","onDidDestroy","onDidChangeVisibility","setScreenPosition","getScreenPosition","setBufferPosition","getBufferPosition","getScreenRow","getScreenColumn","getBufferRow","getBufferColumn","getCurrentBufferLine","isAtBeginningOfLine","isAtEndOfLine","getMarker","isSurroundedByWhitespace","isBetweenWordAndNonWord","isInsideWord","getIndentLevel","getScopeDescriptor","hasPrecedingCharactersOnLine","isLastCursor","moveUp","moveDown","moveLeft","moveRight","moveToTop","moveToBottom","moveToBeginningOfScreenLine","moveToBeginningOfLine","moveToFirstCharacterOfLine","moveToEndOfScreenLine","moveToEndOfLine","moveToBeginningOfWord","moveToEndOfWord","moveToBeginningOfNextWord","moveToPreviousWordBoundary","moveToNextWordBoundary","skipLeadingWhitespace","moveToBeginningOfNextParagraph","moveToBeginningOfPreviousParagraph","getPreviousWordBoundaryBufferPosition","getNextWordBoundaryBufferPosition","getBeginningOfCurrentWordBufferPosition","getEndOfCurrentWordBufferPosition","getBeginningOfNextWordBufferPosition","getCurrentWordBufferRange","getCurrentLineBufferRange","getCurrentParagraphBufferRange","getCurrentWordPrefix","setVisible","isVisible","compare","clearAutoscroll","clearSelection","wordRegExp"]},"Decoration":{"properties":[],"methods":["destroy","onDidChangeProperties","onDidDestroy","getId","getMarker","getProperties","setProperties"]},"DeserializerManager":{"properties":[],"methods":["add","deserialize"]},"Directory":{"properties":[],"methods":["constructor","onDidChange","isFile","isDirectory","existsSync","isRoot","getPath","getRealPathSync","getBaseName","relativize","getParent","getFile","getSubdirectory","getEntriesSync","getEntries","contains"]},"Disposable":{"properties":[],"methods":["constructor","dispose"]},"Emitter":{"properties":[],"methods":["constructor","dispose","on","preempt","emit"]},"File":{"properties":[],"methods":["constructor","onDidChange","onDidRename","onDidDelete","onWillThrowWatchError","isFile","isDirectory","exists","existsSync","getDigest","setEncoding","getEncoding","getPath","getRealPathSync","getBaseName","getParent","read","write"]},"GitRepository":{"properties":[],"methods":["destroy","onDidDestroy","onDidChangeStatus","onDidChangeStatuses","getPath","getWorkingDirectory","isProjectAtRoot","relativize","hasBranch","getShortHead","isSubmodule","getAheadBehindCount","getCachedUpstreamAheadBehindCount","getConfigValue","getOriginURL","getUpstreamBranch","getReferences","getReferenceTarget","isPathModified","isPathNew","isPathIgnored","getDirectoryStatus","getPathStatus","getCachedPathStatus","isStatusModified","isStatusNew","getDiffStats","getLineDiffs","checkoutHead","checkoutReference"]},"Grammar":{"properties":[],"methods":["onDidUpdate","tokenizeLines","tokenizeLine"]},"GrammarRegistry":{"properties":[],"methods":["onDidAddGrammar","onDidUpdateGrammar","getGrammars","grammarForScopeName","addGrammar","removeGrammarForScopeName","readGrammarSync","readGrammar","loadGrammarSync","loadGrammar","grammarOverrideForPath","setGrammarOverrideForPath","clearGrammarOverrideForPath","clearGrammarOverrides","selectGrammar"]},"KeymapManager":{"properties":[],"methods":["constructor","destroy","onDidMatchBinding","onDidPartiallyMatchBindings","onDidFailToMatchBinding","onDidFailToReadFile","add","getKeyBindings","findKeyBindings","loadKeymap","watchKeymap","handleKeyboardEvent","keystrokeForKeyboardEvent","getPartialMatchTimeout"]},"Marker":{"properties":[],"methods":["destroy","copy","onDidChange","onDidDestroy","isValid","isDestroyed","isReversed","getInvalidationStrategy","getProperties","setProperties","isEqual","compare","getBufferRange","setBufferRange","getScreenRange","setScreenRange","getStartBufferPosition","getStartScreenPosition","getEndBufferPosition","getEndScreenPosition","getHeadBufferPosition","setHeadBufferPosition","getHeadScreenPosition","setHeadScreenPosition","getTailBufferPosition","setTailBufferPosition","getTailScreenPosition","setTailScreenPosition","hasTail","plantTail","clearTail"]},"MenuManager":{"properties":[],"methods":["add","update"]},"PackageManager":{"properties":[],"methods":["onDidLoadInitialPackages","onDidActivateInitialPackages","onDidActivatePackage","onDidDeactivatePackage","onDidLoadPackage","onDidUnloadPackage","getApmPath","getPackageDirPaths","resolvePackagePath","isBundledPackage","enablePackage","disablePackage","isPackageDisabled","getActivePackages","getActivePackage","isPackageActive","getLoadedPackages","getLoadedPackage","isPackageLoaded","getAvailablePackagePaths","getAvailablePackageNames","getAvailablePackageMetadata"]},"Pane":{"properties":[],"methods":["onDidActivate","onDidDestroy","onDidChangeActive","observeActive","onDidAddItem","onDidRemoveItem","onDidMoveItem","observeItems","onDidChangeActiveItem","observeActiveItem","onWillDestroyItem","getItems","getActiveItem","itemAtIndex","activateNextItem","activatePreviousItem","moveItemRight","moveItemLeft","getActiveItemIndex","activateItemAtIndex","activateItem","addItem","addItems","moveItem","moveItemToPane","destroyActiveItem","destroyItem","destroyItems","destroyInactiveItems","saveActiveItem","saveActiveItemAs","saveItem","saveItemAs","saveItems","itemForURI","activateItemForURI","isActive","activate","destroy","splitLeft","splitRight","splitUp","splitDown"]},"Panel":{"properties":[],"methods":["destroy","onDidChangeVisible","onDidDestroy","getItem","getPriority","isVisible","hide","show"]},"Point":{"properties":[],"methods":["constructor","copy","negate","freeze","translate","traverse","compare","isEqual","isLessThan","isLessThanOrEqual","isGreaterThan","isGreaterThanOrEqual","toArray","serialize","toString"]},"Project":{"properties":[],"methods":["getRepositories","repositoryForDirectory","getPaths","setPaths","addPath","removePath","getDirectories","relativize","contains"]},"Range":{"properties":[],"methods":["constructor","copy","negate","serialize","isEmpty","isSingleLine","getRowCount","getRows","freeze","union","translate","traverse","compare","isEqual","coversSameRows","intersectsWith","containsRange","containsPoint","intersectsRow","intersectsRowRange","toString"]},"ScopeDescriptor":{"properties":[],"methods":["constructor","getScopesArray"]},"Selection":{"properties":[],"methods":["onDidChangeRange","onDidDestroy","getScreenRange","setScreenRange","getBufferRange","setBufferRange","getBufferRowRange","isEmpty","isReversed","isSingleScreenLine","getText","intersectsBufferRange","intersectsWith","clear","selectToScreenPosition","selectToBufferPosition","selectRight","selectLeft","selectUp","selectDown","selectToTop","selectToBottom","selectAll","selectToBeginningOfLine","selectToFirstCharacterOfLine","selectToEndOfLine","selectToBeginningOfWord","selectToEndOfWord","selectToBeginningOfNextWord","selectToPreviousWordBoundary","selectToNextWordBoundary","selectToBeginningOfNextParagraph","selectToBeginningOfPreviousParagraph","selectWord","expandOverWord","selectLine","expandOverLine","insertText","backspace","deleteToBeginningOfWord","deleteToBeginningOfLine","delete","deleteToEndOfLine","deleteToEndOfWord","deleteSelectedText","deleteLine","joinLines","outdentSelectedRows","autoIndentSelectedRows","toggleLineComments","cutToEndOfLine","cut","copy","fold","indentSelectedRows","addSelectionBelow","addSelectionAbove","merge","compare"]},"StyleManager":{"properties":[],"methods":["observeStyleElements","onDidAddStyleElement","onDidRemoveStyleElement","onDidUpdateStyleElement","getStyleElements","getUserStyleSheetPath"]},"Task":{"properties":[],"methods":["constructor","start","send","on","terminate"]},"TextBuffer":{"properties":[],"methods":["constructor","onDidChange","onDidStopChanging","onDidConflict","onDidChangeModified","onDidUpdateMarkers","onDidCreateMarker","onDidChangePath","onDidChangeEncoding","onWillSave","onDidSave","onWillReload","onDidReload","onDidDestroy","onWillThrowWatchError","getStoppedChangingDelay","isModified","isInConflict","getPath","setPath","setEncoding","getEncoding","getUri","isEmpty","getText","getTextInRange","getLines","getLastLine","lineForRow","lineEndingForRow","lineLengthForRow","isRowBlank","previousNonBlankRow","nextNonBlankRow","setText","setTextViaDiff","setTextInRange","insert","append","delete","deleteRow","deleteRows","markRange","markPosition","getMarkers","getMarker","findMarkers","getMarkerCount","undo","redo","transact","clearUndoStack","createCheckpoint","revertToCheckpoint","groupChangesSinceCheckpoint","scan","backwardsScan","scanInRange","backwardsScanInRange","replace","getRange","getLineCount","getLastRow","getFirstPosition","getEndPosition","getMaxCharacterIndex","rangeForRow","characterIndexForPosition","positionForCharacterIndex","clipRange","clipPosition","save","saveAs","reload"]},"TextEditor":{"properties":[],"methods":["onDidChangeTitle","onDidChangePath","onDidChange","onDidStopChanging","onDidChangeCursorPosition","onDidChangeSelectionRange","onDidChangeSoftWrapped","onDidChangeEncoding","observeGrammar","onDidChangeGrammar","onDidChangeModified","onDidConflict","onWillInsertText","onDidInsertText","onDidSave","onDidDestroy","observeCursors","onDidAddCursor","onDidRemoveCursor","observeSelections","onDidAddSelection","onDidRemoveSelection","observeDecorations","onDidAddDecoration","onDidRemoveDecoration","onDidChangePlaceholderText","getTitle","getLongTitle","getPath","getEncoding","setEncoding","isModified","isEmpty","save","saveAs","getText","getTextInBufferRange","getLineCount","getScreenLineCount","getLastBufferRow","getLastScreenRow","lineTextForBufferRow","lineTextForScreenRow","getCurrentParagraphBufferRange","setText","setTextInBufferRange","insertText","insertNewline","delete","backspace","mutateSelectedText","transpose","upperCase","lowerCase","toggleLineCommentsInSelection","insertNewlineBelow","insertNewlineAbove","deleteToBeginningOfWord","deleteToBeginningOfLine","deleteToEndOfLine","deleteToEndOfWord","deleteLine","undo","redo","transact","abortTransaction","createCheckpoint","revertToCheckpoint","groupChangesSinceCheckpoint","screenPositionForBufferPosition","bufferPositionForScreenPosition","screenRangeForBufferRange","bufferRangeForScreenRange","clipBufferPosition","clipBufferRange","clipScreenPosition","decorateMarker","decorationsForScreenRowRange","getDecorations","getLineDecorations","getLineNumberDecorations","getHighlightDecorations","getOverlayDecorations","markBufferRange","markScreenRange","markBufferPosition","markScreenPosition","findMarkers","getMarker","getMarkers","getMarkerCount","getCursorBufferPosition","getCursorBufferPositions","setCursorBufferPosition","getCursorScreenPosition","getCursorScreenPositions","setCursorScreenPosition","addCursorAtBufferPosition","addCursorAtScreenPosition","hasMultipleCursors","moveUp","moveDown","moveLeft","moveRight","moveToBeginningOfLine","moveToBeginningOfScreenLine","moveToFirstCharacterOfLine","moveToEndOfLine","moveToEndOfScreenLine","moveToBeginningOfWord","moveToEndOfWord","moveToTop","moveToBottom","moveToBeginningOfNextWord","moveToPreviousWordBoundary","moveToNextWordBoundary","moveToBeginningOfNextParagraph","moveToBeginningOfPreviousParagraph","getLastCursor","getWordUnderCursor","getCursors","getCursorsOrderedByBufferPosition","getSelectedText","getSelectedBufferRange","getSelectedBufferRanges","setSelectedBufferRange","setSelectedBufferRanges","getSelectedScreenRange","getSelectedScreenRanges","setSelectedScreenRange","setSelectedScreenRanges","addSelectionForBufferRange","addSelectionForScreenRange","selectToBufferPosition","selectToScreenPosition","selectUp","selectDown","selectLeft","selectRight","selectToTop","selectToBottom","selectAll","selectToBeginningOfLine","selectToFirstCharacterOfLine","selectToEndOfLine","selectToBeginningOfWord","selectToEndOfWord","selectLinesContainingCursors","selectWordsContainingCursors","selectToPreviousWordBoundary","selectToNextWordBoundary","selectToBeginningOfNextWord","selectToBeginningOfNextParagraph","selectToBeginningOfPreviousParagraph","selectMarker","getLastSelection","getSelections","getSelectionsOrderedByBufferPosition","selectionIntersectsBufferRange","scan","scanInBufferRange","backwardsScanInBufferRange","getSoftTabs","setSoftTabs","toggleSoftTabs","getTabLength","setTabLength","usesSoftTabs","getTabText","isSoftWrapped","setSoftWrapped","toggleSoftWrapped","getSoftWrapColumn","indentationForBufferRow","setIndentationForBufferRow","indentSelectedRows","outdentSelectedRows","indentLevelForLine","autoIndentSelectedRows","getGrammar","setGrammar","getRootScopeDescriptor","scopeDescriptorForBufferPosition","bufferRangeForScopeAtCursor","isBufferRowCommented","copySelectedText","cutSelectedText","pasteText","cutToEndOfLine","foldCurrentRow","unfoldCurrentRow","foldBufferRow","unfoldBufferRow","foldSelectedLines","foldAll","unfoldAll","foldAllAtIndentLevel","isFoldableAtBufferRow","isFoldableAtScreenRow","toggleFoldAtBufferRow","isFoldedAtCursorRow","isFoldedAtBufferRow","isFoldedAtScreenRow","scrollToCursorPosition","scrollToBufferPosition","scrollToScreenPosition","scrollToTop","scrollToBottom","getPlaceholderText","setPlaceholderText"]},"ThemeManager":{"properties":[],"methods":["onDidChangeActiveThemes","getLoadedThemeNames","getLoadedThemes","getActiveThemeNames","getActiveThemes","getEnabledThemeNames"]},"TooltipManager":{"properties":[],"methods":["add"]},"ViewRegistry":{"properties":[],"methods":["addViewProvider","getView"]},"Workspace":{"properties":[],"methods":["observeTextEditors","observePaneItems","onDidChangeActivePaneItem","observeActivePaneItem","onDidOpen","onDidAddPane","onDidDestroyPane","observePanes","onDidChangeActivePane","observeActivePane","onDidAddPaneItem","onWillDestroyPaneItem","onDidDestroyPaneItem","onDidAddTextEditor","open","reopenItem","addOpener","getPaneItems","getActivePaneItem","getTextEditors","getActiveTextEditor","getPanes","getActivePane","activateNextPane","activatePreviousPane","paneForURI","paneForItem","getBottomPanels","addBottomPanel","getLeftPanels","addLeftPanel","getRightPanels","addRightPanel","getTopPanels","addTopPanel","getModalPanels","addModalPanel","panelForItem","scan","replace"]}}
6 changes: 6 additions & 0 deletions lib/main.coffee
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
provider = require './provider'

module.exports =
activate: -> provider.loadCompletions()

getProvider: -> providers: [provider]
60 changes: 60 additions & 0 deletions lib/provider.coffee
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
fs = require 'fs'
path = require 'path'

propertyPrefixPattern = /(?:^|\[|\(|,|=|:)\s*atom\.(?:[a-zA-Z]+\.?){0,2}$/

module.exports =
selector: '.source.coffee, .source.js'
id: 'autocomplete-atom-api-atomapiprovider'

constructor: ->
@completions = {}

requestHandler: ({cursor, editor, prefix}) ->
completions = []
line = editor.lineTextForBufferRow(cursor.getBufferRow())
@getCompletions(line)

loadCompletions: ->
fs.readFile path.resolve(__dirname, '..', 'completions.json'), (error, content) =>
return if error?

@completions = {}
classes = JSON.parse(content)
@loadProperty('atom', 'Atom', classes)
return

getCompletions: (line) ->
completions = []
match = propertyPrefixPattern.exec(line)?[0]
return completions unless match

segments = match.split('.')
prefix = segments.pop() ? ''
segments = segments.filter (segment) -> segment
property = segments[segments.length - 1]
propertyCompletions = @completions[property]?.completions ? []
for completion in propertyCompletions when completion.name.indexOf(prefix) is 0
completions.push({word: completion.name, label: completion.type, prefix})

completions

isVisible: (visibility) ->
visibility in ['Essential', 'Extended', 'Public']

getPropertyClass: (name) ->
atom[name]?.constructor?.name

loadProperty: (propertyName, className, classes, parent) ->
classDetails = classes[className]
return unless classDetails?

@completions[propertyName] = completions: []

for name in classDetails?.properties
@completions[propertyName].completions.push({name: name, type: 'property'})
propertyClass = @getPropertyClass(name)
@loadProperty(name, propertyClass, classes)

for name in classDetails?.methods
@completions[propertyName].completions.push({name, type: 'method'})
18 changes: 18 additions & 0 deletions package.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
{
"name": "autocomplete-atom-api",
"version": "0.0.0",
"description": "Atom API autocompletions",
"main": "./lib/main",
"license": "MIT",
"repository": "https://github.com/atom/autocomplete-atom-api",
"providedServices": {
"autocomplete.provider": {
"versions": {
"1.1.0": "getProvider"
}
}
},
"devDependencies": {
"request": "^2.53.0"
}
}
43 changes: 43 additions & 0 deletions update.coffee
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
# Run this to update the static list of properties stored in the
# completions.json file at the root of this repository.

path = require 'path'
fs = require 'fs'
request = require 'request'

requestOptions =
url: 'https://api.github.com/repos/atom/atom/releases/latest'
json: true
headers:
'User-Agent': 'agent'

request requestOptions, (error, response, release) ->
if error?
console.error(error.message)
return process.exit(1)

[apiAsset] = release.assets.filter ({name}) -> name is 'atom-api.json'

unless apiAsset?.browser_download_url
console.error('No atom-api.json asset found in latest release')
return process.exit(1)

apiRequestOptions =
json: true
url: apiAsset.browser_download_url

request apiRequestOptions, (error, response, atomApi) ->
{classes} = atomApi

publicClasses = {}
for name, {instanceProperties, instanceMethods} of classes
properties = instanceProperties.filter(isVisible).map ({name}) -> name
methods = instanceMethods.filter(isVisible).map ({name}) -> name

if properties?.length > 0 or methods.length > 0
publicClasses[name] = {properties, methods}

fs.writeFileSync('completions.json', JSON.stringify(publicClasses))

isVisible = ({visibility}) ->
visibility in ['Essential', 'Extended', 'Public']

0 comments on commit 98506e8

Please sign in to comment.