mirror of
https://github.com/esp8266/Arduino.git
synced 2025-06-17 22:23:10 +03:00
Introducing Artistic Style: new IDE autoformatter
This commit is contained in:
68
app/src/cc/arduino/packages/formatter/AStyle.java
Normal file
68
app/src/cc/arduino/packages/formatter/AStyle.java
Normal file
@ -0,0 +1,68 @@
|
||||
package cc.arduino.packages.formatter;
|
||||
|
||||
import processing.app.Base;
|
||||
import processing.app.Editor;
|
||||
import processing.app.helpers.FileUtils;
|
||||
import processing.app.tools.Tool;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
|
||||
import static processing.app.I18n._;
|
||||
|
||||
public class AStyle implements Tool {
|
||||
|
||||
private static String FORMATTER_CONF = "formatter.conf";
|
||||
|
||||
private final AStyleInterface aStyleInterface;
|
||||
private final String formatterConfiguration;
|
||||
private Editor editor;
|
||||
|
||||
public AStyle() {
|
||||
this.aStyleInterface = new AStyleInterface();
|
||||
File customFormatterConf = Base.getSettingsFile(FORMATTER_CONF);
|
||||
File defaultFormatterConf = new File(Base.getContentFile("lib"), FORMATTER_CONF);
|
||||
|
||||
File formatterConf;
|
||||
if (customFormatterConf.exists()) {
|
||||
formatterConf = customFormatterConf;
|
||||
} else {
|
||||
formatterConf = defaultFormatterConf;
|
||||
}
|
||||
String formatterConfiguration = "";
|
||||
|
||||
try {
|
||||
formatterConfiguration = FileUtils.readFileToString(formatterConf);
|
||||
} catch (IOException e) {
|
||||
// noop
|
||||
}
|
||||
this.formatterConfiguration = formatterConfiguration;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void init(Editor editor) {
|
||||
this.editor = editor;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void run() {
|
||||
String originalText = editor.getText();
|
||||
String formattedText = aStyleInterface.AStyleMain(originalText, formatterConfiguration);
|
||||
|
||||
if (formattedText.equals(originalText)) {
|
||||
editor.statusNotice(_("No changes necessary for Auto Format."));
|
||||
return;
|
||||
}
|
||||
|
||||
editor.setText(formattedText);
|
||||
editor.getSketch().setModified(true);
|
||||
// mark as finished
|
||||
editor.statusNotice(_("Auto Format finished."));
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getMenuTitle() {
|
||||
return _("Auto Format");
|
||||
}
|
||||
|
||||
}
|
54
app/src/cc/arduino/packages/formatter/AStyleInterface.java
Normal file
54
app/src/cc/arduino/packages/formatter/AStyleInterface.java
Normal file
@ -0,0 +1,54 @@
|
||||
package cc.arduino.packages.formatter;
|
||||
|
||||
import processing.app.Base;
|
||||
|
||||
import java.io.File;
|
||||
|
||||
public class AStyleInterface {
|
||||
|
||||
static {
|
||||
File astyleLib = new File(Base.getContentFile("lib"), System.mapLibraryName("astylej"));
|
||||
String astylePath = astyleLib.getAbsolutePath();
|
||||
try {
|
||||
System.load(astylePath);
|
||||
} catch (UnsatisfiedLinkError e) {
|
||||
e.printStackTrace();
|
||||
System.out.println(e.getMessage());
|
||||
System.out.println("Cannot load native library " + astylePath);
|
||||
System.out.println("The program has terminated!");
|
||||
System.exit(1);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Calls the AStyleMain function in Artistic Style.
|
||||
*
|
||||
* @param textIn A string containing the source code to be formatted.
|
||||
* @param options A string of options to Artistic Style.
|
||||
* @return A String containing the formatted source from Artistic Style.
|
||||
*/
|
||||
public native String AStyleMain(String textIn, String options);
|
||||
|
||||
/**
|
||||
* Calls the AStyleGetVersion function in Artistic Style.
|
||||
*
|
||||
* @return A String containing the version number of Artistic Style.
|
||||
*/
|
||||
public native String AStyleGetVersion();
|
||||
|
||||
/**
|
||||
* Error handler for messages from Artistic Style.
|
||||
* This method is called only if there are errors when AStyleMain is called.
|
||||
* This is for debugging and there should be no errors when the calling
|
||||
* parameters are correct.
|
||||
* Changing the method name requires changing Artistic Style.
|
||||
* Signature: (ILjava/lang/String;)V.
|
||||
*
|
||||
* @param errorNumber The error number from Artistic Style.
|
||||
* @param errorMessage The error message from Artistic Style.
|
||||
*/
|
||||
private void ErrorHandler(int errorNumber, String errorMessage) {
|
||||
System.out.println("AStyle error " + String.valueOf(errorNumber) + " - " + errorMessage);
|
||||
}
|
||||
|
||||
}
|
@ -907,7 +907,7 @@ public class Editor extends JFrame implements RunnerListener {
|
||||
protected JMenu addInternalTools(JMenu menu) {
|
||||
JMenuItem item;
|
||||
|
||||
item = createToolMenuItem("processing.app.tools.AutoFormat");
|
||||
item = createToolMenuItem("cc.arduino.packages.formatter.AStyle");
|
||||
int modifiers = Toolkit.getDefaultToolkit().getMenuShortcutKeyMask();
|
||||
item.setAccelerator(KeyStroke.getKeyStroke('T', modifiers));
|
||||
menu.add(item);
|
||||
|
@ -1,9 +1,6 @@
|
||||
package processing.app.helpers;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.FileInputStream;
|
||||
import java.io.FileOutputStream;
|
||||
import java.io.IOException;
|
||||
import java.io.*;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
import java.util.Random;
|
||||
@ -170,4 +167,25 @@ public class FileUtils {
|
||||
public static boolean isSCCSOrHiddenFile(File file) {
|
||||
return file.isHidden() || file.getName().charAt(0) == '.' || (file.isDirectory() && SOURCE_CONTROL_FOLDERS.contains(file.getName()));
|
||||
}
|
||||
|
||||
public static String readFileToString(File file) throws IOException {
|
||||
BufferedReader reader = null;
|
||||
try {
|
||||
reader = new BufferedReader(new InputStreamReader(new FileInputStream(file)));
|
||||
StringBuilder sb = new StringBuilder();
|
||||
String line;
|
||||
while ((line = reader.readLine()) != null) {
|
||||
sb.append(line).append("\n");
|
||||
}
|
||||
return sb.toString();
|
||||
} finally {
|
||||
if (reader != null) {
|
||||
try {
|
||||
reader.close();
|
||||
} catch (IOException e) {
|
||||
// noop
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user