Skip to content

Commit

Permalink
[lang][ui] Add "Correct indentation" menu item.
Browse files Browse the repository at this point in the history
In order to avoid the anoying behavior of the Ctrl+I shortcut (type a
tab character), a "Correct indentation" command is created and binded to
Ctrl+I. This command formats the selected code.

Signed-off-by: Stéphane Galland <galland@arakhne.org>
  • Loading branch information
gallandarakhneorg committed Feb 1, 2018
1 parent bfe3871 commit 6a49d2c
Show file tree
Hide file tree
Showing 2 changed files with 101 additions and 1 deletion.
37 changes: 36 additions & 1 deletion main/coreplugins/io.sarl.lang.ui/plugin.xml
Expand Up @@ -615,7 +615,9 @@
</extension>


<!-- The following elements are added by hand for the SARL project. -->
<!-- *******************************************************
The following elements are added by hand for the SARL project.
******************************************************* -->

<extension
point="org.eclipse.ui.contexts">
Expand Down Expand Up @@ -665,4 +667,37 @@

<extension-point id="extraGenerators" name="%extraGenerators" schema="schema/extraGenerators.exsd"/>

<!-- Correct indentation feature within the SARL editor -->
<extension point="org.eclipse.ui.commands">
<command
id="io.sarl.lang.ui.editor.correctIndentation"
name="Correct indentation">
</command>
</extension>
<extension point="org.eclipse.ui.handlers">
<handler
class="io.sarl.lang.ui.SARLExecutableExtensionFactory:io.sarl.lang.ui.editor.CorrectIndentationHandler"
commandId="io.sarl.lang.ui.editor.correctIndentation">
</handler>
</extension>
<extension point="org.eclipse.ui.menus">
<menuContribution allPopups="true" locationURI="popup:xtext.ui.SourceMenu?after=org.eclipse.xtext.ui.FormatAction">
<command commandId="io.sarl.lang.ui.editor.correctIndentation"
label="Correct indentation"
style="push">
<visibleWhen checkEnabled="false">
<reference
definitionId="isActiveEditorAnInstanceOfXtextEditor">
</reference>
</visibleWhen>
</command>
</menuContribution>
</extension>
<extension point="org.eclipse.ui.bindings">
<key sequence="M1+I"
contextId="org.eclipse.xtext.ui.XtextEditorScope"
commandId="io.sarl.lang.ui.editor.correctIndentation"
schemeId="org.eclipse.ui.defaultAcceleratorConfiguration"/>
</extension>

</plugin>
@@ -0,0 +1,65 @@
/*
* $Id$
*
* SARL is an general-purpose agent programming language.
* More details on http://www.sarl.io
*
* Copyright (C) 2014-2018 the original authors or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/

package io.sarl.lang.ui.editor;

import javax.inject.Inject;

import com.google.inject.Provider;
import org.eclipse.core.commands.AbstractHandler;
import org.eclipse.core.commands.ExecutionEvent;
import org.eclipse.core.commands.ExecutionException;
import org.eclipse.jface.text.IRegion;
import org.eclipse.jface.text.ITextSelection;
import org.eclipse.jface.text.Region;
import org.eclipse.xtext.ui.editor.XtextEditor;
import org.eclipse.xtext.ui.editor.formatting2.ContentFormatter;
import org.eclipse.xtext.ui.editor.model.IXtextDocument;
import org.eclipse.xtext.ui.editor.utils.EditorUtils;

/**
* Handler for correct the indentation within a SARL code.
*
* @author $Author: sgalland$
* @version $FullVersion$
* @mavengroupid $GroupId$
* @mavenartifactid $ArtifactId$
* @since 0.7
*/
public class CorrectIndentationHandler extends AbstractHandler {

@Inject
private Provider<ContentFormatter> formatterProvider;

@Override
public Object execute(ExecutionEvent event) throws ExecutionException {
final XtextEditor activeXtextEditor = EditorUtils.getActiveXtextEditor(event);
if (activeXtextEditor == null) {
return null;
}
final IXtextDocument doc = activeXtextEditor.getDocument();
final ITextSelection selection = (ITextSelection) activeXtextEditor.getSelectionProvider().getSelection();
final IRegion region = new Region(selection.getOffset(), selection.getLength());
this.formatterProvider.get().format(doc, region);
return null;
}

}

0 comments on commit 6a49d2c

Please sign in to comment.