Skip to content

Commit b49d4cf

Browse files
committed
[css] requests update
1 parent cbb1610 commit b49d4cf

2 files changed

Lines changed: 27 additions & 2 deletions

File tree

extensions/css-language-features/server/src/requests.ts

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -113,9 +113,26 @@ export function basename(uri: string) {
113113
return uri.substr(lastIndexOfSlash + 1);
114114
}
115115

116+
116117
const Slash = '/'.charCodeAt(0);
117118
const Dot = '.'.charCodeAt(0);
118119

120+
export function extname(uri: string) {
121+
for (let i = uri.length - 1; i >= 0; i--) {
122+
const ch = uri.charCodeAt(i);
123+
if (ch === Dot) {
124+
if (i > 0 && uri.charCodeAt(i - 1) !== Slash) {
125+
return uri.substr(i);
126+
} else {
127+
break;
128+
}
129+
} else if (ch === Slash) {
130+
break;
131+
}
132+
}
133+
return '';
134+
}
135+
119136
export function isAbsolutePath(path: string) {
120137
return path.charCodeAt(0) === Slash;
121138
}

extensions/css-language-features/server/src/test/requests.test.ts

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,7 @@
44
*--------------------------------------------------------------------------------------------*/
55
import 'mocha';
66
import * as assert from 'assert';
7-
import { joinPath, normalizePath, resolvePath } from '../requests';
8-
7+
import { joinPath, normalizePath, resolvePath, extname } from '../requests';
98

109
suite('requests', () => {
1110
test('join', async function () {
@@ -51,4 +50,13 @@ suite('requests', () => {
5150
assertNormalize('..', '');
5251
assertNormalize('/..', '/');
5352
});
53+
54+
test('extname', async function () {
55+
function assertExtName(input: string, expected: string) {
56+
assert.equal(extname(input), expected, input);
57+
}
58+
assertExtName('foo://a/foo/bar', '');
59+
assertExtName('foo://a/foo/bar.foo', '.foo');
60+
assertExtName('foo://a/foo/.foo', '');
61+
});
5462
});

0 commit comments

Comments
 (0)