SmallSense__CompletionContext.st
author Jan Vrany <jan.vrany@fit.cvut.cz>
Thu, 17 Oct 2013 01:41:47 +0100
changeset 132 7c23c51d2cfd
parent 108 71471dc81e77
child 133 bd659b67811c
permissions -rw-r--r--
Completion insertion refactoring. Added language and codeView into CompletionContext. Added context slot into PO so the PO itself know the completion context and can tweak its presentation accordingly. Also, actual text insertion is now delegated to the PO so the PO can insert proper text according to the context (especially - language)
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
108
71471dc81e77 Completion refactoring (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     1
"{ Package: 'jv:smallsense' }"
71471dc81e77 Completion refactoring (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     2
71471dc81e77 Completion refactoring (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     3
"{ NameSpace: SmallSense }"
71471dc81e77 Completion refactoring (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     4
71471dc81e77 Completion refactoring (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     5
Object subclass:#CompletionContext
132
7c23c51d2cfd Completion insertion refactoring.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 108
diff changeset
     6
	instanceVariableNames:'node position codeView language'
108
71471dc81e77 Completion refactoring (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     7
	classVariableNames:''
71471dc81e77 Completion refactoring (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     8
	poolDictionaries:''
71471dc81e77 Completion refactoring (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     9
	category:'SmallSense-Core'
71471dc81e77 Completion refactoring (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    10
!
71471dc81e77 Completion refactoring (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    11
71471dc81e77 Completion refactoring (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    12
71471dc81e77 Completion refactoring (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    13
!CompletionContext class methodsFor:'instance creation'!
71471dc81e77 Completion refactoring (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    14
71471dc81e77 Completion refactoring (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    15
node: node position: position
71471dc81e77 Completion refactoring (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    16
71471dc81e77 Completion refactoring (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    17
    ^self new node: node position: position
71471dc81e77 Completion refactoring (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    18
71471dc81e77 Completion refactoring (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    19
    "Created: / 26-11-2011 / 16:22:50 / Jan Vrany <jan.vrany@fit.cvut.cz>"
71471dc81e77 Completion refactoring (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    20
! !
71471dc81e77 Completion refactoring (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    21
71471dc81e77 Completion refactoring (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    22
!CompletionContext methodsFor:'accessing'!
71471dc81e77 Completion refactoring (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    23
132
7c23c51d2cfd Completion insertion refactoring.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 108
diff changeset
    24
codeView
7c23c51d2cfd Completion insertion refactoring.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 108
diff changeset
    25
    ^ codeView
7c23c51d2cfd Completion insertion refactoring.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 108
diff changeset
    26
!
7c23c51d2cfd Completion insertion refactoring.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 108
diff changeset
    27
7c23c51d2cfd Completion insertion refactoring.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 108
diff changeset
    28
language
7c23c51d2cfd Completion insertion refactoring.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 108
diff changeset
    29
    ^ language
7c23c51d2cfd Completion insertion refactoring.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 108
diff changeset
    30
!
7c23c51d2cfd Completion insertion refactoring.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 108
diff changeset
    31
108
71471dc81e77 Completion refactoring (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    32
node
71471dc81e77 Completion refactoring (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    33
    ^ node
71471dc81e77 Completion refactoring (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    34
!
71471dc81e77 Completion refactoring (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    35
71471dc81e77 Completion refactoring (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    36
position
71471dc81e77 Completion refactoring (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    37
    ^ position
71471dc81e77 Completion refactoring (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    38
! !
71471dc81e77 Completion refactoring (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    39
71471dc81e77 Completion refactoring (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    40
!CompletionContext methodsFor:'initialization'!
71471dc81e77 Completion refactoring (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    41
132
7c23c51d2cfd Completion insertion refactoring.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 108
diff changeset
    42
codeView:something
7c23c51d2cfd Completion insertion refactoring.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 108
diff changeset
    43
    codeView := something.
7c23c51d2cfd Completion insertion refactoring.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 108
diff changeset
    44
!
7c23c51d2cfd Completion insertion refactoring.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 108
diff changeset
    45
7c23c51d2cfd Completion insertion refactoring.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 108
diff changeset
    46
language:something
7c23c51d2cfd Completion insertion refactoring.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 108
diff changeset
    47
    language := something.
7c23c51d2cfd Completion insertion refactoring.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 108
diff changeset
    48
!
7c23c51d2cfd Completion insertion refactoring.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 108
diff changeset
    49
108
71471dc81e77 Completion refactoring (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    50
node:nd position: pos
71471dc81e77 Completion refactoring (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    51
71471dc81e77 Completion refactoring (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    52
    node := nd.
71471dc81e77 Completion refactoring (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    53
    position := pos.
71471dc81e77 Completion refactoring (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    54
71471dc81e77 Completion refactoring (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    55
    "Created: / 26-11-2011 / 16:22:13 / Jan Vrany <jan.vrany@fit.cvut.cz>"
132
7c23c51d2cfd Completion insertion refactoring.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 108
diff changeset
    56
    "Modified: / 16-10-2013 / 23:31:55 / Jan Vrany <jan.vrany@fit.cvut.cz>"
7c23c51d2cfd Completion insertion refactoring.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 108
diff changeset
    57
! !
7c23c51d2cfd Completion insertion refactoring.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 108
diff changeset
    58
7c23c51d2cfd Completion insertion refactoring.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 108
diff changeset
    59
!CompletionContext methodsFor:'private'!
7c23c51d2cfd Completion insertion refactoring.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 108
diff changeset
    60
7c23c51d2cfd Completion insertion refactoring.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 108
diff changeset
    61
wordBeforeCursor
7c23c51d2cfd Completion insertion refactoring.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 108
diff changeset
    62
    | textView currentLine wordStart wordEnd |
7c23c51d2cfd Completion insertion refactoring.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 108
diff changeset
    63
    textView := codeView.
7c23c51d2cfd Completion insertion refactoring.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 108
diff changeset
    64
    textView isCodeView2 ifTrue:[textView := textView textView].
7c23c51d2cfd Completion insertion refactoring.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 108
diff changeset
    65
    currentLine := textView list at: textView cursorLine.
7c23c51d2cfd Completion insertion refactoring.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 108
diff changeset
    66
    currentLine isNil ifTrue:[ ^ '' ].
7c23c51d2cfd Completion insertion refactoring.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 108
diff changeset
    67
    wordEnd := textView cursorCol - 1.
7c23c51d2cfd Completion insertion refactoring.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 108
diff changeset
    68
    wordEnd > currentLine size ifTrue:[ ^ '' ].
7c23c51d2cfd Completion insertion refactoring.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 108
diff changeset
    69
    wordEnd ~~ 0 ifTrue:[
7c23c51d2cfd Completion insertion refactoring.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 108
diff changeset
    70
        wordStart := wordEnd.
7c23c51d2cfd Completion insertion refactoring.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 108
diff changeset
    71
        [ wordStart > 0 and:[(currentLine at: wordStart) isAlphaNumeric] ] whileTrue:[
7c23c51d2cfd Completion insertion refactoring.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 108
diff changeset
    72
            wordStart := wordStart - 1.
7c23c51d2cfd Completion insertion refactoring.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 108
diff changeset
    73
        ].
7c23c51d2cfd Completion insertion refactoring.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 108
diff changeset
    74
        wordStart := wordStart + 1.
7c23c51d2cfd Completion insertion refactoring.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 108
diff changeset
    75
        wordStart <= wordEnd ifTrue:[
7c23c51d2cfd Completion insertion refactoring.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 108
diff changeset
    76
            ^ currentLine copyFrom: wordStart to: wordEnd.
7c23c51d2cfd Completion insertion refactoring.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 108
diff changeset
    77
        ].
7c23c51d2cfd Completion insertion refactoring.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 108
diff changeset
    78
    ].
7c23c51d2cfd Completion insertion refactoring.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 108
diff changeset
    79
    ^ ''
7c23c51d2cfd Completion insertion refactoring.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 108
diff changeset
    80
7c23c51d2cfd Completion insertion refactoring.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 108
diff changeset
    81
    "Created: / 27-09-2013 / 15:53:40 / Jan Vrany <jan.vrany@fit.cvut.cz>"
7c23c51d2cfd Completion insertion refactoring.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 108
diff changeset
    82
    "Modified: / 17-10-2013 / 00:46:51 / Jan Vrany <jan.vrany@fit.cvut.cz>"
108
71471dc81e77 Completion refactoring (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    83
! !
71471dc81e77 Completion refactoring (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    84
71471dc81e77 Completion refactoring (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    85
!CompletionContext methodsFor:'queries'!
71471dc81e77 Completion refactoring (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    86
71471dc81e77 Completion refactoring (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    87
isAfterNode
132
7c23c51d2cfd Completion insertion refactoring.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 108
diff changeset
    88
    ^ node notNil and:[node endPosition < (position - 1)]
108
71471dc81e77 Completion refactoring (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    89
71471dc81e77 Completion refactoring (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    90
    "Created: / 26-11-2011 / 16:24:53 / Jan Vrany <jan.vrany@fit.cvut.cz>"
132
7c23c51d2cfd Completion insertion refactoring.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 108
diff changeset
    91
    "Modified: / 16-10-2013 / 23:31:40 / Jan Vrany <jan.vrany@fit.cvut.cz>"
108
71471dc81e77 Completion refactoring (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    92
!
71471dc81e77 Completion refactoring (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    93
71471dc81e77 Completion refactoring (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    94
isBeforeNode
71471dc81e77 Completion refactoring (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    95
    ^node notNil and:[position < node startPosition]
71471dc81e77 Completion refactoring (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    96
71471dc81e77 Completion refactoring (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    97
    "Created: / 26-11-2011 / 16:24:10 / Jan Vrany <jan.vrany@fit.cvut.cz>"
71471dc81e77 Completion refactoring (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    98
    "Modified: / 24-09-2013 / 13:11:55 / Jan Vrany <jan.vrany@fit.cvut.cz>"
71471dc81e77 Completion refactoring (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    99
!
71471dc81e77 Completion refactoring (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   100
71471dc81e77 Completion refactoring (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   101
isInNode
132
7c23c51d2cfd Completion insertion refactoring.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 108
diff changeset
   102
    ^ node notNil and:[(position - 1) between:node startPosition and:node endPosition]
108
71471dc81e77 Completion refactoring (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   103
71471dc81e77 Completion refactoring (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   104
    "Created: / 26-11-2011 / 16:24:29 / Jan Vrany <jan.vrany@fit.cvut.cz>"
132
7c23c51d2cfd Completion insertion refactoring.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 108
diff changeset
   105
    "Modified: / 16-10-2013 / 23:31:47 / Jan Vrany <jan.vrany@fit.cvut.cz>"
108
71471dc81e77 Completion refactoring (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   106
! !
71471dc81e77 Completion refactoring (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   107
71471dc81e77 Completion refactoring (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   108
!CompletionContext class methodsFor:'documentation'!
71471dc81e77 Completion refactoring (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   109
71471dc81e77 Completion refactoring (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   110
version_HG
71471dc81e77 Completion refactoring (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   111
71471dc81e77 Completion refactoring (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   112
    ^ '$Changeset: <not expanded> $'
71471dc81e77 Completion refactoring (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   113
!
71471dc81e77 Completion refactoring (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   114
71471dc81e77 Completion refactoring (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   115
version_SVN
71471dc81e77 Completion refactoring (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   116
    ^ '$Id: SmallSensePosition.st 7823 2011-11-26 16:55:59Z vranyj1 $'
71471dc81e77 Completion refactoring (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   117
! !
71471dc81e77 Completion refactoring (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   118