用JAVA写了一个简单的JS代码格式化工具
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
type = Type.DIRECTORY; } else if("-f".equals(type) || "--file".equals(t
type = Type.FILE; } else {
System.err.println(USAGE); return; } // Check file type if(Type.FILE.equals(type)) { if(path.length() <= 3 ||
size() + " file(s) formatted)"; }
} catch (Exception e) { e.printStackTrace(); return;
}
// Finish message System.out.println(finishMsg); }
/** * Format a JS file. * * @param fileName The file name of the file which
{ forCoபைடு நூலகம்nt--;
} // Add " " after ";" } else {
fw.write(';'); if(' ' != nextChar && ' ' != nextChar) {
fw.write(' '); fillTableCha r(fw, bracketCount); } } break;
-f path/file.js 或者:
--file path/file.js 2) 格式化给定的一个文件夹里的所有的 JS 文件
-d path/directory 或者:
--directory path/directory
举例:要格式化/home/newweapon/js/ 这个文件夹中的所有 JS 文件,可一使用 如下命令:
JsFormatter -d /home/newweapon/js
Section III 缺陷 目前写的这个程序还是一个比较脆弱的程序。有很多情况没有考虑到,我在注释 中把我想到的需要提高的基本都提了一下。但是因为我写这个小玩意主要是想把
我自己下的一些 JS 代码格式化一下,而这个对我来说已经够用了,再加上自己 的水平有限,所以没有将它写得很完美。等以后有时间了,再对这个程序做一些 更新。
/** Type: Directory = "0"; public interface Type {
/** Directory: 0 */ public static String
File = "1" DIRECTORY =
*/ "0";
/** File: 1 */ public static String FILE = "1"; } /* ============ constants end =================== */
String formattedFileName = fileName + ".formatt ed";
FileReader fr = new FileReader(fileName); FileWriter fw = new FileWriter(formattedFileName) ;
String lastWord = "";
le.<br/>
*/
public class JsFormatter {
/* ============ constants begin =================== */ /** Usage */ public static String USAGE = "Usage: JsFormatter -d path/directory JsFormatter -f path/filename.js";
Section IV 代码 /**
* cn.newweapon.JsFormatter */ package cn.newweapon;
import import import import import import import import import
java.io.File; java.io.FileReader; java.io.FileWriter; java.io.FilenameFilter; java.io.IOException; java.util.ArrayList; java.util.Iterator; java.util.List; java.util.regex.Pattern;
!isJsFile(path))
file.");
} }
System.err.println("The file must return;
// Start message System.out.println(startMsg);
// Format file(s) try {
if(Type.FILE.equals(type)) { formatFile(path);
/** * Entry point of the project. * * @param args Like "-d /path/directory" or "-f /pa
th/file.js" */
public static void main(String[] args) { String startMsg = "Processing..."; String finishMsg = "Finished.";
用 JAVA 写了一个简单的 JS 代码格式化工具
Section I: 为什么写这个小玩意 1. 手上有些 JS 代码,因为某种原因,起代码中没有任何回车、制表符。在编辑 器中打开时,显示的就是一行。而我实现想研究和学习这些写得比较漂亮的 JS 代码, 2. 可是好想没有哪个编辑器自带了 JS 格式化的功能。它们都可以给 JS 着色, 但就是不能控制代码格式,真是遗憾。 3. 我是我去网上搜看有没有前人做过这个东东,发现有个 JS 写的 JS 代码格式 化工具,相当不错,可以给代码格式化,还可以着色。只不过结果都是显示在网 页上,复制下来的时候那些制表符都没有了,所以贴到编辑器中时,代码还是比 较混乱;而且这个每次只能格式话一个文件,还得自己手动去 Copy & paste; 而且因为是 JS 写的,速度也受到了不小的限制; 基于以上原因,我准备自己些一个小工具来格式化我需要的代码:
case '{': // 3. add " " and " " after "{"
bracketCount++; fw.write('{'); if(' ' != nextChar && ' ' != nextChar) { // If the file is already formatted, don 't add after {.
is to be formatted. * @return String The formatted string. * @throws IOException Exception when open, read and
write file. */
private static void formatFile(String fileName) throws IOException {
Section II: 功能 1. 因为很多编辑器都有 JS 的着色功能,所一我需要的仅仅是一个格式化功能而 已,那就是主要将那种故意将代码中的空白符去掉的的 JS 加上换行、制表符等 等。 大概有一下几种情况:
1). add /n/n before "function"; 2). add /n after ";" (Except "for", and ";" between " " which is part of a string in javascript. ) and /t before the next line; 3). add "/n" and "/t" after "{"; 4). add "/n" and "/t" before "}". 2. 不仅可以格式话一个给定的文件,还可以格式化给定的一个文件夹里的所有 的 JS 文件。这个就是通过传给 Main 函数的参数来实现的。参数可以如下: 1)格式化一个文件:
fw.write(' '); fillTableChar(fw, b racketCount); } break; case '}': // 4. add " " and " " before "}" bracketCount--; fw.write(' '); fillTableChar(fw, bracketCo unt); fw.write('}'); if(';' != nextChar && '} ' != nextChar && ' ' != nextChar && ' ' != nextChar) { fw.write(' '); fillTableChar(fw, b racketCount); } break; case ''': fw.write('''); if(quoteCount == 0) { // When ' is not between "", change its state. sigleQuoteCount = sigleQuoteCount == 0 ? 1 : 0; } break; case '"': fw.write('"'); if(sigleQuoteCount == 0) { //When ' is not between "", change its state. quoteCount = quote Count == 0 ? 1 :0; } break; case 'f': // 1. add before "function"
case ';': // If the ";" is in qu
ote or in "for", then not print " " if(quoteCount > 0 || sig
leQuoteCount > 0 || forCount > 0) { fw.write(';'); if(forCount > 0)
int forCount = 0; int quoteCount = 0; int sigleQuoteCount = 0; int bracketCount = 0;
int thisChar = 0; int lastChar = 0; int nextChar = 0;
thisChar = fr.read(); if(thisChar != -1) {
{ ype)) {
{ be a JS
// Parameters check. if(args.length != 2) {
System.err.println(USAGE); return; } // Get the two parameters. String type = args[0]; String path = args[1]; // Parameters check. if("-d".equals(type) || "--directory".equals(type))
nextChar = fr.read(); }
while(thisChar != -1) { // find and replace switch(thisChar) { // 2. add after ";" (Except "for",
and ";" between " " which is part of a string in javas cript. ) and before the next line
/**
* @author Newweapon @ ustc [Email: newweapon111 (at) gmail.
com]
* @version 0.0.1
* @Created 20071015
*
* @TODO 1. user can specify the formatted file name;<br/>
} else { List<String> jsFileList = getJsFi
leList(path); Iterator<String> it = jsFileList.
iterator(); while(it.hasNext()) { formatFile(it.next()); } finishMsg += " (" + jsFileList.
*
2. User can located the formatted files
to a specified folder.<br/>
*
3. If a file is formatted partly already.
Delete all blank characters first, and then format the fi