Skip to content

Commit

Permalink
completion details optimization
Browse files Browse the repository at this point in the history
  • Loading branch information
nighca committed Jan 23, 2025
1 parent 7bbde51 commit e740289
Show file tree
Hide file tree
Showing 4 changed files with 57 additions and 19 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@ watchEffect(() => {
</script>

<template>
<li ref="wrapperRef" class="completion-item" :class="{ active }">
<li ref="wrapperRef" class="completion-item" :class="{ active }" :title="item.label">
<DefinitionIcon class="icon" :kind="item.kind" />
<code class="code"
><span v-for="(part, i) in parts" :key="i" :class="{ matched: part.isMatched }">{{ part.content }}</span></code
Expand All @@ -50,8 +50,11 @@ watchEffect(() => {
</template>

<style lang="scss" scoped>
@import '@/utils/utils';
.completion-item {
min-width: 8em;
max-width: 14em;
display: flex;
align-items: center;
padding: 7px;
Expand All @@ -72,7 +75,9 @@ watchEffect(() => {
}
.code {
flex: 1 1 0;
font-family: var(--ui-font-family-code);
@include text-ellipsis;
}
.matched {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -223,7 +223,7 @@ export class CompletionController extends Emitter<{
}

function shouldTriggerCompletion(char: string) {
return /[\w.]/.test(char)
return /[\w."]/.test(char)
}

function compareItems(a: InternalCompletionItem, b: InternalCompletionItem) {
Expand Down
36 changes: 19 additions & 17 deletions tools/spxls/internal/server/completion.go
Original file line number Diff line number Diff line change
Expand Up @@ -632,12 +632,12 @@ func (ctx *completionContext) collectTypeSpecific(typ types.Type) error {
return nil
}

var spxResourceNames []string
var spxResourceIds []SpxResourceID
switch typ {
case GetSpxBackdropNameType():
spxResourceNames = slices.Grow(spxResourceNames, len(ctx.result.spxResourceSet.backdrops))
spxResourceIds = slices.Grow(spxResourceIds, len(ctx.result.spxResourceSet.backdrops))
for spxBackdropName := range ctx.result.spxResourceSet.backdrops {
spxResourceNames = append(spxResourceNames, spxBackdropName)
spxResourceIds = append(spxResourceIds, SpxBackdropResourceID{spxBackdropName})
}
case GetSpxSpriteType(), GetSpxSpriteImplType():
for spxSprite := range ctx.result.spxSpriteResourceAutoBindings {
Expand All @@ -646,27 +646,27 @@ func (ctx *completionContext) collectTypeSpecific(typ types.Type) error {
}
}
case GetSpxSpriteNameType():
spxResourceNames = slices.Grow(spxResourceNames, len(ctx.result.spxResourceSet.sprites))
spxResourceIds = slices.Grow(spxResourceIds, len(ctx.result.spxResourceSet.sprites))
for spxSpriteName := range ctx.result.spxResourceSet.sprites {
spxResourceNames = append(spxResourceNames, spxSpriteName)
spxResourceIds = append(spxResourceIds, SpxSpriteResourceID{spxSpriteName})
}
case GetSpxSpriteCostumeNameType():
expectedSpxSprite := ctx.getSpxSpriteResource()
for _, spxSprite := range ctx.result.spxResourceSet.sprites {
if expectedSpxSprite == nil || spxSprite == expectedSpxSprite {
spxResourceNames = slices.Grow(spxResourceNames, len(spxSprite.Costumes))
spxResourceIds = slices.Grow(spxResourceIds, len(spxSprite.Costumes))
for _, spxSpriteCostume := range spxSprite.Costumes {
spxResourceNames = append(spxResourceNames, spxSpriteCostume.Name)
spxResourceIds = append(spxResourceIds, SpxSpriteCostumeResourceID{spxSprite.Name, spxSpriteCostume.Name})
}
}
}
case GetSpxSpriteAnimationNameType():
expectedSpxSprite := ctx.getSpxSpriteResource()
for _, spxSprite := range ctx.result.spxResourceSet.sprites {
if expectedSpxSprite == nil || spxSprite == expectedSpxSprite {
spxResourceNames = slices.Grow(spxResourceNames, len(spxSprite.Animations))
spxResourceIds = slices.Grow(spxResourceIds, len(spxSprite.Animations))
for _, spxSpriteAnimation := range spxSprite.Animations {
spxResourceNames = append(spxResourceNames, spxSpriteAnimation.Name)
spxResourceIds = append(spxResourceIds, SpxSpriteAnimationResourceID{spxSprite.Name, spxSpriteAnimation.Name})
}
}
}
Expand All @@ -677,24 +677,26 @@ func (ctx *completionContext) collectTypeSpecific(typ types.Type) error {
}
}
case GetSpxSoundNameType():
spxResourceNames = slices.Grow(spxResourceNames, len(ctx.result.spxResourceSet.sounds))
spxResourceIds = slices.Grow(spxResourceIds, len(ctx.result.spxResourceSet.sounds))
for spxSoundName := range ctx.result.spxResourceSet.sounds {
spxResourceNames = append(spxResourceNames, spxSoundName)
spxResourceIds = append(spxResourceIds, SpxSoundResourceID{spxSoundName})
}
case GetSpxWidgetNameType():
spxResourceNames = slices.Grow(spxResourceNames, len(ctx.result.spxResourceSet.widgets))
spxResourceIds = slices.Grow(spxResourceIds, len(ctx.result.spxResourceSet.widgets))
for spxWidgetName := range ctx.result.spxResourceSet.widgets {
spxResourceNames = append(spxResourceNames, spxWidgetName)
spxResourceIds = append(spxResourceIds, SpxWidgetResourceID{spxWidgetName})
}
}
for _, spxResourceName := range spxResourceNames {
for _, spxResourceId := range spxResourceIds {
name := spxResourceId.Name()
if !ctx.inStringLit {
spxResourceName = strconv.Quote(spxResourceName)
name = strconv.Quote(name)
}
ctx.itemSet.add(CompletionItem{
Label: spxResourceName,
Label: name,
Kind: TextCompletion,
InsertText: spxResourceName,
Documentation: &Or_CompletionItem_documentation{Value: MarkupContent{Kind: Markdown, Value: spxResourceId.URI().HTML()}},
InsertText: name,
InsertTextFormat: util.ToPtr(PlainTextTextFormat),
})
}
Expand Down
31 changes: 31 additions & 0 deletions tools/spxls/internal/server/spx_resource.go
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ import (

// SpxResourceID is the ID of an spx resource.
type SpxResourceID interface {
Name() string
URI() SpxResourceURI
}

Expand Down Expand Up @@ -232,6 +233,11 @@ type SpxBackdropResourceID struct {
BackdropName string
}

// Name implements [SpxResourceID].
func (id SpxBackdropResourceID) Name() string {
return id.BackdropName
}

// URI implements [SpxResourceID].
func (id SpxBackdropResourceID) URI() SpxResourceURI {
return SpxResourceURI(fmt.Sprintf("spx://resources/backdrops/%s", id.BackdropName))
Expand All @@ -249,6 +255,11 @@ type SpxSoundResourceID struct {
SoundName string
}

// Name implements [SpxResourceID].
func (id SpxSoundResourceID) Name() string {
return id.SoundName
}

// URI implements [SpxResourceID].
func (id SpxSoundResourceID) URI() SpxResourceURI {
return SpxResourceURI(fmt.Sprintf("spx://resources/sounds/%s", id.SoundName))
Expand All @@ -270,6 +281,11 @@ type SpxSpriteResourceID struct {
SpriteName string
}

// Name implements [SpxResourceID].
func (id SpxSpriteResourceID) Name() string {
return id.SpriteName
}

// URI implements [SpxResourceID].
func (id SpxSpriteResourceID) URI() SpxResourceURI {
return SpxResourceURI(fmt.Sprintf("spx://resources/sprites/%s", id.SpriteName))
Expand Down Expand Up @@ -311,6 +327,11 @@ type SpxSpriteCostumeResourceID struct {
CostumeName string
}

// Name implements [SpxResourceID].
func (id SpxSpriteCostumeResourceID) Name() string {
return id.CostumeName
}

// URI implements [SpxResourceID].
func (id SpxSpriteCostumeResourceID) URI() SpxResourceURI {
return SpxResourceURI(fmt.Sprintf("spx://resources/sprites/%s/costumes/%s", id.SpriteName, id.CostumeName))
Expand All @@ -328,6 +349,11 @@ type SpxSpriteAnimationResourceID struct {
AnimationName string
}

// Name implements [SpxResourceID].
func (id SpxSpriteAnimationResourceID) Name() string {
return id.AnimationName
}

// URI implements [SpxResourceID].
func (id SpxSpriteAnimationResourceID) URI() SpxResourceURI {
return SpxResourceURI(fmt.Sprintf("spx://resources/sprites/%s/animations/%s", id.SpriteName, id.AnimationName))
Expand All @@ -347,6 +373,11 @@ type SpxWidgetResourceID struct {
WidgetName string
}

// Name implements [SpxResourceID].
func (id SpxWidgetResourceID) Name() string {
return id.WidgetName
}

// URI implements [SpxResourceID].
func (id SpxWidgetResourceID) URI() SpxResourceURI {
return SpxResourceURI(fmt.Sprintf("spx://resources/widgets/%s", id.WidgetName))
Expand Down

0 comments on commit e740289

Please sign in to comment.