|
From: <caw...@us...> - 2007-08-22 16:40:04
|
Revision: 3044
http://rubyeclipse.svn.sourceforge.net/rubyeclipse/?rev=3044&view=rev
Author: cawilliams
Date: 2007-08-22 09:39:58 -0700 (Wed, 22 Aug 2007)
Log Message:
-----------
start work on an AST based code formatter...
Added Paths:
-----------
trunk/org.rubypeople.rdt.core/src/org/rubypeople/rdt/internal/formatter/ASTBasedCodeFormatter.java
Added: trunk/org.rubypeople.rdt.core/src/org/rubypeople/rdt/internal/formatter/ASTBasedCodeFormatter.java
===================================================================
--- trunk/org.rubypeople.rdt.core/src/org/rubypeople/rdt/internal/formatter/ASTBasedCodeFormatter.java (rev 0)
+++ trunk/org.rubypeople.rdt.core/src/org/rubypeople/rdt/internal/formatter/ASTBasedCodeFormatter.java 2007-08-22 16:39:58 UTC (rev 3044)
@@ -0,0 +1,37 @@
+package org.rubypeople.rdt.internal.formatter;
+
+import java.io.StringWriter;
+
+import org.eclipse.text.edits.ReplaceEdit;
+import org.eclipse.text.edits.TextEdit;
+import org.jruby.ast.Node;
+import org.jruby.ast.visitor.rewriter.ReWriteVisitor;
+import org.jruby.ast.visitor.rewriter.ReWriterFactory;
+import org.jruby.ast.visitor.rewriter.utils.ReWriterContext;
+import org.rubypeople.rdt.core.formatter.CodeFormatter;
+import org.rubypeople.rdt.core.formatter.EditableFormatHelper;
+import org.rubypeople.rdt.internal.core.parser.RubyParser;
+
+public class ASTBasedCodeFormatter extends CodeFormatter {
+
+ @Override
+ public TextEdit format(int kind, String source, int offset, int length,
+ int indentationLevel, String lineSeparator) {
+ StringWriter writer = new StringWriter();
+ EditableFormatHelper helper = new EditableFormatHelper();
+ helper.setLineDelimeter(lineSeparator);
+ helper.setSpacesBeforeAndAfterAssignments(true);
+ helper.setAlwaysParanthesizeMethodDefs(true);
+ source = source.substring(offset, length);
+ ReWriterContext context = new ReWriterContext(writer, source, helper);
+ ReWriterFactory factory = new ReWriterFactory(context);
+ ReWriteVisitor visitor = factory.createReWriteVisitor();
+ RubyParser parser = new RubyParser();
+ Node root = parser.parse(source);
+ root.accept(visitor);
+ writer.append(lineSeparator);
+ String result = writer.getBuffer().toString();
+ return new ReplaceEdit(offset, length, result);
+ }
+
+}
Property changes on: trunk/org.rubypeople.rdt.core/src/org/rubypeople/rdt/internal/formatter/ASTBasedCodeFormatter.java
___________________________________________________________________
Name: svn:mime-type
+ text/plain
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|