agrc / amdbutler Goto Github PK
View Code? Open in Web Editor NEWA Sublime Text 3 plugin for managing AMD dependencies.
License: MIT License
A Sublime Text 3 plugin for managing AMD dependencies.
License: MIT License
Could also listen for new file events and add those to the list.
Crawl on project start up.
http://docs.travis-ci.com/user/multi-os/
Don't forget to update readme build status table.
Grunt bump
At least a build_steps.md
that shows what you need to do.
The preference in AmdButler.sublime-settings is named amd_packages_base_path but is referenced as amd_butler_packages_base_path in amdbutler.py.
OSX is speedy but windows takes more than a few seconds to crawl on a larger project.
This looks promising: https://github.com/benhoyt/scandir
But want to wait for dependency management with package control v3 first.
Remove _TemplatedMixin
from this:
define([
'agrc/modules/HelperFunctions',
'dijit/Dialog',
'dijit/_TemplatedMixin',
'dijit/_WidgetBase',
'dijit/_WidgetsInTemplateMixin',
'dojo/_base/array',
'dojo/_base/declare',
'dojo/_base/lang',
'dojo/io/script',
'dojo/json',
'dojo/text!app/templates/Feedback.html',
'esri/layers/ArcGISTiledMapServiceLayer',
'esri/map',
'ijit/widgets/notify/ChangeRequest',
'dijit/form/Button',
'dijit/form/Form',
'dijit/form/RadioButton',
'dijit/form/Textarea',
'dijit/form/ValidationTextBox',
'dijit/layout/ContentPane',
'dijit/layout/StackContainer',
'dojox/validate/regexp'
],
function (
helpers,
Dialog,
_TemplatedMixin,
_WidgetBase,
_WidgetsInTemplateMixin,
array,
declare,
lang,
script,
dojoJson,
template,
ArcGISTiledMapServiceLayer,
Map,
ChangeRequest
) {});
add and sort commands
x-y-z was turned into xY. I would expected xYZ
On a new project that doesn't have a base path setting, after typing in the value in the prompt, the quick list does not show up.
Prune unused imports command to clean things up after refactoring.
Populate quick panel with existing imports.
No matter what version/build of Sublime Text 3 for Windows I try to install (x86/x64, portable/full, dev/stable/old, etc.), I can't seem to get AMD Butler to work with it (I've tried older versions of AMD Butler as well). After installing Sublime, I install Package Control, and then from Package Control I install AMD Butler and it says it installs successfully, but no AMD Butler commands ever show up in the command palette. I've tried this on multiple Windows 7 machines with the same result.
There are no errors in the console - it just shows these lines on loading:
reloading plugin AMD Butler.init
reloading plugin AMD Butler.amdbutler
reloading plugin AMD Butler.buffer_parser
reloading plugin AMD Butler.crawler
reloading plugin AMD Butler.zipper
should amd butler remove references to items in the
declare([], {
if they are removed.
Hi i have a problem
import Adafruit_CharLCD
when importing this address gives me this error
ModuleNotFoundError: No module named 'Adafruit_GPIO.I2C'
Doesn't parse the package names correctly. Gives the full path. Need to figure out how to deal with slashes.
this would be pretty awesome.
What do you think of a new setting to disable blank lines addition (purely a personal styling preference which doesn't do well with other style guides as it currently is)?
define([
'./config',
'dijit/_TemplatedMixin',
'dijit/_WidgetBase',
'dojo/_base/array',
'dojo/_base/declare',
'dojo/_base/lang',
'dojo/query',
'dojo/request',
'dojo/text!./templates/Identify.html',
'proj4/dist/amd/proj4.js',
'xstyle/css!app/resources/Identify.css'
], function(
config,
_TemplatedMixin,
_WidgetBase,
array,
declare,
lang,
query,
request,
template
) {});
remove proj4...
define([
'./config',
'dijit/_TemplatedMixin',
'dijit/_WidgetBase',
'dojo/_base/array',
'dojo/_base/declare',
'dojo/_base/lang',
'dojo/query',
'dojo/request',
'dojo/text!./templates/Identify.html',
'xstyle/css!app/resources/Identify.css'
], function(
config,
_TemplatedMixin,
_WidgetBase,
array,
declare,
lang,
query,
request,
template,
) {});
Hi when I solved the issue #23
When trying to add a module I am getting on the log console:
Traceback (most recent call last):
File "C:\Program Files\Sublime Text 3\sublime_plugin.py", line 268, in on_modified
v = sublime.View(view_id)
File "C:\Program Files\Sublime Text 3\sublime.py", line 549, in init
self.selection = Selection(id)
RuntimeError: maximum recursion depth exceeded
TypeError: () takes 0 positional arguments but 1 was given
TypeError: () takes 0 positional arguments but 1 was given
TypeError: () takes 0 positional arguments but 1 was given
TypeError: () takes 0 positional arguments but 1 was given
TypeError: () takes 0 positional arguments but 1 was given
TypeError: () takes 0 positional arguments but 1 was given
TypeError: () takes 0 positional arguments but 1 was given
TypeError: () takes 0 positional arguments but 1 was given
TypeError: () takes 0 positional arguments but 1 was given
TypeError: () takes 0 positional arguments but 1 was given
error: plugin_host has exited unexpectedly, plugin functionality won't be available until Sublime Text has been restarted
And the plugin stops.
I though it was because I didn't set the path to the dojo api. But I set it and I am getting the same error.
I am running in the same environment as described on issue #23 .
UPDATE:
When solving issue #23 this issue disappeared.
UPDATE:
This error occurred because there where no modules loaded in memory. If we run the refresh modules once this error should not occur even if the refresh did not load any module.
UPDATE:
Turns out this error was isolated from #23... It was a recursion problem on amdbutlet.py
class AmdButlerAdd(_Enabled, sublime_plugin.TextCommand):
def run(self, edit):
if not hasattr(self.view, 'mods'):
_set_mods(self.view)
#self.view.run_command('amd_butler_add')
else:
self.view.window().show_quick_panel(self.view.mods, self.on_mod_selected)
def on_mod_selected(self, i):
if i != -1:
pair = self.view.mods[i]
self.view.run_command('amd_butler_internal_add',{'pair': pair})
The call to _set_mods(self.view) is not synchronous! So a recursion issue will occur if self.view.run_command('amd_butler_add') was not commented.
I also changed
sublime.active_window().show_input_panel('name of folder containing AMD packages (e.g. "src")', '', on_folder_defined, lambda: None, lambda: None)
to
sublime.active_window().show_input_panel('name of folder containing AMD packages (e.g. "src")', '', on_folder_defined, None, None)
The first version was giving me some warning on the console:
TypeError: <lambda>() takes 0 positional arguments but 1 was given
UPDATE:
The previous fix would work but to make the preferences really work it was need some more tweaks. Ieave my version of the amdbutler.py hear in base64 utf8.
aW1wb3J0IHN1YmxpbWUNCmltcG9ydCBzdWJsaW1lX3BsdWdpbg0KaW1wb3J0IG9zDQpmcm9tIC4gaW1wb3J0IGJ1ZmZlcl9wYXJzZXINCmZyb20gLiBpbXBvcnQgY3Jhd2xlcg0KZnJvbSAuIGltcG9ydCB6aXBwZXINCg0KDQpQQVRIX1NFVFRJTkdfTkFNRSA9ICdhbWRfcGFja2FnZXNfYmFzZV9wYXRoJw0KU0VUVElOR1NfRklMRV9OQU1FID0gJ0FtZEJ1dGxlci5zdWJsaW1lLXNldHRpbmdzJw0KDQoNCmRlZiBfYWxsX3RleHQodmlldyk6DQogICAgcmV0dXJuIHZpZXcuc3Vic3RyKHN1YmxpbWUuUmVnaW9uKDAsIHZpZXcuc2l6ZSgpKSkNCg0KDQpkZWYgX2dldF9zb3J0ZWRfcGFpcnModmlldyk6DQogICAgdHJ5Og0KICAgICAgICBpbXBvcnRzX3NwYW4gPSBidWZmZXJfcGFyc2VyLmdldF9pbXBvcnRzX3NwYW4oX2FsbF90ZXh0KHZpZXcpKQ0KICAgICAgICBwYXJhbXNfc3BhbiA9IGJ1ZmZlcl9wYXJzZXIuZ2V0X3BhcmFtc19zcGFuKF9hbGxfdGV4dCh2aWV3KSkNCiAgICAgICAgcmV0dXJuIHppcHBlci56aXAodmlldy5zdWJzdHIoc3VibGltZS5SZWdpb24oKmltcG9ydHNfc3BhbikpLA0KICAgICAgICAgICAgICAgICAgICAgICAgICB2aWV3LnN1YnN0cihzdWJsaW1lLlJlZ2lvbigqcGFyYW1zX3NwYW4pKSkNCiAgICBleGNlcHQgYnVmZmVyX3BhcnNlci5QYXJzZUVycm9yIGFzIGVyOg0KICAgICAgICBzdWJsaW1lLmVycm9yX21lc3NhZ2UoZXIubWVzc2FnZSkNCg0KDQpkZWYgX3VwZGF0ZV93aXRoX3BhaXJzKHZpZXcsIGVkaXQsIHBhaXJzKToNCiAgICBpbXBvcnRzX3NwYW4gPSBidWZmZXJfcGFyc2VyLmdldF9pbXBvcnRzX3NwYW4oX2FsbF90ZXh0KHZpZXcpKQ0KICAgIHBhcmFtc19zcGFuID0gYnVmZmVyX3BhcnNlci5nZXRfcGFyYW1zX3NwYW4oX2FsbF90ZXh0KHZpZXcpKQ0KDQogICAgIyByZXBsYWNlIHBhcmFtcyAtIGRvIHRoZXNlIGZpcnN0IHNpbmNlIHRoZXkgd29uJ3QgYWZmZWN0IHRoZQ0KICAgICMgaW1wb3J0cyByZWdpb24NCiAgICBwYXJhbXNfdHh0ID0gemlwcGVyLmdlbmVyYXRlX3BhcmFtc190eHQocGFpcnMsICdcdCcpDQogICAgdmlldy5yZXBsYWNlKGVkaXQsIHN1YmxpbWUuUmVnaW9uKCpwYXJhbXNfc3BhbiksIHBhcmFtc190eHQpDQoNCiAgICAjIHJlcGxhY2UgaW1wb3J0cw0KICAgIGltcG9ydF90eHQgPSB6aXBwZXIuZ2VuZXJhdGVfaW1wb3J0c190eHQocGFpcnMsICdcdCcpDQogICAgdmlldy5yZXBsYWNlKGVkaXQsIHN1YmxpbWUuUmVnaW9uKCppbXBvcnRzX3NwYW4pLCBpbXBvcnRfdHh0KQ0KDQpkZWYgb25fZm9sZGVyX2RlZmluZWQodmlldyk6DQogICAgZGVmIG9uX2ZvbGRlcl9kZWZpbmVkX2NvbXB1dGVkKHR4dCk6DQogICAgICAgIHByb2plY3QgPSBfZ2V0X3Byb2plY3RfZGF0YSgpDQogICAgICAgIGlmIHByb2plY3QgaXMgTm9uZToNCiAgICAgICAgICAgICMgbm8gcHJvamVjdCBvcGVuIHVzZSBkZWZhdWx0IHNldHRpbmcNCiAgICAgICAgICAgIHNldHRpbmdzID0gc3VibGltZS5sb2FkX3NldHRpbmdzKFNFVFRJTkdTX0ZJTEVfTkFNRSkNCiAgICAgICAgICAgIHNldHRpbmdzLnNldChQQVRIX1NFVFRJTkdfTkFNRSwgdHh0KQ0KICAgICAgICAgICAgc3VibGltZS5zYXZlX3NldHRpbmdzKFNFVFRJTkdTX0ZJTEVfTkFNRSkNCiAgICAgICAgZWxzZToNCiAgICAgICAgICAgIHByb2plY3RbJ3NldHRpbmdzJ10udXBkYXRlKHtQQVRIX1NFVFRJTkdfTkFNRTogdHh0fSkNCiAgICAgICAgICAgIF9zYXZlX3Byb2plY3RfZGF0YShwcm9qZWN0KQ0KICAgICAgICBfZ2V0X2F2YWlsYWJsZV9pbXBvcnRzKHZpZXcpDQogICAgcmV0dXJuIG9uX2ZvbGRlcl9kZWZpbmVkX2NvbXB1dGVkDQoJDQpkZWYgX3NldF9tb2RzKHZpZXcpOg0KICAgIA0KCQkNCiAgICBwcm9qZWN0ID0gX2dldF9wcm9qZWN0X2RhdGEoKQ0KCQ0KICAgICMgY3JlYXRlIHNldHRpbmdzIHByb2plY3QgcHJvcCBpZiBuZWVkZWQNCiAgICBpZiBwcm9qZWN0IGlzIG5vdCBOb25lIGFuZCBwcm9qZWN0LmdldCgnc2V0dGluZ3MnLCBGYWxzZSkgaXMgRmFsc2U6DQogICAgICAgIHByb2plY3QudXBkYXRlKHsnc2V0dGluZ3MnOiB7UEFUSF9TRVRUSU5HX05BTUU6IEZhbHNlfX0pDQogICAgICAgIF9zYXZlX3Byb2plY3RfZGF0YShwcm9qZWN0KQ0KICAgIA0KICAgIGlmIHByb2plY3QgaXMgbm90IE5vbmUgYW5kIHByb2plY3RbJ3NldHRpbmdzJ10uZ2V0KFBBVEhfU0VUVElOR19OQU1FLCBGYWxzZSkgaXMgbm90IEZhbHNlOg0KICAgICAgICBfZ2V0X2F2YWlsYWJsZV9pbXBvcnRzKHZpZXcpDQogICAgZWxzZToNCiAgICAgICAgI3N1YmxpbWUuYWN0aXZlX3dpbmRvdygpLnNob3dfaW5wdXRfcGFuZWwoJ25hbWUgb2YgZm9sZGVyIGNvbnRhaW5pbmcgQU1EIHBhY2thZ2VzIChlLmcuICJzcmMiKScsICcnLCBvbl9mb2xkZXJfZGVmaW5lZCwgbGFtYmRhOiBOb25lLCBsYW1iZGE6IE5vbmUpDQogICAgICAgIHN1YmxpbWUuYWN0aXZlX3dpbmRvdygpLnNob3dfaW5wdXRfcGFuZWwoJ25hbWUgb2YgZm9sZGVyIGNvbnRhaW5pbmcgQU1EIHBhY2thZ2VzIChlLmcuICJzcmMiKScsICcnLCBvbl9mb2xkZXJfZGVmaW5lZCh2aWV3KSwgTm9uZSwgTm9uZSkNCg0KZGVmIF9nZXRfYXZhaWxhYmxlX2ltcG9ydHModmlldyk6DQogICAgcHJvamVjdCA9IF9nZXRfcHJvamVjdF9kYXRhKCkNCiAgICBpZiBwcm9qZWN0IGlzIE5vbmU6DQogICAgICAgIHNldHRpbmdzID0gc3VibGltZS5sb2FkX3NldHRpbmdzKFNFVFRJTkdTX0ZJTEVfTkFNRSkNCiAgICAgICAgZm9sZGVyX25hbWUgPSBzZXR0aW5ncy5nZXQoUEFUSF9TRVRUSU5HX05BTUUpDQogICAgICAgIHBhdGggPSBfdmFsaWRhdGVfZm9sZGVyKHZpZXcsIGZvbGRlcl9uYW1lKQ0KICAgICAgICBpZiBwYXRoIGlzIE5vbmU6DQogICAgICAgICAgICBzZXR0aW5ncy5lcmFzZShQQVRIX1NFVFRJTkdfTkFNRSkNCiAgICAgICAgICAgIHN1YmxpbWUuc2F2ZV9zZXR0aW5ncyhTRVRUSU5HU19GSUxFX05BTUUpDQogICAgICAgICAgICByZXR1cm4NCiAgICBlbHNlOg0KICAgICAgICBzZXR0aW5ncyA9IHByb2plY3RbJ3NldHRpbmdzJ10NCiAgICAgICAgZm9sZGVyX25hbWUgPSBzZXR0aW5nc1tQQVRIX1NFVFRJTkdfTkFNRV0NCiAgICAgICAgcGF0aCA9IF92YWxpZGF0ZV9mb2xkZXIodmlldywgZm9sZGVyX25hbWUpDQogICAgICAgIGlmIHBhdGggaXMgTm9uZToNCiAgICAgICAgICAgIGRlbCBzZXR0aW5nc1tQQVRIX1NFVFRJTkdfTkFNRV0NCiAgICAgICAgICAgIF9zYXZlX3Byb2plY3RfZGF0YShwcm9qZWN0KQ0KDQogICAgc3VibGltZS5zdGF0dXNfbWVzc2FnZSgnQU1EIEJ1dGxlcjogUHJvY2Vzc2luZyBtb2R1bGVzIGluIHt9IC4uLicuZm9ybWF0KHBhdGgpKQ0KICAgIHZpZXcubW9kcyA9IGNyYXdsZXIuY3Jhd2wocGF0aCkNCiAgICBzdWJsaW1lLnN0YXR1c19tZXNzYWdlKCdBTUQgQnV0bGVyOiBQcm9jZXNzaW5nIGNvbXBsZXRlLiB7fSB0b3RhbCBtb2R1bGVzIHByb2Nlc3NlZC4nLmZvcm1hdChsZW4odmlldy5tb2RzKSkpDQoNCg0KZGVmIF92YWxpZGF0ZV9mb2xkZXIodmlldywgZm9sZGVyX25hbWUpOg0KICAgIA0KICAgICNSRUxBVElWRSBQQVRIDQogICAgDQogICAgI2lmKHZpZXcuZmlsZV9uYW1lKCkgaXMgTm9uZSk6DQogICAgIyAgICBzdWJsaW1lLmVycm9yX21lc3NhZ2UoJ0Nhbm5vdCB2YWxpZGF0ZSAiJytmb2xkZXJfbmFtZSsnIi4gRmlsZSBuYW1lIGlzIG5vdCBzYXZlZCEnKQ0KICAgICMgICAgcmV0dXJuIE5vbmUNCiAgICANCiAgICAjRXJyb3IgI3BhdGggPSBvcy5wYXRoLmpvaW4odmlldy5maWxlX25hbWUoKS5zcGxpdChmb2xkZXJfbmFtZSlbMF0sZm9sZGVyX25hbWUpDQogICAgI3BhdGggPSBvcy5wYXRoLmpvaW4ob3MucGF0aC5kaXJuYW1lKHZpZXcuZmlsZV9uYW1lKCkpLGZvbGRlcl9uYW1lKQ0KICAgIA0KICAgICNBQlNPTFVURSBQQVRIDQogICAgcGF0aCA9IGZvbGRlcl9uYW1lDQogICAgDQogICAgaWYgb3MucGF0aC5leGlzdHMocGF0aCk6DQogICAgICAgIHJldHVybiBwYXRoDQogICAgZWxzZToNCiAgICAgICAgc3VibGltZS5lcnJvcl9tZXNzYWdlKCdDb3VsZCBub3QgZmluZDoge30hJy5mb3JtYXQocGF0aCkpDQogICAgICAgIHJldHVybiBOb25lDQoNCg0KZGVmIF9nZXRfcHJvamVjdF9kYXRhKCk6DQogICAgcmV0dXJuIHN1YmxpbWUuYWN0aXZlX3dpbmRvdygpLnByb2plY3RfZGF0YSgpDQoNCg0KZGVmIF9zYXZlX3Byb2plY3RfZGF0YShkYXRhKToNCiAgICByZXR1cm4gc3VibGltZS5hY3RpdmVfd2luZG93KCkuc2V0X3Byb2plY3RfZGF0YShkYXRhKQ0KDQoNCmNsYXNzIF9FbmFibGVkKG9iamVjdCk6DQogICAgZGVmIGlzX2VuYWJsZWQoc2VsZik6DQogICAgICAgIHJldHVybiBzZWxmLnZpZXcuc2V0dGluZ3MoKS5nZXQoJ3N5bnRheCcpLmZpbmQoJ0phdmFTY3JpcHQnKSAhPSAtMQ0KDQoNCmNsYXNzIEFtZEJ1dGxlclNvcnQoX0VuYWJsZWQsIHN1YmxpbWVfcGx1Z2luLlRleHRDb21tYW5kKToNCiAgICBkZWYgcnVuKHNlbGYsIGVkaXQpOg0KICAgICAgICBfdXBkYXRlX3dpdGhfcGFpcnMoc2VsZi52aWV3LCBlZGl0LCBfZ2V0X3NvcnRlZF9wYWlycyhzZWxmLnZpZXcpKQ0KDQoNCmNsYXNzIEFtZEJ1dGxlckFkZChfRW5hYmxlZCwgc3VibGltZV9wbHVnaW4uVGV4dENvbW1hbmQpOg0KICAgIGRlZiBydW4oc2VsZiwgZWRpdCk6DQogICAgICAgICNpZiBub3QgaGFzYXR0cihzZWxmLnZpZXcsICdtb2RzJyk6DQogICAgICAgICMgICAgX3NldF9tb2RzKHNlbGYudmlldykNCiAgICAgICAgIyAgICAjc2VsZi52aWV3LnJ1bl9jb21tYW5kKCdhbWRfYnV0bGVyX2FkZCcpDQogICAgICAgICNlbHNlOg0KICAgICAgICAjICAgIHNlbGYudmlldy53aW5kb3coKS5zaG93X3F1aWNrX3BhbmVsKHNlbGYudmlldy5tb2RzLCBzZWxmLm9uX21vZF9zZWxlY3RlZCkNCiAgICAgICAgaWYgbm90IGhhc2F0dHIoc2VsZi52aWV3LCAnbW9kcycpOg0KICAgICAgICAgICAgb25fZm9sZGVyX2RlZmluZWQoc2VsZi52aWV3KShzdWJsaW1lLmxvYWRfc2V0dGluZ3MoU0VUVElOR1NfRklMRV9OQU1FKS5nZXQoUEFUSF9TRVRUSU5HX05BTUUpKQ0KICAgICAgICANCiAgICAgICAgc2VsZi52aWV3LndpbmRvdygpLnNob3dfcXVpY2tfcGFuZWwoc2VsZi52aWV3Lm1vZHMsIHNlbGYub25fbW9kX3NlbGVjdGVkKQ0KCQkNCg0KICAgIGRlZiBvbl9tb2Rfc2VsZWN0ZWQoc2VsZiwgaSk6DQogICAgICAgIGlmIGkgIT0gLTE6DQogICAgICAgICAgICBwYWlyID0gc2VsZi52aWV3Lm1vZHNbaV0NCiAgICAgICAgICAgIHNlbGYudmlldy5ydW5fY29tbWFuZCgnYW1kX2J1dGxlcl9pbnRlcm5hbF9hZGQnLHsncGFpcic6IHBhaXJ9KQ0KDQoNCmNsYXNzIEFtZEJ1dGxlclJlbW92ZShfRW5hYmxlZCwgc3VibGltZV9wbHVnaW4uVGV4dENvbW1hbmQpOg0KICAgIGRlZiBydW4oc2VsZiwgZWRpdCk6DQogICAgICAgIHNlbGYucGFpcnMgPSBfZ2V0X3NvcnRlZF9wYWlycyhzZWxmLnZpZXcpDQoNCiAgICAgICAgc2VsZi52aWV3LndpbmRvdygpLnNob3dfcXVpY2tfcGFuZWwoDQogICAgICAgICAgICB6aXBwZXIuc2NydWJfbm9uZXMoc2VsZi5wYWlycyksIHNlbGYub25fbW9kX3NlbGVjdGVkKQ0KDQogICAgZGVmIG9uX21vZF9zZWxlY3RlZChzZWxmLCBpKToNCiAgICAgICAgaWYgaSAhPSAtMToNCiAgICAgICAgICAgIHNlbGYucGFpcnMucG9wKGkpDQogICAgICAgICAgICBzZWxmLnZpZXcucnVuX2NvbW1hbmQoJ2FtZF9idXRsZXJfaW50ZXJuYWxfdXBkYXRlJywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7J3BhaXJzJzogc2VsZi5wYWlyc30pDQoNCg0KY2xhc3MgQW1kQnV0bGVySW50ZXJuYWxVcGRhdGUoX0VuYWJsZWQsIHN1YmxpbWVfcGx1Z2luLlRleHRDb21tYW5kKToNCiAgICBkZWYgcnVuKHNlbGYsIGVkaXQsIHBhaXJzKToNCiAgICAgICAgX3VwZGF0ZV93aXRoX3BhaXJzKHNlbGYudmlldywgZWRpdCwgcGFpcnMpDQoNCg0KY2xhc3MgQW1kQnV0bGVySW50ZXJuYWxBZGQoX0VuYWJsZWQsIHN1YmxpbWVfcGx1Z2luLlRleHRDb21tYW5kKToNCiAgICBkZWYgcnVuKHNlbGYsIGVkaXQsIHBhaXI9JycpOg0KICAgICAgICAjIGFkZCBwYXJhbSBmaXJzdA0KICAgICAgICB0cnk6DQogICAgICAgICAgICBwYXJhbXNfcG9pbnQgPSBidWZmZXJfcGFyc2VyLmdldF9wYXJhbXNfc3BhbigNCiAgICAgICAgICAgICAgICBfYWxsX3RleHQoc2VsZi52aWV3KSlbMF0NCiAgICAgICAgICAgIHNlbGYudmlldy5pbnNlcnQoZWRpdCwgcGFyYW1zX3BvaW50LCBwYWlyWzFdICsgJywnKQ0KDQogICAgICAgICAgICBpbXBvcnRzX3BvaW50ID0gYnVmZmVyX3BhcnNlci5nZXRfaW1wb3J0c19zcGFuKA0KICAgICAgICAgICAgICAgIF9hbGxfdGV4dChzZWxmLnZpZXcpKVswXQ0KICAgICAgICAgICAgc2VsZi52aWV3Lmluc2VydChlZGl0LCBpbXBvcnRzX3BvaW50LCAnXCd7fVwnLCcuZm9ybWF0KHBhaXJbMF0pKQ0KICAgICAgICBleGNlcHQgYnVmZmVyX3BhcnNlci5QYXJzZUVycm9yIGFzIGVyOg0KICAgICAgICAgICAgc3VibGltZS5lcnJvcl9tZXNzYWdlKGVyLm1lc3NhZ2UpDQoNCiAgICAgICAgc2VsZi52aWV3LnJ1bl9jb21tYW5kKCdhbWRfYnV0bGVyX3NvcnQnKQ0KDQoNCmNsYXNzIEFtZEJ1dGxlclJlZnJlc2goX0VuYWJsZWQsIHN1YmxpbWVfcGx1Z2luLlRleHRDb21tYW5kKToNCiAgICBkZWYgcnVuKHNlbGYsIGVkaXQpOg0KICAgICAgICBfc2V0X21vZHMoc2VsZi52aWV3KQ0K
Change
def _validate_folder(view, folder_name):
path = os.path.join(view.file_name().split(folder_name)[0],folder_name)
if os.path.exists(path):
return path
else:
sublime.error_message('Could not find: {}!'.format(path))
return None
to
def _validate_folder(view, folder_name):
if(view.file_name() is None):
sublime.error_message('Cannot validate "'+folder_name+'". File is not saved!')
return None
path = os.path.join(view.file_name().split(folder_name)[0],folder_name)
if os.path.exists(path):
return path
else:
sublime.error_message('Could not find: {}!'.format(path))
return None
UPDATE:
See issue #26
Change to
def _validate_folder(view, folder_name):
#path = os.path.join(view.file_name().split(folder_name)[0],folder_name)
path = os.path.join(os.path.dirname(view.file_name()),folder_name)
if os.path.exists(path):
return path
else:
sublime.error_message('Could not find: {}!'.format(path))
return None
Consider in using absolute path instead is more intuitive:
def _validate_folder(view, folder_name):
path = folder_name
if os.path.exists(path):
return path
else:
sublime.error_message('Could not find: {}!'.format(path))
return None
In this case issue #25 disappeared.
Imported
Importer
AmdButler - serving up modules
AmdWaiter
@steveoh I need creativity help.
i used amd butler to remove all the requires. it left me with
define([
], function (
) {
Then added a module and got
define([
''
'esri/graphicsUtils',
'graphicsUtils'
], function (
) {
Hi, thanks for this plugin!
Not sure if this is an actual issue or not but is seems inconsistent with the other plugins and Sublime settings: on Windows 7 (not tested on another OS) accessing Preferences > Package Settings > AmdButler > Settings - Default shows an empty file instead of what would rather be some JSON listing the two currently supported default settings and their associated values.
Specifically concerned with crawl performance.
Sometimes you just want to remove a lot of cruft.
Can we allow remove to accept a globbing pattern or some sort of wild card syntax for removing multiple imports.
K thanks.
Do we crawl every time?
Try to listen for new files and add them?
Hi,
I was installing your software through the sublime 3 package manager on windows 8.
and I was getting the following error:
ImportError: No module named 'data' in Sublime
as it turns out in your crawler.py there was an error on the import:
from data.js_keywords import *
Doing the following change:
#from data.js_keywords import *
from . import data
And building the package was enough to make it load correctly.
UPDATE:
Ok I made it load correctly but I am getting an error on:
if name in JS_KEYWORDS:
It says JS_KEYWORDS does not exist :/
I think the problem is not the import but the fact sublime is looking for the module somewhere else.
Here is the stack trace:
Traceback (most recent call last):
File "C:\Program Files\Sublime Text 3\sublime_plugin.py", line 71, in reload_plugin
m = imp.reload(m)
File "./imp.py", line 276, in reload
File "C:\Program Files\Sublime Text 3\sublime_plugin.py", line 671, in load_module
exec(compile(source, source_path, 'exec'), mod.__dict__)
File "C:\Users\Rafael\AppData\Roaming\Sublime Text 3\Packages\AMD Butler\crawler.py", line 5, in <module>
from data import js_keywords
I have given up on trying to isolate the JS_KEYWORDS on a module and just copy pasted the content in to the crawler.py. That worked.
Hope it helps. And thank you for your work.
Create some sort of templating system for allowing users to configure how imports are sorted.
examples:
Also, for adding modules that don't show up in the list.
Also, single word imports like stubmodule or jquery.
Also better list of reserved words like window
and string
.
The quick pane allows you use the right arrow key to open multiple files. I wonder if we could use this same UX to allow you to add multiple amd imports with one command invocation.
Good talk.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.