11'use strict' ;
22
3- import { commands , ExtensionContext , Position , Range , Selection , window } from 'vscode' ;
3+ import { commands , Position , Range , Selection , window } from 'vscode' ;
44import { Commands } from './commands' ;
55import { getJavaConfiguration } from './utils' ;
6+ let active = false ;
67
7- let oldPosition : Position = null ;
8- let newPosition : Position = null ;
9-
10- export function registerSmartSemicolonDetection ( context : ExtensionContext ) {
11- context . subscriptions . push ( commands . registerCommand ( Commands . SMARTSEMICOLON_DETECTION_CMD , async ( ) => {
12- if ( ! didSmartSemicolonInsertion ( ) && enabled ( ) ) {
13- const params : SmartDetectionParams = {
14- uri : window . activeTextEditor . document . uri . toString ( ) ,
15- position : window . activeTextEditor ! . selection . active ,
16- } ;
17- const response : SmartDetectionParams = await commands . executeCommand ( Commands . EXECUTE_WORKSPACE_COMMAND , Commands . SMARTSEMICOLON_DETECTION , JSON . stringify ( params ) ) ;
18- if ( response !== null ) {
19- window . activeTextEditor ! . edit ( editBuilder => {
20- oldPosition = window . activeTextEditor ! . selection . active ;
21- editBuilder . insert ( response . position , ";" ) ;
22- window . activeTextEditor . selections = [ new Selection ( response . position , response . position ) ] ;
23- newPosition = window . activeTextEditor ! . selection . active ;
24- } ) ;
25- return ;
26- }
8+ export async function smartSemicolonDetection ( ) {
9+ if ( enabled ( ) ) {
10+ const params : SmartDetectionParams = {
11+ uri : window . activeTextEditor . document . uri . toString ( ) ,
12+ position : window . activeTextEditor ! . selection . active ,
13+ } ;
14+ setActive ( true ) ;
15+ const response : SmartDetectionParams = await commands . executeCommand ( Commands . EXECUTE_WORKSPACE_COMMAND , Commands . SMARTSEMICOLON_DETECTION , JSON . stringify ( params ) ) ;
16+ if ( response !== null ) {
17+ window . activeTextEditor ! . edit ( editBuilder => {
18+ const oldPosition = window . activeTextEditor ! . selection . active ;
19+ editBuilder . delete ( new Range ( new Position ( oldPosition . line , oldPosition . character - 1 ) , oldPosition ) ) ;
20+ const newPos = new Position ( response . position . line , response . position . character + 1 ) ;
21+ editBuilder . insert ( newPos , ";" ) ;
22+ window . activeTextEditor . selections = [ new Selection ( newPos , newPos ) ] ;
23+ // newPosition = window.activeTextEditor!.selection.active;
24+ } ) ;
25+ return ;
2726 }
28- window . activeTextEditor ! . edit ( editBuilder => {
29- editBuilder . insert ( window . activeTextEditor ! . selection . active , ";" ) ;
30- } ) ;
31- newPosition = null ;
32- oldPosition = null ;
33- } ) ) ;
27+ }
3428}
3529
3630interface SmartDetectionParams {
3731 uri : String ;
3832 position : Position ;
3933}
4034
41- function didSmartSemicolonInsertion ( ) {
42- const smartSemicolonInsertion = window . activeTextEditor . selections . length === 1 && enabled ( ) && oldPosition !== null && newPosition !== null ;
43- if ( smartSemicolonInsertion ) {
44- const active = window . activeTextEditor ! . selection . active ;
45- const prev = new Position ( active . line , active . character === 0 ? 0 : active . character - 1 ) ;
46- return newPosition . isEqual ( prev ) ;
47- }
48- return smartSemicolonInsertion ;
49- }
50-
5135function enabled ( ) {
5236 return getJavaConfiguration ( ) . get < boolean > ( "edit.smartSemicolonDetection.enabled" ) ;
5337}
5438
55- export function setSmartSemiColonDetectionState ( oldPos : Position , newPos : Position ) {
56- oldPosition = oldPos ;
57- newPos = newPos ;
39+ export function isActive ( ) {
40+ return active ;
41+ }
42+
43+ export function setActive ( pActive : boolean ) {
44+ active = pActive ;
5845}
0 commit comments