Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
47 changes: 47 additions & 0 deletions Main.sublime-menu
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
[
{
"caption": "Edit",
"mnemonic": "n",
"id": "edit",
"children":
[
{
"caption" : "Php: Format Code",
"command": "php_beautifier"
}
]
},
{
"caption": "Preferences",
"mnemonic": "n",
"id": "preferences",
"children":
[
{
"caption": "Package Settings",
"mnemonic": "P",
"id": "package-settings",
"children":
[
{
"caption": "PhpBeautifier",
"children":
[
{
"command": "open_file",
"args": {"file": "${packages}/PhpBeautifier/PhpBeautifier.sublime-settings"},
"caption": "Settings – Default"
},
{
"command": "open_file",
"args": {"file": "${packages}/User/PhpBeautifier.sublime-settings"},
"caption": "Settings – User"
},
{ "caption": "-" }
]
}
]
}
]
}
]
9 changes: 9 additions & 0 deletions PhpBeautifier.sublime-settings
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
{
"filters" : [
"ArrayNested()",
"NewLines(before=switch:while:for:foreach:T_CLASS:return:break)",
"Pear(add-header=false)"
],
"indent" : "-s4",
"extensions" : ["php"]
}
42 changes: 34 additions & 8 deletions php_beautifier.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,39 +7,49 @@


class PhpBeautifierCommand(sublime_plugin.TextCommand):
def run(self, edit):
def run(self, edit):
# Load settings
settings = sublime.load_settings('PhpBeautifier.sublime-settings')
# Test environment
if self.view.is_scratch():
return

if self.view.is_dirty():
return sublime.status_message("Please save the file.")
return self.error("Please save the file.")

# check if file exists.
FILE = self.view.file_name()
if not FILE or not os.path.exists(FILE):
return self.status("File does not exist.")
return self.error("File {0} does not exist.".format(FILE))

if not FILE[-3:] == 'php':
return self.status("File does not have php extension.")
# check if extension is allowed.
fileName, fileExtension = os.path.splitext(FILE)
if fileExtension[1:] not in settings.get('extensions'):
if not self.missingFileExtension(fileExtension[1:], settings):
return

# Start doing stuff
cmd = "php_beautifier"
indent = "-s4"
filters = "ArrayNested() NewLines(before=switch:while:for:foreach:T_CLASS:return:break) Pear(add-header=false)"

# Load indent and filters settings
indent = settings.get('indent');
filters = ' '.join(settings.get('filters'));

allFile = sublime.Region(0, self.view.size())
AllFileText = self.view.substr(allFile).encode('utf-8')

if os.name == 'nt':
cmd_win = cmd + ".bat"
startupinfo = subprocess.STARTUPINFO()
startupinfo.dwFlags |= subprocess.STARTF_USESHOWWINDOW
startupinfo.wShowWindow = subprocess.SW_HIDE
p = subprocess.Popen([cmd, indent, "-l", filters, "-f", "-", "-o", "-"], stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE, startupinfo=startupinfo)
p = subprocess.Popen([cmd_win, indent, "-l", filters, "-f", "-", "-o", "-"], stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE, startupinfo=startupinfo)
else:
p = subprocess.Popen([cmd, indent, "-l", filters, "-f", "-", "-o", "-"], stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
stdout, stderr = p.communicate(AllFileText)
if len(stderr) == 0:
self.view.replace(edit, allFile, self.fixup(stdout))
self.status("PhpBeautifier: File processed.")
else:
self.show_error_panel(self.fixup(stderr))

Expand All @@ -57,3 +67,19 @@ def show_error_panel(self, stderr):

def fixup(self, string):
return re.sub(r'\r\n|\r', '\n', string.decode('utf-8'))

def status(self, string):
return sublime.status_message(string)

def error(self, string):
return sublime.error_message(string)

def missingFileExtension(self, fileExtension, settings):
if sublime.ok_cancel_dialog("Extension {0} is not a valid php extension. Would you like to add this extension to your preferences?.".format(fileExtension), "Yes, add {0} extension to my preferences".format(fileExtension)):
extensions = settings.get('extensions')
extensions.append(fileExtension)
settings.set('extensions', extensions)
settings = sublime.save_settings('PhpBeautifier.sublime-settings')
return True
return False